<?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>161498</bug_id>
          
          <creation_ts>2016-09-01 11:38:46 -0700</creation_ts>
          <short_desc>Add CatchScope and force all exception checks to be via ThrowScope or CatchScope.</short_desc>
          <delta_ts>2016-09-08 13:45:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=161756</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>161499</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1225425</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-01 11:38:46 -0700</bug_when>
    <thetext>Details coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225841</commentid>
    <comment_count>1</comment_count>
      <attachid>287783</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-02 11:08:33 -0700</bug_when>
    <thetext>Created attachment 287783
work in progress: still need ChangeLogs, perf tests, and comments.

Let&apos;s try this on the EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226045</commentid>
    <comment_count>2</comment_count>
      <attachid>287837</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-02 17:29:58 -0700</bug_when>
    <thetext>Created attachment 287837
x86_64 benchmark result run 1

This is the benchmark results from the last patch.  The only reproducible diffs there are &quot;definitely&quot; regressions in longspider:hash-map and microbenchmarks:string-sub.  However, after I rebased my workspaces to ToT r205382 with no code changes of my own, these regressions disappeared.  I think it&apos;s fair to say that they are noise due to cache alignment or something, and call it a wash.

Will upload the newly rebased patch for EWS testing shortly.  I still need to do a manual review of the patch and write ChangeLog and documentation before it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226046</commentid>
    <comment_count>3</comment_count>
      <attachid>287838</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-02 17:30:49 -0700</bug_when>
    <thetext>Created attachment 287838
work in progress: rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226052</commentid>
    <comment_count>4</comment_count>
      <attachid>287839</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-02 17:45:00 -0700</bug_when>
    <thetext>Created attachment 287839
work in progress: rebased again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226053</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-02 17:48:19 -0700</bug_when>
    <thetext>Attachment 287839 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/WorkerScriptController.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 222 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226260</commentid>
    <comment_count>6</comment_count>
      <attachid>287902</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-04 07:57:00 -0700</bug_when>
    <thetext>Created attachment 287902
work in progress: rebased again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226261</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-04 08:00:03 -0700</bug_when>
    <thetext>Attachment 287902 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/WorkerScriptController.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 222 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226262</commentid>
    <comment_count>8</comment_count>
      <attachid>287903</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-04 08:03:57 -0700</bug_when>
    <thetext>Created attachment 287903
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226263</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-04 08:06:38 -0700</bug_when>
    <thetext>Attachment 287903 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/WorkerScriptController.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 222 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226264</commentid>
    <comment_count>10</comment_count>
      <attachid>287904</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-04 08:22:52 -0700</bug_when>
    <thetext>Created attachment 287904
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226273</commentid>
    <comment_count>11</comment_count>
      <attachid>287904</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-09-04 09:37:31 -0700</bug_when>
    <thetext>Comment on attachment 287904
work in progress

Attachment 287904 did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/2006784

New failing tests:
fast/dom/Window/window-postmessage-clone.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226274</commentid>
    <comment_count>12</comment_count>
      <attachid>287911</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-09-04 09:37:34 -0700</bug_when>
    <thetext>Created attachment 287911
Archive of layout-test-results from ews114 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews114  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226758</commentid>
    <comment_count>13</comment_count>
      <attachid>288034</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-06 11:14:22 -0700</bug_when>
    <thetext>Created attachment 288034
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226785</commentid>
    <comment_count>14</comment_count>
      <attachid>288036</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-06 12:21:04 -0700</bug_when>
    <thetext>Created attachment 288036
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226798</commentid>
    <comment_count>15</comment_count>
      <attachid>288036</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-06 12:58:58 -0700</bug_when>
    <thetext>Comment on attachment 288036
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        3. ThrowScope and CatchScope are now sub-classes of ExceptionScope.  This is needed
&gt; +           because ThrowScope also needs to be aware of CatchScopes that enclose it, so
&gt; +           as to be able to determine whether it needs to simulate a re-throw or not.

I don&apos;t understand this. Under what conditions is it beneficial for a ThrowScope not to simulate a throw?

&gt; Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp:235
&gt; +        auto scope = DECLARE_CATCH_SCOPE(vm);

I thought we liked putting these at the top of the function?

&gt; Source/JavaScriptCore/runtime/CatchScope.cpp:33
&gt; +// See comments at the top of ThrowScope.cpp for details on how CatchScopes work.

I don&apos;t like hyperlinks in comments. Can we put the description of CatchScope into CatchScope.h?

&gt; Source/JavaScriptCore/runtime/CatchScope.h:45
&gt; +        m_vm.m_needExceptionCheck = false;

This line should move into VM::clearException().

&gt; Source/JavaScriptCore/runtime/ExceptionScope.cpp:43
&gt; +    if (m_vm.m_traceExceptionEvents) {

I don&apos;t think we want this in-tree. We already have extremely verbose reporting for exception checks.

&gt; Source/JavaScriptCore/runtime/ThrowScope.cpp:102
&gt; +       Note: it is wrong to assert that there is no exception on entry into a CatchScope.
&gt; +       This is because a ThrowScope may enclose a CatchScope, and use the CatchScope
&gt; +       to clear the exception only in some cases. Hence, we need to be able to enter
&gt; +       the CatchScope with a pending exception. The only invariant is that we must
&gt; +       never exit it with an exception still pending.

This requirement decreases our error checking ability.

Do we need to keep things this way? Why can&apos;t we declare our catch scope at a high enough level so that it encloses any possible exception throw?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226845</commentid>
    <comment_count>16</comment_count>
      <attachid>288036</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-06 14:52:10 -0700</bug_when>
    <thetext>Comment on attachment 288036
proposed patch.

Taking out of review.  I&apos;m revising with feedback from Geoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227347</commentid>
    <comment_count>17</comment_count>
      <attachid>288184</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-07 14:20:55 -0700</bug_when>
    <thetext>Created attachment 288184
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227359</commentid>
    <comment_count>18</comment_count>
      <attachid>288184</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-07 14:45:26 -0700</bug_when>
    <thetext>Comment on attachment 288184
proposed patch.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227372</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-07 15:08:01 -0700</bug_when>
    <thetext>I forgot that we ended up not needing CatchScope::release() so far.  As a result, the patch does not have it in the code.  I will also remove mentions of it in the ChangeLog before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227375</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-07 15:14:02 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r205569: &lt;http://trac.webkit.org/r205569&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287783</attachid>
            <date>2016-09-02 11:08:33 -0700</date>
            <delta_ts>2016-09-02 17:29:58 -0700</delta_ts>
            <desc>work in progress: still need ChangeLogs, perf tests, and comments.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785582</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTMyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMCwxMSArMTAzMiwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA0Nyw5ICsxMDUyLDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzNSwxMSArMTE0MCwxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjQ0LDkgKzEyNTEsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDM0LDcgKzE0NDEsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NjgsNyArMTQ3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE0OTYsNyArMTUwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUxNyw3ICsxNTI0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTUzNCw3ICsx
NTQxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU0OSw3ICsxNTU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjA5LDggKzE2
MTYsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg2MywxNCArMTg3MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4ODgsMTQgKzE4OTgs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTE0LDcgKzE5MjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDAsMTQg
KzE5NTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzAsNyArMTk4
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwNzYsNiArMjA5MCwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDg0
LDkgKzIxMDgsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMDk4LDExICsyMTI2LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpCiB7Ci0gICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewogICAgICAgICBwcmludGYoIkV4cGVj
dGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIG5hbWUgJyVzJyBidXQgbm9uZSB3YXMgdGhyb3du
XG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTIxMTAsMTMgKzIxNDEsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdo
dEV4Y2VwdGlvbihWTSYgdgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhwZWN0ZWRFeGNlcHRpb25O
YW1lKSk7Ci0gICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHZtLmV4Y2VwdGlv
bigpKSB7CisgICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHNjb3BlLmV4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdp
dGggbmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgaXMgbm90IGRlZmluZWRcbiIs
IGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnN0YW5jZU9mRXhwZWN0ZWRFeGNlcHRpb24gPSBq
c0Nhc3Q8SlNPYmplY3QqPihleGNlcHRpb25DbGFzcyktPmhhc0luc3RhbmNlKGV4ZWMsIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGgg
bmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgZmFpbHMgcGVyZm9ybWluZyBoYXNJ
bnN0YW5jZVxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjEzNyw2ICsyMTY4LDcgQEAgc3RhdGljIGJvb2wg
cnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBH
ZW5lcmF0ZWRCeXRlY29kZXMoKSA9IHRydWU7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7CiAKICAgICBhdXRvIGNoZWNrRXhjZXB0aW9uID0gWyZdIChib29s
IGlzTGFzdEZpbGUsIGJvb2wgaGFzRXhjZXB0aW9uLCBKU1ZhbHVlIHZhbHVlKSB7CkBAIC0yMTc5
LDcgKzIyMTEsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIGlmIChpc01vZHVsZSkgewogICAgICAgICAgICAgaWYgKCFwcm9taXNlKQogICAgICAg
ICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1lKSk7Ci0gICAgICAg
ICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKIAogICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVsZmlsbEhhbmRsZXIgPSBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsmLCBp
c0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAgICAgICAgICAgICBjaGVja0V4Y2Vw
dGlvbihpc0xhc3RGaWxlLCBmYWxzZSwgZXhlYy0+YXJndW1lbnQoMCkpOwpAQCAtMjE5NiwxMyAr
MjIyOCwxNCBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25F
eGNlcHRpb247CiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24p
CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1
ZSgpOwogICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbiwgcmV0dXJuVmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgc2NyaXB0QnVmZmVy
LmNsZWFyKCk7Ci0gICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpAQCAt
MjIxNSw2ICsyMjQ4LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0
KgogCiBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIGludGVycHJldGVyTmFtZShB
U0NJSUxpdGVyYWwoIkludGVycHJldGVyIikpOwogICAgIAogICAgIGJvb2wgc2hvdWxkUXVpdCA9
IGZhbHNlOwpAQCAtMjI2NSw3ICsyMzAxLDcgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUo
R2xvYmFsT2JqZWN0KgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBy
ZXR1cm5WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCktPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKICAgICB9CiAgICAgcHJpbnRmKCJcbiIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAkocmV2aXNpb24gMjA1MzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMSArMzgsMTMgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25TdGF0dXMgewogCiBpbmxp
bmUgRXhjZXB0aW9uU3RhdHVzIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZikKIHsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
c2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvblJlZikKICAg
ICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+
dmFsdWUoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMjYsMTIgKzIxMjYsMTkgQEAKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8q
IERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29w
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMy
QTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZN
RW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQg
LyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2
ZW50TG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM2MUQ3OEYw
MTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNl
cHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwICovOyB9
OworCQlGRTY0OTEzQjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNBMUQ3OEY0NjEw
MEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTNEMUQ3OEZDMkYwMEE2OTRENCAvKiBFeGNlcHRp
b25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuY3BwICovOyB9Owog
CQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNjFCOTBE
REQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2OEM2MzgxQjkwREUwQjAwNDJCQ0Iz
IC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLzsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0IC8qIEhl
YXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLzsgfTsK
IAkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFN0M0MTk2MUI5N0ZDNEIwMEY0RDU5OCAvKiBQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3dUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmNwcCAqLzsgfTsKKwkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2
MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENh
dGNoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8qIENhdGNoU2NvcGUuY3BwICovOyB9OworCQlG
RTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5QTFENzc2
OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgKi87IH07CiAJCUZFOTlC
MjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAv
KiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkU5OUIyNEExQzI0QzNENzAwQzgyMTU5IC8q
IEpJVE5lZ0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNw
cCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdB
MDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0MzEsMTEgKzQ0MzgsMTggQEAKIAkJRkU1MDY4NjYxQUUy
NUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3Bl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUND
QyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1F
bnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNjAyOUQ4MUQ2RTFF
MzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGhyb3dTY29wZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzYxRDc4RjAxMzAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2VwdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5MTM4
MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFNjQ5MTNBMUQ3OEY0NjEwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhj
ZXB0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhj
ZXB0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY4QzYzNTFC
OTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFN0JB
NjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0Y2hTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXRjaFNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOUExRDc3NjhGRDAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRTdWJH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU2NzgsNiArNTY5Miw4IEBACiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2Fs
bERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5o
ICovLAorCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLywK
KwkJCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovLAogCQkJCUJD
NkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKIAkJCQkwRkUwNTAxQzFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxRDFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggKi8sCkBAIC01NzQyLDEwICs1NzU4
LDE2IEBACiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmgg
Ki8sCiAJCQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8sCiAJ
CQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8sCisJCQkJRkU2NDkx
M0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8sCisJCQkJRkU4MEMxOUEx
RDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovLAorCQkJCUZF
NjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8sCiAJ
CQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovLAogCQkJ
CTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8sCiAJCQkJMTQy
OUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLAogCQkJCUE3
MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi8sCisJCQkJRkU2
NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAqLywKKwkJCQlGRTY0
OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLywKIAkJCQk4NkNBMDMy
RDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJODZDQUZFRTIxMDM1
RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKIAkJCQlBN0E4QUYyOTE3QURCNUYzMDA1
QUIxNzQgLyogRmxvYXQzMkFycmF5LmggKi8sCkBAIC02MTM3LDcgKzYxNTksNiBAQAogCQkJCTBG
QTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLywKIAkJCQlGRTJF
NkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8sCiAJCQkJRkUzNDIyMTEx
RDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLywKLQkJCQlGRTYwMjlEODFENkUxRTMz
MDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggKi8sCiAJCQkJMEY1NTk4OTcxN0M4NkM1
NjAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggKi8sCiAJCQkJMEYyQjY2RDgxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovLAogCQkJCTBGMkI2NkQ5MTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCkBAIC03Njg2LDcgKzc3
MDcsNyBAQAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QzAxQzExMDQxQTAwMzkwRkREIC8q
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNF
OEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBH
ZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC04MjAyLDYgKzgyMjMsNyBAQAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVG
REUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4
MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBF
QkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUZF
NjQ5MTM3MUQ3OEYwMUQwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIzTGVnYWxpemVNZW1v
cnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcg
LyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04Mjk0LDYgKzgzMTYsNyBA
QAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZhaWxh
YmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0RDQjk3MzEyRTUxOTNGMDA5MTE5NDAgLyog
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEw
QzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0RUM5MEMxODYwRDZDMjAw
OTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCNkQ3
NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTgzMDMsNiArODMyNiw3IEBACiAJCQkJNDUxNTM5QjkxMkRDOTk0
NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3
MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTY0OTEz
QjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI2MkQ4NUI3MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0
ZXJTdGFsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODgyNiw2ICs4ODUwLDcgQEAKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkwRkZBNTQ5NzE2Qjg4
MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEz
OTFENzhGM0FGMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNl
RG91YmxlVG9GbG9hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyOTksNiArOTMyNCw3IEBACiAJ
CQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFC
NiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFODBDMTk5
MUQ3NzVGQkUwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTMzMSw2ICs5MzU3LDcgQEAKIAkJCQkxNEU5RDE3
QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1
MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkU2NDkxM0QxRDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVj
dFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUIxREI3MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTk0MTEsNiArOTQzOCw3IEBACiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZF
MjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRC
Q0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZF
ODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVy
cHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAv
KiBQZXJHbG9iYWxPYmplY3RXcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRC
NzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDEwICsxMDUsMTIgQEAgSlNWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
bCYgaAogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0
KCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmpl
Y3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBtX25hbWUpKTsK
LSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwx
MCArMTIyLDEzIEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhFeGVjU3RhdGUqIHMKIAog
U3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25z
dAogeworICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyByZXN1bHQgPSBtX3ZhbHVlLmdl
dCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpOwogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFzIHBhcnQgb2YgaW52
b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KLSAgICBpZiAoc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIzLDYgKzYyMyw5IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYK
IAogdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
KyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNjYyLDcgKzY2NSw3IEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICB7CiAgICAgICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlz
LCBkaWRIaXRCcmVha3BvaW50ID8gUGF1c2VkRm9yQnJlYWtwb2ludCA6IG1fcmVhc29uRm9yUGF1
c2UpOwogICAgICAgICBoYW5kbGVQYXVzZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBtX3JlYXNvbkZv
clBhdXNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0K
IAogICAgIG1fcGF1c2luZ0JyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDkgQEAg
SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgIGlmICghY2FsbEZy
YW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAo
aXNUYWlsRGVsZXRlZCgpKQpAQCAtMjI4LDcgKzIzMCw2IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
CiAgICAgRGVidWdnZXJFdmFsRW5hYmxlciBldmFsRW5hYmxlcihjYWxsRnJhbWUpOwotICAgIFZN
JiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4
dFR5cGU7CiAgICAgCkBAIC0yNDMsOSArMjQ0LDkgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFt
ZTo6ZXZhbHVhdGVXaXRoUwogICAgIEpTU2NvcGU6OmNvbGxlY3RWYXJpYWJsZXNVbmRlclREWihz
Y29wZSgpLT5qc1Njb3BlKCksIHZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIEV2YWxFeGVjdXRh
YmxlKiBldmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uo
c2NyaXB0KSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5pc0Fycm93RnVuY3Rpb24oKSwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5k
ZXJURFopOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24gPSB2
bS5leGNlcHRpb24oKTsKLSAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gY2F0
Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTI1Nyw5ICsyNTgs
OSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHRoaXMtPnRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3Bl
KCktPmpzU2NvcGUoKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBleGNlcHRp
b24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgfQogCiAgICAgaWYgKHNjb3BlRXh0ZW5zaW9uT2JqZWN0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTQgKzExMiwxNSBAQCBleHRlcm4g
IkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYg
KGV4ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKworICAg
IGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5j
YWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwotCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhh
dCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAog
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgpAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpCiAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgQVNTRVJUKCEhdm0tPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgICAgIAogICAgIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVj
LCBleGl0Lm1fY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcg
QEAgdGVtcGxhdGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0PgogQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTExOSw3ICsx
MjAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gCiAKICAgICAv
LyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24u
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBzdHJpY3QpOwpAQCAtMTc5LDExICsxODAsMTIgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVRoaQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoY29uc3RydWN0b3ItPnR5cGUoKSA9PSBK
U0Z1bmN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5yYXJlRGF0YShleGVjLCBpbmxpbmVD
YXBhY2l0eSktPm9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpKTsKIAogICAg
IEpTVmFsdWUgcHJvdG8gPSBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
cHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIGFzT2JqZWN0KHByb3RvKSk7CkBAIC0yMDcsMTIgKzIwOSwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IG9wMi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYSAmIGIpKTsKQEAgLTIyMiwxMiArMjI1LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIHwgYikpOwpAQCAtMjM3LDEyICsyNDEsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgXiBiKSk7CkBAIC0yNTIsMTIgKzI1NywxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3Ay
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIDw8IChiICYgMHgxZikpKTsKQEAg
LTI2NywxMiArMjczLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBp
bnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50
b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgPj4g
KGIgJiAweDFmKSkpOwpAQCAtMjgyLDEyICsyODksMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKIAogICAgIHVpbnQzMl90IGEgPSBvcDEudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMHgxZikpKSk7CkBA
IC0zMTMsMTIgKzMyMSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
OwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAg
ZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAvIGIp
KTsKQEAgLTMyOCwxMCArMzM3LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoQWJzKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBmYWJzKGEpOwogfQpAQCAtMzQwLDEwICszNTAsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhDb3MoRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgcmV0dXJuIGNvcyhhKTsKIH0KQEAgLTM1MiwxMCArMzYzLDExIEBAIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRlJvdW4KIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYSk7CiB9CkBAIC0zNjQs
MTAgKzM3NiwxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aExvZyhFCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gbG9nKGEpOwog
fQpAQCAtMzc2LDEwICszODksMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhTaW4oRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJu
IHNpbihhKTsKIH0KQEAgLTM4OCwxMCArNDAyLDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyaXRoU3FydCgKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIHJldHVybiBzcXJ0KGEpOwogfQpAQCAtNDE3LDcgKzQzMiw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwogCkBAIC00NDMsMTAgKzQ1OSwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgfQogCiAg
ICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KQEAgLTQ1NSw3ICs0
NzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVy
dHkpOwogCiAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpCkBAIC00NzYsNyArNDkzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwog
fQpAQCAtODQ1LDYgKzg2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRU
aGlzKTsKQEAgLTg3MCwxMSArODg4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJs
ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LCBzbG90KSk7
CiB9CkBAIC04OTksOSArOTE3LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBwdXRXaXRoVGhpczx0cnVlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRo
aXMsIGVuY29kZWRWYWx1ZSwgcHJvcGVydHkpOwogfQpAQCAtOTEwLDkgKzkyOSwxMCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5
S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgcHV0V2l0aFRoaXM8ZmFsc2U+
KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7
CiB9CkBAIC0xNDI0LDkgKzE0NDQsOSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyQ2F0MihFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNTdHJpbmcqIHN0cjEgPSBKU1ZhbHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3Qg
aGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgp
LCBzdHIyLT5sZW5ndGgoKSkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKTsKQEAgLTE0NDMsMTEgKzE0NjMsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN0ckNhdDMoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4
ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3
ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBwcmltaXRpdmVzLgorICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBw
cmltaXRpdmVzLgogICAgIEpTU3RyaW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIEpTU3RyaW5nKiBzdHIzID0gSlNWYWx1ZTo6ZGVjb2RlKGMp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90Pihz
dHIxLT5sZW5ndGgoKSwgc3RyMi0+bGVuZ3RoKCksIHN0cjMtPmxlbmd0aCgpKSkgewogICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTcsNiArNzk3LDcgQEAgdm9p
ZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdAogdm9pZCBIZWFwOjp2aXNpdEV4
Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR0NQSEFTRShNYXJraW5n
RXhjZXB0aW9uKTsKKwogICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShy
ZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsOSBAQCBT
dHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjCiAKIEpTQzo6SlNPYmplY3Qq
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
c291cmNlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBKU0M6OkpTT2JqZWN0
KiBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoaWQp
KTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlv
blZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7Ci0gICAg
c2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICByZXR1cm4gcmVzdWx0LmdldE9iamVjdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsOCBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBFcnJvckhhbmRs
aW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKHZtKTsKIAogICAgIFJlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVU
b0NhcHR1cmUpOwogICAgIGlmIChpbmNsdWRlc05hdGl2ZUNhbGxTdGFja1doZW5SZXBvcnRpbmdF
eGNlcHRpb25zKCkpCkBAIC0yMjgsOCArMjI5LDEyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNw
ZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8x
MTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5k
bGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2Jq
ZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIHsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KIAogICAgIGlmIChKU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7CiAgICAgICAg
IGlmIChjYWxsU3RhY2stPnNpemUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9u
IDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNj
cmlwdEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaQogICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1
YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikp
OwogCiAgICAgU3RyaW5nIHByb2dyYW0gPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkBAIC0yNTksMTIgKzI1OSwxMyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogCiAgICAgaWYgKEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNQcm9taXNlKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIHN3aXRjaCAocHJvbWlzZS0+c3RhdHVzKGV4ZWMtPnZtKCkpKSB7
CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OlBlbmRpbmc6CkBAIC0yODYsNyArMjg3
LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChK
U0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTQm91bmRGdW5j
dGlvbio+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJu
YWxQcm9wZXJ0eShleGVjLCAidGFyZ2V0RnVuY3Rpb24iLCBib3VuZEZ1bmN0aW9uLT50YXJnZXRG
dW5jdGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJib3VuZFRoaXMiLCBib3VuZEZ1bmN0
aW9uLT5ib3VuZFRoaXMoKSkpOwpAQCAtMjk4LDcgKzI5OSw3IEBAIEpTVmFsdWUgSlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNE
eW5hbWljQ2FzdDxQcm94eU9iamVjdCo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoInRhcmdl
dCIpLCBwcm94eS0+dGFyZ2V0KCkpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFs
KCJoYW5kbGVyIiksIHByb3h5LT5oYW5kbGVyKCkpKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAKICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImFycmF5IiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImtpbmQiLCBraW5kKSk7CkBAIC0zMzUsNyArMzM2LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAiLCBtYXBJdGVyYXRvci0+
aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNTcsNyArMzU4LDcgQEAgSlNWYWx1ZSBKU0lu
amVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzZXQiLCBzZXRJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNjcsNyArMzY4LDcgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChKU1N0cmluZ0l0ZXJh
dG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KHZh
bHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAic3RyaW5nIiwgc3RyaW5nSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoZXhlYykp
KTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMzc2LDcgKzM3Nyw3IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgIm9iamVjdCIsIHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5p
dGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtNDA0LDYgKzQwNSw3
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0ganNEeW5h
bWljQ2FzdDxKU1dlYWtNYXAqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFrTWFwKQpAQCAtNDE4LDcg
KzQyMCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAgICAg
ICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7CiAK
ICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3Ig
KGF1dG8gaXQgPSB3ZWFrTWFwLT53ZWFrTWFwRGF0YSgpLT5iZWdpbigpOyBpdCAhPSB3ZWFrTWFw
LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBKU09iamVjdCogZW50cnkg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWFrU2V0Kj4odmFsdWUpOwogICAgIGlmICghd2Vha1NldCkKQEAgLTQ2NSw3ICs0NjgsNyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChhdXRvIGl0ID0g
d2Vha1NldC0+d2Vha01hcERhdGEoKS0+YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+d2Vha01hcERh
dGEoKS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7CkBAIC00OTUsNiArNDk4LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgaXRlcmF0b3I7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmIChKU01hcEl0ZXJhdG9yKiBtYXBJdGVy
YXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KHZhbHVlKSkKQEAgLTUwNSw3ICs1
MDksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IGl0ZXJhdG9yID0gc3RyaW5nSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwogICAgIGVsc2UgaWYgKEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yID0ganNEeW5hbWljQ2Fz
dDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIGl0ZXJhdG9yID0g
cHJvcGVydHlOYW1lSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoSlNPYmplY3QqIGl0ZXJhdG9yT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZh
bHVlKSkgewpAQCAtNTI1LDE4ICs1MjksMTggQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6aXRlcmF0b3JFbgogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlclRvRmV0Y2g7
ICsraSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0
b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTVmFs
dWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFs
dWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZVcKICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3Ry
aW5nLiIpKTsKIAogICAgIFN0cmluZyBzY3JpcHQgPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2
ICsxMTksOSBAQCBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhCiAKIHN0
YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb21FeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QsIGludCogbGluZU51bWJlciwg
aW50KiBjb2x1bW5OdW1iZXIsIFN0cmluZyogc291cmNlVVJMKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3Rvcjog
U2hvdWxkIG5vdCBuZWVkIHRvIGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9u
cwogICAgIEpTVmFsdWUgbGluZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKICAgICAqbGlu
ZU51bWJlciA9IGxpbmVWYWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKSA/IGludChsaW5lVmFs
dWUudG9OdW1iZXIoZXhlYykpIDogMDsKQEAgLTEyNiw3ICsxMjksNyBAQCBzdGF0aWMgdm9pZCBl
eHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgKmNvbHVtbk51bWJlciA9IGNvbHVtblZh
bHVlICYmIGNvbHVtblZhbHVlLmlzTnVtYmVyKCkgPyBpbnQoY29sdW1uVmFsdWUudG9OdW1iZXIo
ZXhlYykpIDogMDsKICAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVlID0gZXhjZXB0aW9uT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic291
cmNlVVJMIikpOwogICAgICpzb3VyY2VVUkwgPSBzb3VyY2VVUkxWYWx1ZSAmJiBzb3VyY2VVUkxW
YWx1ZS5pc1N0cmluZygpID8gc291cmNlVVJMVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpIDogQVNDSUlMaXRlcmFsKCJ1bmRlZmluZWQiKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIFJlZjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJKHJl
dmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNo
ZWRDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgbV9jbG9zdXJlID0gbV9pbnRlcnByZXRlci0+cHJlcGFyZUZvclJl
cGVhdENhbGwoZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUsICZtX3Byb3RvQ2Fs
bEZyYW1lLCBmdW5jdGlvbiwgYXJndW1lbnRDb3VudCArIDEsIGZ1bmN0aW9uLT5zY29wZSgpLCBt
X2FyZ3VtZW50cy5kYXRhKCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgICAgICAgICBt
X3ZhbGlkID0gIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBtX3ZhbGlk
ID0gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU1Zh
bHVlIGNhbGwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTQgKzExNiw2IEBA
IG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gcG9pbnRlciwgc28gdGhlc2UgYXJlIGluZWZm
aWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGluIG5ldyBjb2RlLgogICAgICAg
ICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0
aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKLSAgICAgICAgdm9pZCBjbGVh
ckV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckV4Y2VwdGlvbigpOyB9Ci0KLSAgICAgICAgRXhjZXB0
aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9Ci0gICAg
ICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigp
OyB9Ci0KLSAgICAgICAgRXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
dm0oKS5sYXN0RXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24o
KSB7IHZtKCkuY2xlYXJMYXN0RXhjZXB0aW9uKCk7IH0KLQogICAgICAgICBBdG9taWNTdHJpbmdU
YWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CiAgICAgICAgIGNvbnN0
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqdm0oKS5l
bXB0eUxpc3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIFN0cmluZyBwcm9ncmFtU291cmNlID0g
YXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpAQCAtMTg0LDcgKzE4NCw3IEBAIEpTVmFsdWUg
ZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwgaXQgc2hvdWxkIG5vdCBoYXZlIHRocm93
biBleGNlcHRpb25zLgotICAgICAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2ss
IGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZh
bENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBwcm9ncmFtU291cmNlLCBjYWxs
ZXJTY29wZUNoYWluKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIGxlbmd0aCA9IGdldExlbmd0aChjYWxs
RnJhbWUsIGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTY2NiwxMyArNjY2LDE1IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKKyAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIFN1c3BlbmRF
eGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgU3VzcGVuZEV4
Y2VwdGlvblNjb3BlIHNjb3BlKCZ2bSk7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1
cm5FdmVudChjYWxsRnJhbWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWJ1Z2dlci0+
ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lKTsKLSAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3BlLCAhdGhy
b3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogfQogCkBAIC03NjAsNiArNzYyLDggQEAgcHJp
dmF0ZToKIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZN
JiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgVW53aW5k
U3RhcnQgdW53aW5kU3RhcnQpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2luZEZyb21DYWxsZXJGcmFtZSkg
ewogICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0g
dm0udG9wVk1FbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03Nzgs
NyArNzgyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAg
IGlmIChleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkgfHwgKGV4Y2VwdGlvblZhbHVlLmlzQ2VsbCgp
ICYmICFleGNlcHRpb25WYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
anNOdWxsKCk7CiAKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkgJiYgdm0uZXhjZXB0aW9uKCkt
PnN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNlcHRp
b24oKSAmJiBzY29wZS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFz
IG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7CkBAIC05Nzcs
NyArOTgxLDcgQEAgZmFpbGVkSlNPTlA6CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAg
IEpTVmFsdWUgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLT5leGVjdXRlKCZ2
bSwgJnByb3RvQ2FsbEZyYW1lKTsKLQorICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwpAQCAtMTA0OSw3ICsxMDUzLDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KAogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICAvLyBXZSB0aHJvdyBpbiB0
aGlzIGNhc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIHJldHVybiBzb21ldGhpbmcgInZhbGlkIiBidXQg
d2UncmUKICAgICAvLyBhbHJlYWR5IGluIGFuIGludmFsaWQgc3RhdGUuCkBAIC0xMTAwLDEyICsx
MTA0LDEyIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRv
TmF0aXZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKIAotICAgICAgICAgICAgaWYgKCFjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKExJS0VMWSghdGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzT2Jq
ZWN0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBBU1NFUlQocmVzdWx0LmlzT2JqZWN0KCkpOwogICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKGFzT2JqZWN0KHJlc3VsdCkpOwpAQCAtMTExNSw3ICsxMTE5LDcgQEAgQ2Fs
bEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogewogICAgIFZNJiB2bSA9ICpz
Y29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIAogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAg
ICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKQEAgLTExNjQsNyArMTE2OCw3IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVChzY29wZS0+dm0oKSA9PSAm
Y2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKQEAgLTEyNzAsNyArMTI3NCw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoTW9kdWxlUHJvZ3IKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVChzY29wZS0+
dm0oKSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXND
b2xsZWN0b3JCdXN5KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKQEAgLTEzMTEs
MTIgKzEzMTUsMTQgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShNb2R1bGVQcm9ncgog
CiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIERlYnVnSG9va0lEIGRlYnVnSG9va0lEKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCk7CiAgICAgaWYgKCFkZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmhhc0RlYnVnZ2VyUmVxdWVzdHMoKSk7Ci0gICAgQVNT
RVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewogICAg
ICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgpAQCAtMTMzOCw3ICsxMzQ0LDcgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogICAgICAgICAgICAgZGVidWdnZXIt
PmRpZFJlYWNoQnJlYWtwb2ludChjYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci19ICAgIAorICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShy
ZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE0IEBACiAjZGVmaW5lIElu
dGVycHJldGVyX2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU291cmNlUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgIlRocm93U2Nv
cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIApAQCAtMTA1LDggKzEwNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUoVk0qIHZtKQogICAgICAgICAgICAgOiBtX3ZtKHZtKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBvbGRFeGNlcHRpb24gPSB2bS0+ZXhjZXB0aW9uKCk7Ci0g
ICAgICAgICAgICB2bS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKCp2bSk7CisgICAgICAgICAgICBvbGRFeGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIH0KICAgICAgICAgflN1c3BlbmRFeGNlcHRpb25TY29wZSgpCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDggKzQzNiw5
IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6ZHVtcChQcmludFN0cmVhbSYgb3UKIEpTQXJyYXkqIFNo
YWRvd0NoaWNrZW46OmZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGl0ZXJhdGUo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDIwNTMy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDcgQEAgdm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29u
c3QgVAogCiBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSog
cHJvdG9DYWxsRnJhbWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKICAgICB2b2lkKiBlbnRyeUFkZHJlc3M7CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihwcm90b0NhbGxGcmFtZS0+Y2FsbGVlKCkpOwog
CkBAIC03OCw3ICs3OSw3IEBAIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0ZShWTSogdm0sIFByb3Rv
Q2EKICAgICB9IGVsc2UKICAgICAgICAgZW50cnlBZGRyZXNzID0gYWRkcmVzc0ZvckNhbGwoTXVz
dENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvSmF2YVNjcmlwdChlbnRyeUFkZHJlc3MsIHZtLCBwcm90
b0NhbGxGcmFtZSkpOwotICAgIHJldHVybiB2bS0+ZXhjZXB0aW9uKCkgPyBqc051bGwoKSA6IHJl
c3VsdDsKKyAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsK
IH0KIAogREZHOjpDb21tb25EYXRhKiBKSVRDb2RlOjpkZmdDb21tb24oKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIGdlbmVyaWNV
bndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3Rh
cnQpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKICAgICBp
ZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrKQpAQCAt
NTgsNyArNTksNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhCiAg
ICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93Q2hpY2tlblRvcEZy
YW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogICAgIAotICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0tPmV4Y2VwdGlvbigpOworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9u
KTsKICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5kKCp2
bSwgY2FsbEZyYW1lLCBleGNlcHRpb24sIHVud2luZFN0YXJ0KTsgLy8gVGhpcyBtYXkgdXBkYXRl
IGNhbGxGcmFtZS4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogICAgIExPR19JQygoSUNFdmVu
dDo6T3BlcmF0aW9uSW5PcHRpbWl6ZSwgYmFzZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
Okhhc1Byb3BlcnR5KTsKICAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhY2Nl
c3NUeXBlID09IHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKQEAgLTQ5OSw2ICs0OTksNyBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU3RyaW5nT3JTeW1iCiBzdGF0aWMgdm9pZCBwdXRCeVZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNj
cmlwdC5hc1VJbnQzMigpOwpAQCAtNTIwLDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KENhbGxGcmFtZSogY2FsbEZyYW0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Q
cm9wZXJ0eUtleShjYWxsRnJhbWUpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgotICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3lt
Ym9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCkBAIC01
MzIsNiArNTMzLDggQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQog
CiBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKIHsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgaXNTdHJpY3RNb2Rl
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgaWYgKExJS0VM
WShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwg
SlNWYWx1ZTo6aXNVSW50MzIgd2lsbCByZXR1cm4gdHJ1ZSBvbmx5IGZvciBwb3NpdGl2ZSBib3hl
ZCBpbnQzMl90OyBhbGwgdGhvc2UgdmFsdWVzIGFyZSB2YWxpZCBhcnJheSBpbmRpY2VzLgpAQCAt
NTYzLDcgKzU2Niw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2EK
IAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhj
ZXB0aW9uLgogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxs
RnJhbWUpOwotICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKE9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7CkBAIC03ODYs
MTQgKzc4OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogCisgICAgVk0qIHZtID0gJmV4ZWNDYWxsZWUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKwogICAgIGV4
ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKICAgICAKICAgICBpZiAoIWlzSG9zdEZ1bmN0aW9u
KGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVuY0V2YWwpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKLSAgICBWTSogdm0gPSAmZXhlY0Nh
bGxlZS0+dm0oKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoZXhlY0NhbGxlZSk7Ci0gICAg
aWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC04MTcsNyArODIyLDcgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwpAQCAtODQ2LDcgKzg1MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFu
ZGxlSG9zdENhbGwKICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Y0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAodm0t
PmV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKQEAgLTE0NzIsOCArMTQ3NywxMCBAQCBlbnVtIGNsYXNz
IEFjY2Vzc29yVHlwZSB7CiAKIHN0YXRpYyB2b2lkIHB1dEFjY2Vzc29yQnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIGludDMyX3QgYXR0cmli
dXRlLCBKU09iamVjdCogYWNjZXNzb3IsIEFjY2Vzc29yVHlwZSBhY2Nlc3NvclR5cGUpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byBwcm9wZXJ0eUtleSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWNjZXNzb3JU
eXBlID09IEFjY2Vzc29yVHlwZTo6R2V0dGVyKQpAQCAtMTYxOCw4ICsxNjI1LDEwIEBAIHN0YXRp
YyBib29sIGNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2wKIAogc3RhdGljIEpTVmFsdWUgZ2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBz
dWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pOwogICAgICAgICBpZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3Ry
dWN0dXJlKSkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlz
dGluZ0F0b21pY1N0cmluZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNT
dHJpbmcoZXhlYykpIHsKQEAgLTE2NjEsMTAgKzE2NzAsMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgIH0KIAogICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2Jq
ZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJU
KGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwpAQCAtMTg1NSw2ICsxODY0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgCkBAIC0xODcyLDEwICsx
ODgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHJlc3VsdCA9
IGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogICAgIH0KQEAgLTE5MjQsMTAgKzE5MzQs
MTAgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYQogICAgIGlmIChr
ZXkuZ2V0VUludDMyKGluZGV4KSkKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBleGVjLCBpbmRleCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IGtleS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNvdWxkRGVsZXRl
ID0gYmFzZU9iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBleGVj
LCBwcm9wZXJ0eSk7CiAgICAgfQpAQCAtMjEzMiw3ICsyMTQyLDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3Bl
LCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250
ZXh0LCBpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsK
ICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogICAgIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbW1vblNs
b3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNj
b3BlLCBnZXRQdXRJbmZvLCBzbG90LCBpZGVudCk7CkBAIC0yMzgzLDExICsyMzkzLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogQUxXQVlTX0lOTElORSBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZE11bChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJl
cihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJlcihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgKiBiKSk7CkBAIC0yMzk1LDYgKzI0MDYsNyBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByCiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVkTXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgYm9vbCBzaG91bGRPYnNlcnZlTEhTQW5kUkhT
VHlwZXMgPSB0cnVlKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBK
U1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIApAQCAtMjQwMiwxMCAr
MjQxNCwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9mCiAgICAg
ICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhvcDEsIG9wMik7CiAKICAgICBkb3Vi
bGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJl
cihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsK
QEAgLTI0ODAsMTEgKzI0OTIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
U3ViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAt
IGIpKTsKQEAgLTI0OTIsNiArMjUwNSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDk5LDEwICsyNTEzLDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAtIGIpOwpAQCAtMjU5MiwxMyArMjYwNiwxNCBAQCBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tJZkV4CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoISF2bS5leGNlcHRpb24oKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkpOwogCi0gICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bS5leGNlcHRp
b24oKSkpIHsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CiAgICAgICAg
IHJldHVybiAxOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIDA7CiB9CiAKIH0gLy8gZXh0ZXJuICJDIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KEV4ZWNTdGF0
ZSogZXgKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJ
TkcKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNl
cHRpb24gIiwgdm0tPmV4Y2VwdGlvbigpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgZGF0YUxvZygiVGhyb3dp
bmcgZXhjZXB0aW9uICIsIHNjb3BlLmV4Y2VwdGlvbigpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIp
OwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVjdGlvbnMoKTsKIH0K
QEAgLTU1LDcgKzU2LDggQEAgdm9pZCogY2FsbFRvVGhyb3coRXhlY1N0YXRlKiBleGVjKQogICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2
bS0+ZXhjZXB0aW9uKCksICIgKGNhbGxUb1Rocm93KS5cbiIpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9u
ICIsIHNjb3BlLmV4Y2VwdGlvbigpLCAiIChjYWxsVG9UaHJvdykuXG4iKTsKICNlbmRpZgogICAg
IHJldHVybiBMTEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9s
aW5lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDcgKzg4Miw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKIAogICAgIC8vIERvbid0
IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIGF1
dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgTExJTlRfRU5EKCk7CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNiBAQCBjb25z
dCBCeXRlY29kZSYgQnl0ZWNvZGVTZXF1ZW5jZTo6Zm9yQnl0CiB2b2lkIEJ5dGVjb2RlU2VxdWVu
Y2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogaGVhZGVyID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFkZXIuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOChtX2hlYWRlcltpXSkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmhlYWRlciwgaGVhZGVyKTsKICAgICAKICAgICBKU0FycmF5KiBzZXF1
ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2VxdWVuY2Uuc2l6
ZSgpOyArK2kpCiAgICAgICAgIHNlcXVlbmNlLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Nl
cXVlbmNlW2ldLnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjA1MzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjggKzExNSwyOSBAQCB2b2lkIENvbXBpbGF0aW9u
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25L
aW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkp
OwogICAgIAogICAgIEpTQXJyYXkqIHByb2ZpbGVkQnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNvZGVzLnNp
emUoKTsgKytpKQogICAgICAgICBwcm9maWxlZEJ5dGVjb2Rlcy0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwgbV9wcm9maWxlZEJ5dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb2ZpbGVkQnl0ZWNvZGVzLCBwcm9m
aWxlZEJ5dGVjb2Rlcyk7CiAgICAgCiAgICAgSlNBcnJheSogZGVzY3JpcHRpb25zID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9u
cy5zaXplKCk7ICsraSkKICAgICAgICAgZGVzY3JpcHRpb25zLT5wdXREaXJlY3RJbmRleChleGVj
LCBpLCBtX2Rlc2NyaXB0aW9uc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsK
ICAgICAKICAgICBKU0FycmF5KiBjb3VudGVycyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
MCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBm
b3IgKGF1dG8gaXQgPSBtX2NvdW50ZXJzLmJlZ2luKCksIGVuZCA9IG1fY291bnRlcnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogY291bnRlckVudHJ5ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkBAIC0xNDcsMTQgKzE0OCwxNCBAQCBKU1ZhbHVlIENv
bXBpbGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb3VudGVycywgY291bnRlcnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV4aXRTaXRlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9vc3JFeGl0U2l0ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXRTaXRl
cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9vc3JFeGl0U2l0ZXNbaV0udG9KUyhleGVjKSk7
CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0
U2l0ZXMsIGV4aXRTaXRlcyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdHMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3NyRXhpdHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIGV4aXRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRz
W2ldLnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsMjQgKzEwMCwyNSBAQCB2b2lkIERhdGFiYXNlOjphZGRDb21waWxhdGlvbihD
b2RlQmxvY2sqCiBKU1ZhbHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7CiAgICAgCiAgICAgSlNBcnJheSogYnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5dGVjb2Rlcy5zaXplKCk7ICsr
aSkKICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2J5dGVjb2Rl
c1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5KiBjb21w
aWxhdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY29tcGlsYXRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBjb21waWxhdGlvbnMtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fY29tcGlsYXRpb25zW2ldLT50b0pTKGV4ZWMpKTsKICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBpbGF0aW9u
cywgY29tcGlsYXRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBldmVudHMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXZlbnRzLnNpemUoKTsg
KytpKQogICAgICAgICBldmVudHMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZXZlbnRzW2ld
LnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw4ICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJv
ZmlsZXIgewogSlNWYWx1ZSBPU1JFeGl0U2l0ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVBZGRyZXNzZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhl
YywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0pKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0
YWNrLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAx
LDkgQEAgdm9pZCBPcmlnaW5TdGFjazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogSlNWYWx1ZSBP
cmlnaW5TdGFjazo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0YWNrLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDkgQEAgZW51bSBjbGFzcyBTcGVjaWVz
Q29uc3RydWN0UmVzdWx0IHsKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNp
ZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc0NvbnN0cnVjdEFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKExJS0VMWShpc0FycmF5KGV4ZWMsIHRoaXNPYmplY3Qp
KSkgewpAQCAtMjA1LDcgKzIwOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxT
cGVjaWVzQ28KICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3Ry
dWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAKICAgICAgICAgY29uc3RydWN0b3IgPSB0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNw
ZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAgICAgICAgIGlmIChj
b25zdHJ1Y3Rvci5pc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBjb25z
dHJ1Y3Rvck9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNvbnN0cnVjdG9yKTsKQEAgLTIxNCwx
MiArMjE3LDEyIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVzQ28KICAg
ICAgICAgfQogICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNPYmplY3QoKSkgewogICAgICAgICAg
ICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnNwZWNpZXNTeW1ib2wpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhj
ZXB0aW9uLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc051bGwoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RmFzdFBhdGgsIG51bGxwdHIpOzsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVz
dWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZp
bmVkKCkpCkBAIC0yMjgsNyArMjMxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWly
PFNwZWNpZXNDbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBl
bmQoanNOdW1iZXIobGVuZ3RoKSk7CiAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IGNvbnN0cnVj
dChleGVjLCBjb25zdHJ1Y3RvciwgYXJncywgIlNwZWNpZXMgY29uc3RydWN0aW9uIGRpZCBub3Qg
Z2V0IGEgdmFsaWQgY29uc3RydWN0b3IiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0
ZWRPYmplY3QsIG5ld09iamVjdCk7CiB9CkBAIC0yODQsMTAgKzI4NywxMCBAQCB2b2lkIHNoaWZ0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoCiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBr
ICsgY3VycmVudENvdW50OwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudDsK
ICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBm
cm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pKSB7CiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5LiIpKTsKQEAgLTMzMCwzMSArMzMzLDMyIEBAIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiAKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291
bnQgLSAxOwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CiAgICAg
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkp
IHsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRy
dWUpOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJv
cGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICAvLyAxLiBMZXQgYXJyYXkgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVlLgogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIAogICAgIC8vIDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVu
dCAiam9pbiIuCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5qb2luKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBJ
ZiBJc0NhbGxhYmxlKGZ1bmMpIGlzIGZhbHNlLCB0aGVuIGxldCBmdW5jIGJlIHRoZSBzdGFuZGFy
ZCBidWlsdC1pbiBtZXRob2QgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoMTUuMi40LjIpLgpA
QCAtMzgzLDE4ICszODcsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwog
CiAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHRoaXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAg
ICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChl
eGVjLCBpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgam9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIApAQCAtNDAzLDE0ICs0MDcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
OwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iamVjdCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVj
dCk7CkBAIC00MTgsNTIgKzQyNCw1MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1
ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVuZ3Ro
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogI2lmIEVOQUJMRShJTlRMKQogICAgIEFyZ0xpc3QgYXJndW1lbnRzKGV4ZWMpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAg
IGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAg
ICAgIGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBlbGVtZW50LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFw
cGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogI2Vsc2UgLy8gIUVO
QUJMRShJTlRMKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5jdGlv
biA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmlu
Zyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAg
ICAgIGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxl
bWVudCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogI2VuZGlmIC8vICFFTkFCTEUoSU5UTCkKQEAg
LTQ5OCwxNSArNTA0LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBob2xlc011c3RGb3J3YXJkVG9Q
cm8KIAogc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNTdHJpbmcqIHNlcGFyYXRvciwgdWludDY0X3QgbGVuZ3RoKQogeworICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyA1LiBJZiBsZW4gaXMgemVybywgcmV0dXJuIHRoZSBlbXB0eSBTdHJp
bmcuCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVj
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKLQogICAgIC8vIDYuIExldCBlbGVtZW50MCBi
ZSBHZXQoTywgIjAiKS4KICAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJmV4ZWMsIDApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgLy8g
Ny4gSWYgZWxlbWVudDAgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGxldCBSIGJlIHRoZSBlbXB0eSBT
dHJpbmc7IG90aGVyd2lzZSwgbGV0IFIgYmUgPyBUb1N0cmluZyhlbGVtZW50MCkuCkBAIC01MTUs
NyArNTIyLDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAg
ICAgICByID0ganNFbXB0eVN0cmluZygmZXhlYyk7CiAgICAgZWxzZQogICAgICAgICByID0gZWxl
bWVudDAudG9TdHJpbmcoJmV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
CiAgICAgLy8gOC4gTGV0IGsgYmUgMS4KQEAgLTUyNCw3ICs1MzEsNyBAQCBzdGF0aWMgSlNWYWx1
ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgZm9yICh1aW50NjRfdCBrID0gMTsgayA8
IGxlbmd0aDsgKytrKSB7CiAgICAgICAgIC8vIGIuIExldCBlbGVtZW50IGJlID8gR2V0KE8sICEg
VG9TdHJpbmcoaykpLgogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsIEF0b21pY1N0cmluZzo6bnVtYmVy
KGspKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAg
ICAgICAgLy8gYy4gSWYgZWxlbWVudCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IG5leHQgYmUg
dGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgbmV4dCBiZSA/IFRvU3RyaW5nKGVsZW1l
bnQpLgpAQCAtNTM1LDcgKzU0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0
ZSYgZXhlYywKICAgICAgICAgICAgIG5leHQgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBuZXh0ID0gZWxlbWVudC50b1N0cmluZygmZXhlYyk7Ci0g
ICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAgICAgLy8g
YS4gTGV0IFMgYmUgdGhlIFN0cmluZyB2YWx1ZSBwcm9kdWNlZCBieSBjb25jYXRlbmF0aW5nIFIg
YW5kIHNlcC4KQEAgLTU2MSw2ICs1NjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuVXNlRmFz
dEpvaW4oY29uc3QgCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUm
IHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwgU3RyaW5nVmlldyBzZXBhcmF0b3IsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CkBAIC01NjgsNyArNTc4LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVu
Z3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAgICAgIGJv
b2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAtNTkyLDcgKzYwMiw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgaWYgKGxlbmd0aCA+IGJ1
dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBKU1N0
cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGF1dG8g
ZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwogICAgICAgICBib29s
IGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKQEAgLTYwMiw3ICs2MTIsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgICAgICAgICAgam9pbmVyLmFw
cGVuZChzdGF0ZSwganNEb3VibGVOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlKHN0YXRlLnZtKCkpLT5ob2xlc011c3RGb3J3
YXJkVG9Qcm90b3R5cGUoc3RhdGUudm0oKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKICAgICAgICAgICAgICAg
ICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE1
LDE0ICs2MjUsMTQgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQog
CiBnZW5lcmFsQ2FzZToKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRv
ciwgbGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBqb2lu
ZXIuYXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIHJldHVybiBqb2luZXIuam9pbihz
dGF0ZSk7CkBAIC02MzAsNiArNjQwLDkgQEAgZ2VuZXJhbENhc2U6CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDEuIExldCBPIGJlID8gVG9PYmplY3QodGhpcyB2YWx1ZSkuCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCF0aGlzT2JqZWN0KQpAQCAtNjQx
LDcgKzY1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
ICAgIC8vIDIuIExldCBsZW4gYmUgPyBUb0xlbmd0aCg/IEdldChPLCAibGVuZ3RoIikpLgogICAg
IGRvdWJsZSBsZW5ndGggPSB0b0xlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4g
SWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgbGV0IHNlcGFyYXRvciBiZSB0aGUgc2luZ2xlLWVs
ZW1lbnQgU3RyaW5nICIsIi4KQEAgLTY1Myw3ICs2NjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CiAgICAgICAgICAgICBKU1N0cmluZyog
anNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShz
bG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CkBAIC02
NjYsNyArNjc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
CiAgICAgLy8gNC4gTGV0IHNlcCBiZSA/IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNTdHJp
bmcqIGpzU2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIHx8ICFjYW5Vc2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKQEAgLTY5Miw3ICs3MDUsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlz
T2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1
ZSByZXN1bHQ7CkBAIC03MDEsNyArNzE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCBsZW5ndGggLSAxKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggLSAxKSkgewogICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRl
bGV0ZSBwcm9wZXJ0eS4iKSk7CkBAIC03MTQsNiArNzI3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNWYWx1ZSkgJiYgZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDEpIHsKQEAgLTcyNiw3ICs3NDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4
ZWMsIHRoaXNPYmopOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsgbisrKSB7CkBAIC03MzgsNyArNzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8
aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1dURlN0cmluZyhl
eGVjKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwg
ZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkBAIC03NTcsNyArNzcyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5n
VHlwZSgpKSB7CkBAIC03OTgsNDEgKzgxMyw0MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgZm9yICh1bnNpZ25lZCBsb3dlciA9IDA7IGxvd2VyIDwgbWlk
ZGxlOyBsb3dlcisrKSB7CiAgICAgICAgIHVuc2lnbmVkIHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIg
LSAxOwogICAgICAgICBib29sIGxvd2VyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgbG93ZXIpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBKU1ZhbHVlIGxvd2VyVmFsdWU7CiAgICAg
ICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmpl
Y3QtPmdldChleGVjLCBsb3dlcik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCB1cHBlckV4aXN0cyA9IHRoaXNPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIEpTVmFsdWUgdXBw
ZXJWYWx1ZTsKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB1cHBlclZh
bHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgbG93ZXIsIHVwcGVyVmFs
dWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIGxvd2VyKSkgewotICAgICAgICAgICAgaWYgKCF2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4i
KSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUsIHRydWUpOwotICAg
ICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVwcGVyKSkgewot
ICAgICAgICAgICAgaWYgKCF2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTg0Miwx
MSArODU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBp
ZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTg1Niw3ICs4NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhp
c09iai0+Z2V0SW5kZXgoZXhlYywgMCk7CiAgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291
bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEp
KTsKICAgICB9CkBAIC04NjcsMTEgKzg4NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20v
ZG9jcy9tYW51YWxzL2pzL2NsaWVudC9qc3JlZi9hcnJheS5odG0jMTE5MzcxMyBvciAxNS40LjQu
MTAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5z
aWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAs
IGxlbmd0aCk7CkBAIC04OTIsMTQgKzkxMCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwog
ICAgIGVsc2UgewogICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIGVuZCAtIGJlZ2luKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgbiA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywg
bisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIG4sIHYpOwpAQCAtOTE5LDcgKzkzNyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpIHsKQEAgLTkzMiw3ICs5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0
LnNlY29uZDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgfQogCkBAIC05NjcsMTIgKzk4NSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKTsKLSAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIHYsIHRydWUpOwotICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKQEAgLTk4Miw3ICsxMDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgZGVsZXRlQ291bnQ7ICsraykgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbik7Ci0gICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTk0LDE2ICsxMDEyLDE2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB1bnNpZ25lZCBhZGRp
dGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7
CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzIDwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8
SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0
ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fSBlbHNlIGlmIChhZGRpdGlvbmFsQXJncyA+IGRlbGV0ZUNvdW50KSB7CiAgICAgICAgIHVuc2hp
ZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRl
bGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhZGRpdGlvbmFsQXJnczsgKytrKSB7
CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgayArIGJlZ2luLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudChrICsgMiksIHRydWUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICB9CiAKQEAgLTEwMTMsMjQgKzEwMzEsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTUuNC40
LjEzCiAKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhl
eGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBuckFyZ3Mg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewogICAgICAgICB1bnNo
aWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJB
cmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbnJBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGlu
ZShleGVjLCBrLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdz
KTsKQEAgLTEwNDAsMjYgKzEwNjAsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxNS40LjQu
MTQKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAg
ICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xMDY4LDYgKzEwOTAsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyAxNS40LjQuMTUKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmopCkBAIC0xMDg5LDE4ICsxMTE0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZG8g
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFs
dWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0gd2hpbGUgKGluZGV4LS0pOwogCkBAIC0xMTA5LDIzICsxMTMzLDI1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogc3RhdGljIGJvb2wgbW92
ZUVsZW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2ln
bmVkIHRhcmdldE9mZnNldCwgSlNBcnJheSogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgp
CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdlKHNvdXJjZS0+aW5kZXhpbmdUeXBlKCkpICYmICFz
b3VyY2UtPnN0cnVjdHVyZSgpLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKSkgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzb3VyY2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsK
ICAgICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXRQcm9wZXJ0eShleGVjLCBzb3VyY2UsIGkpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAg
ICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCAr
IGksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTUzLDcg
KzExNzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4CiAKICAg
ICBpZiAoIXJlc3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCkpIHsKICAgICAg
ICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJy
YXlTaXplKSkgewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTk3LDEyICsxMjIz
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICBJbmRl
eGluZ1R5cGUgdHlwZSA9IGZpcnN0QXJyYXktPm1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhz
ZWNvbmRBcnJheS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIGlmICh0eXBlID09IE5vbkFycmF5IHx8
ICFmaXJzdEFycmF5LT5jYW5GYXN0Q29weSh2bSwgc2Vjb25kQXJyYXkpIHx8IGZpcnN0QXJyYXlT
aXplICsgc2Vjb25kQXJyYXlTaXplID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBm
aXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoIW1v
dmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFycmF5U2l6
ZSkKICAgICAgICAgICAgIHx8ICFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RB
cnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQodm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEyICs0OCwxNCBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oCiAvLyBFQ01BIDE1LjYuMgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvQm9vbGVhbihleGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9v
bGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGJvb2xlYW5TdHJ1Y3R1cmUpOwotICAgIG9i
ai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBib29sZWFuKTsKKyAgICBCb29sZWFuT2Jq
ZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0sIGJvb2xlYW5TdHJ1Y3R1cmUpOwor
ICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgYm9vbGVhbik7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEwICs0MiwxMiBAQCBK
U1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1CiAKIEpTVmFsdWUgY2FsbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBl
LCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUu
ZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YXRjaFNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeworICAgIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorQ2F0Y2hTY29wZTo6Q2F0Y2hTY29wZShWTSYg
dm0sIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCisgICAgOiBFeGNlcHRpb25TY29w
ZSh2bSwgRXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeSwgbG9jYXRpb24pCit7Cit9CisK
K0NhdGNoU2NvcGU6On5DYXRjaFNjb3BlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1f
dG9wRXhjZXB0aW9uU2NvcGUpOworCisgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJ
c1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9j
YXRpb24pOworICAgIAorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAg
ICAgICAgbG9nRXZlbnRIZWFkZXIoRXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCisgICAgICAg
ICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzV2l0aFN0YWNr
VHJhY2VzKQorICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fdm0uZXhjZXB0aW9uKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhdGNoU2NvcGVfaAorI2RlZmluZSBDYXRjaFNj
b3BlX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvblNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
ICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorY2xh
c3MgQ2F0Y2hTY29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQ2F0Y2hTY29wZShWTSYsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0gZGVsZXRlOworICAgIENhdGNoU2Nv
cGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q2F0
Y2hTY29wZSgpOworCisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpCisgICAgeworICAgICAgICBt
X3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrID0gZmFsc2U7CisgICAgICAgIG1fdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICB9Cit9OworCisjZGVmaW5lIERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm1fXykg
XAorICAgIEpTQzo6Q2F0Y2hTY29wZSgodm1fXyksIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlv
bihfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykpCisKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworY2xhc3MgQ2F0Y2hTY29wZSA6IHB1
YmxpYyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSBDYXRjaFNj
b3BlKFZNJiB2bSkKKyAgICAgICAgOiBFeGNlcHRpb25TY29wZSh2bSkKKyAgICB7IH0KKyAgICBD
YXRjaFNjb3BlKGNvbnN0IENhdGNoU2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBDYXRjaFNjb3BlKENh
dGNoU2NvcGUmJikgPSBkZWZhdWx0OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkgeyBtX3ZtLmNsZWFyRXhjZXB0aW9uKCk7IH0KK307CisKKyNkZWZpbmUgREVDTEFS
RV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSkKKworI2Vu
ZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIENhdGNoU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDUz
MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVm
aW5lIEJFR0lOX05PX1NFVF9QQygpIFwKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYykKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7IFwKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsgXAorICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KQogCiAjaWZuZGVmIE5ERUJVRwogI2RlZmluZSBTRVRfUENfRk9SX1NUVUJTKCkgZG8geyBcCkBA
IC05OSwxMCArMTAxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIENIRUNLX0VYQ0VQ
VElPTigpIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6
aW5nSWZFbmFibGVkKGV4ZWMsICJDb21tb25TbG93UGF0aHMiLCBwYyk7ICAgXAotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKSB7ICAgICAgICAgICBcCi0gICAgICAgICAgICBS
RVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKSB7ICAgXAorICAgICAgICAgICAgUkVUVVJO
X1RPX1RIUk9XKGV4ZWMsIHBjKTsgICAgICAgICAgICBcCiAgICAgICAgICAgICBFTkRfSU1QTCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZp
bmUgRU5EKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0NCw3ICsxNDYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgcGMp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgRXhlY1N0YXRlKiBjY2VF
eGVjID0gKGV4ZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
SW5zdHJ1Y3Rpb24qIGNjZVBDID0gKHBjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIENBTExfRU5E
X0lNUEwoY2NlRXhlYywgTExJbnQ6OmNhbGxUb1Rocm93KGNjZUV4ZWMpKTsgICAgIFwKICAgICB9
IHdoaWxlIChmYWxzZSkKIApAQCAtNDI3LDcgKzQyOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9tdWwpCiAgICAgSlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNW
YWx1ZSByaWdodCA9IE9QX0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSByaWdodC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsKQEAgLTQ0Miw3ICs0NDQsNyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfc3ViKQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwog
ICAgIEpTVmFsdWUgcmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxl
ZnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihK
U1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC00NTcsMTAgKzQ1OSwxMCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZGl2KQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNW
YWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3Vi
bGUgYSA9IGxlZnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAvIGIpOwogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElO
RyhyZXN1bHQsIHsKQEAgLTQ3Miw3ICs0NzQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bW9kKQogewogICAgIEJFR0lOKCk7CiAgICAgZG91YmxlIGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50
b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsK
ICAgICBSRVRVUk4oanNOdW1iZXIoanNNb2QoYSwgYikpKTsKQEAgLTQ4MiwxMCArNDg0LDEwIEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wb3cpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBS
RVRVUk4oSlNWYWx1ZSgpKTsKICAgICBSRVRVUk4oanNOdW1iZXIob3BlcmF0aW9uTWF0aFBvdyhh
LCBiKSkpOwogfQpAQCAtNDk0LDcgKzQ5Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9s
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPDwgKGIgJiAzMSkpKTsKQEAgLTUwNCw3ICs1MDYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcnNoaWZ0KQogewogICAgIEJFR0lOKCk7CiAg
ICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9
IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihh
ID4+IChiICYgMzEpKSk7CkBAIC01MTQsNyArNTE2LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Vyc2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICB1aW50MzJfdCBhID0gT1BfQygyKS5q
c1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJF
VFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b1VJ
bnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+
PiAoYiAmIDMxKSkpKTsKQEAgLTUzMSw3ICs1MzMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfYml0YW5kKQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1Zh
bHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJO
KEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9JbnQzMihl
eGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSAmIGIpKTsKQEAgLTU0MSw3ICs1NDMsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0b3IpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQz
Ml90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBPUF9DKDMp
LmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhIHwgYikpOwpA
QCAtNTUxLDcgKzU1Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXR4b3IpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAg
ICBpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVS
Tihqc051bWJlcihhIF4gYikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw3ICs4Nyw3IEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAg
ICAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIGkpOwogCiAgICAgYXV0byBw
cm9wZXJ0eSA9IHByb3BOYW1lLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHNFeGNlcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHNFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBpbnRlcnByZXRlclRocm93SW5DYWxsZXIo
RXhlY1N0YXRlKgogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGVycm9yKTsKICNp
ZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlv
biAiLCB2bS0+ZXhjZXB0aW9uKCksICIuXG4iKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNl
cHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIuXG4iKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDE2ICs4NywxOSBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4
KEV4ZWNTdGF0ZSogZXhlYywgCiAKIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNl
cHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
d3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUo
KSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAogICAgIENvZGVQcm9maWxpbmcgcHJvZmls
ZShzb3VyY2UpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHByb2dyYW0pOwogICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICByZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPnZtKCkuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xMDUsOSArMTA4LDkgQEAgSlNWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0
PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4
ZWMsIHRoaXNPYmopOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAt
MTQ3LDkgKzE1MCwxMSBAQCBzdGF0aWMgU3ltYm9sKiBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50
CiAKIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQVNTRVJUKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
LT52YWx1ZSgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3Bl
LmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBkZWZlcnJlZC0+cmVqZWN0
KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CkBAIC0x
NzYsMTcgKzE4MSwxOSBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxl
CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCku
YXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdU
YWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwogCi0g
ICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMtPnZt
KCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZSh2
bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0byB0
aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5Lgog
ICAgIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01v
ZHVsZUxvYWRlcjo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0
KTsKIAogICAgIHJldHVybiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFs
T2JqZWN0LCBrZXksIGpzVW5kZWZpbmVkKCksIGluaXRpYXRvcik7CkBAIC0yMTMsMTggKzIyMCwy
MCBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqCiAKIEpTSW50ZXJu
YWxQcm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1ZhbHVlIGluaXRpYXRvcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
d3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUo
KSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAotICAgIFN5bWJvbCoga2V5ID0gY3JlYXRl
U3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZShleGVjLT52bSgpKTsKKyAgICBTeW1ib2wqIGtleSA9
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUodm0pOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsKIAogICAgIC8v
IEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3Ry
eSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KICAgICAvLyBGSVhNRTogSW50cm9kdWNl
IEpTU291cmNlQ29kZSBvYmplY3QgdG8gd3JhcCBhcm91bmQgdGhpcyBzb3VyY2UuCiAgICAgZ2xv
YmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9h
ZGVyOjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAg
ICAgcmV0dXJuIGxvYWRNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXksIGpzVW5k
ZWZpbmVkKCksIGluaXRpYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NiwxMiArMTk2LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVu
Y0Fzc2VydChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVu
dCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7
CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBib29sIGNvbmRpdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9v
bGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChjb25kaXRpb24pCkBAIC0yMjUsNiArMjI3LDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yMzYs
NyArMjQwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY2xpZW50LT5w
cm9maWxlKGV4ZWMsIHRpdGxlKTsKQEAgLTI0NSw2ICsyNDksOCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI1Niw3ICsyNjIsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29u
c3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGVFbmQoZXhl
YywgdGl0bGUpOwpAQCAtMjY1LDYgKzI3MSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjc2LDcgKzI4NCw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBT
dHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGNsaWVudC0+dGFrZUhlYXBTbmFwc2hvdChl
eGVjLCB0aXRsZSk7CkBAIC0yOTIsNiArMzAwLDggQEAgc3RhdGljIFN0cmluZyB2YWx1ZU9yRGVm
YXVsdExhYmVsU3RyaW5nKAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Q29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25z
b2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMDEsNyArMzExLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRsZSA9IEFTQ0lJTGl0ZXJhbCgi
ZGVmYXVsdCIpOwogICAgIGVsc2UgewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFi
ZWxTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
IApAQCAtMzExLDYgKzMyMSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY1RpbWVFbmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVD
bGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVu
dCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtMzIwLDcgKzMzMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgdGl0bGUgPSAgQVNDSUlMaXRlcmFsKCJkZWZhdWx0
Iik7CiAgICAgZWxzZSB7CiAgICAgICAgIHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmlu
ZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBzdGF0
aWMgZG91YmxlIG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzCiBKU09iamVjdCogY29uc3RydWN0
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlu
dCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAKICAgICBkb3VibGUgdmFsdWU7CkBAIC0xNjcsNyAr
MTY4LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4ZWMsIGFyZ3MsIFdURjo6TG9j
YWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1RhcmdldCwgZ2xvYmFsT2JqZWN0
LT5kYXRlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZSh2bSwgZGF0ZVN0cnVjdHVyZSwgdmFs
dWUpOwpAQCAtMjAyLDEwICsyMDMsMTIgQEAgQ2FsbFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRD
YWxsRGF0YShKUwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUoZXhlYy0+dm0oKSwgZGF0ZVN0cikpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZSh2bSwgZGF0ZVN0
cikpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAzLDcgKzYwMyw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2woRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJEYXRlLnByb3RvdHlwZVtTeW1ib2wudG9Qcmlt
aXRpdmVdIGV4cGVjdGVkIHx0aGlzfCB0byBiZSBhbiBvYmplY3QuIik7CkBAIC02MTQsNyArNjE1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgSlNW
YWx1ZSBoaW50VmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHR5cGUgPSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoZXhlYywgaGlu
dFZhbHVlKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgaWYgKHR5cGUgPT0gTm9QcmVmZXJlbmNlKQpAQCAtMTEyMywyMCArMTEy
NCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhp
cyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBvYmplY3Qt
PnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGlmICh0aW1lVmFsdWUuaXNOdW1i
ZXIoKSAmJiAhKHRpbWVWYWx1ZS5pc0ludDMyKCkgfHwgc3RkOjppc2Zpbml0ZSh0aW1lVmFsdWUu
YXNEb3VibGUoKSkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
IAotICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+dG9JU09TdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b0lTT1N0cmluZyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTExNDUsNyArMTE0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKSk7
CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09WYWx1ZSks
IGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGlmIChy
ZXN1bHQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgZGlkIG5vdCByZXR1cm4gYSBwcmltaXRp
dmUgdmFsdWUiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDkgKzUwLDExIEBAIHZvaWQgRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0
aEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDAp
IDoganNVbmRlZmluZWQoKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5l
cnJvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90
aGluZywgZmFsc2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDYgKzE1Nyw3IEBAIHZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1MKIFN0
cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG5hbWVWYWx1ZTsKICAgICBhdXRvIG5hbWVQcm9w
ZXJ0TmFtZSA9IHZtLnByb3BlcnR5TmFtZXMtPm5hbWU7CkBAIC0xNzYsMTQgKzE3NywxNCBAQCBT
dHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAgICAgIH0KICAgICAg
ICAgY3VycmVudE9iaiA9IG9iai0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgfQotICAgIEFT
U0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
CiAgICAgU3RyaW5nIG5hbWVTdHJpbmc7CiAgICAgaWYgKCFuYW1lVmFsdWUpCiAgICAgICAgIG5h
bWVTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5h
bWVTdHJpbmcgPSBuYW1lVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xOTIsMTQg
KzE5MywxNCBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAg
UHJvcGVydHlTbG90IG1lc3NhZ2VTbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpWTUlucXVpcnkpOwogICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXMsIGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0TmFtZSwgbWVzc2FnZVNsb3QpICYmIG1lc3NhZ2VT
bG90LmlzVmFsdWUoKSkKICAgICAgICAgbWVzc2FnZVZhbHVlID0gbWVzc2FnZVNsb3QuZ2V0VmFs
dWUoZXhlYywgbWVzc2FnZVByb3BlcnROYW1lKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIFN0cmluZyBtZXNzYWdl
U3RyaW5nOwogICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICBtZXNzYWdlU3RyaW5nID0g
U3RyaW5nKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJv
clByb3RvRgogCiAgICAgLy8gMy4gTGV0IG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm5hbWUiLgogICAg
IEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICAvLyA0LiBJZiBuYW1lIGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbmFt
ZSBiZSAiRXJyb3IiOyBlbHNlIGxldCBuYW1lIGJlIFRvU3RyaW5nKG5hbWUpLgpAQCAtOTQsMTMg
Kzk0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAg
ICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKTsKICAgICBlbHNlIHsKICAgICAg
ICAgbmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KIAogICAgIC8vIDUuIExldCBtc2cgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm1lc3Nh
Z2UiLgogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAoc2ljKQpAQCAtMTExLDcgKzExMSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAgICAgbWVz
c2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2UgewogICAgICAgICBtZXNzYWdlU3RyaW5n
ID0gbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50LmgiCisKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkV4Y2VwdGlvbkV2ZW50IGV2ZW50KQoreworICAgIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZTsKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50
OjpDYXRjaFNjb3BlRW50cnk6CisgICAgICAgIGV2ZW50TmFtZSA9ICJDYXRjaFNjb3BlIEVudHJ5
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50OjpDYXRjaFNj
b3BlRXhpdDoKKyAgICAgICAgZXZlbnROYW1lID0gIkNhdGNoU2NvcGUgRXhpdCI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6TmVlZEV4Y2VwdGlvbkNoZWNr
OgorICAgICAgICBldmVudE5hbWUgPSAiTmVlZCBleGNlcHRpb24gY2hlY2siOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFbnRyeToKKyAg
ICAgICAgZXZlbnROYW1lID0gIlRocm93U2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFeGl0OgorICAgICAgICBldmVu
dE5hbWUgPSAiVGhyb3dTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6
OkV4Y2VwdGlvbkV2ZW50OjpUaHJvdzoKKyAgICAgICAgZXZlbnROYW1lID0gIlRocm93IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgb3V0LnByaW50KGV2ZW50TmFtZSk7Cit9CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVf
VkVSSUZJQ0FUSU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25FdmVudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisKK25hbWVzcGFj
ZSBKU0MgeworICAgIAorZW51bSBjbGFzcyBFeGNlcHRpb25FdmVudCB7CisgICAgQ2F0Y2hTY29w
ZUVudHJ5LAorICAgIENhdGNoU2NvcGVFeGl0LAorICAgIE5lZWRFeGNlcHRpb25DaGVjaywKKyAg
ICBUaHJvd1Njb3BlRW50cnksCisgICAgVGhyb3dTY29wZUV4aXQsCisgICAgVGhyb3cKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50
U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlv
bkV2ZW50KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKK3sKKyAgICBv
dXQucHJpbnQobG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbG9jYXRpb24uZmlsZSwgIjoi
LCBsb2NhdGlvbi5saW5lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0
aW9uLmgJKHJldmlzaW9uIDIwNTMyNCkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGhyb3dTY29wZUxvY2F0aW9uLmg6MjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBUaHJvd1Njb3BlTG9jYXRp
b24geworICAgIFRocm93U2NvcGVMb2NhdGlvbigpIHsgfQorICAgIFRocm93U2NvcGVMb2NhdGlv
bihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxp
bmUpCisgICAgICAgIDogZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKKyAgICAgICAgLCBmaWxl
KGZpbGUpCisgICAgICAgICwgbGluZShsaW5lKQorICAgIHsgfQorICAgIAorICAgIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiBmaWxlIHsgbnVs
bHB0ciB9OworICAgIHVuc2lnbmVkIGxpbmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25FdmVudExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsOSArMjcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFRocm93U2NvcGVM
b2NhdGlvbiB7Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKCkgeyB9Ci0gICAgVGhyb3dTY29wZUxv
Y2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmlsZSwgdW5zaWdu
ZWQgbGluZSkKK3N0cnVjdCBFeGNlcHRpb25FdmVudExvY2F0aW9uIHsKKyAgICBFeGNlcHRpb25F
dmVudExvY2F0aW9uKCkgeyB9CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbihjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiAgICAgICAg
IDogZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKICAgICAgICAgLCBmaWxlKGZpbGUpCiAgICAg
ICAgICwgbGluZShsaW5lKQpAQCAtNDEsMyArNDEsMTEgQEAgc3RydWN0IFRocm93U2NvcGVMb2Nh
dGlvbiB7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisgICAg
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZu
ZGVmIEV4Y2VwdGlvbkhlbHBlcnNfaAogI2RlZmluZSBFeGNlcHRpb25IZWxwZXJzX2gKIAorI2lu
Y2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitF
eGNlcHRpb25TY29wZTo6RXhjZXB0aW9uU2NvcGUoVk0mIHZtLCBFeGNlcHRpb25FdmVudCBlbnRy
eUV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogbV92bSh2bSkK
KyAgICAsIG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcEV4Y2VwdGlvblNjb3BlKQorICAgICwgbV9s
b2NhdGlvbihsb2NhdGlvbikKKyAgICAsIG1fZGVwdGgobV9wcmV2aW91c1Njb3BlID8gbV9wcmV2
aW91c1Njb3BlLT5tX2RlcHRoICsgMSA6IDApCit7CisgICAgbV92bS5tX3RvcEV4Y2VwdGlvblNj
b3BlID0gdGhpczsKKyAgICAKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7
CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKGVudHJ5RXZlbnQsIG1fbG9jYXRpb24pOworICAgICAg
ICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwg
bmVlZHMgY2hlY2siKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAg
ICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvblNjb3BlOjp+
RXhjZXB0aW9uU2NvcGUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRp
b25TY29wZSk7CisgICAgbV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlID0gbV9wcmV2aW91c1Njb3Bl
OworfQorCit2b2lkIEV4Y2VwdGlvblNjb3BlOjpsb2dFdmVudChFeGNlcHRpb25FdmVudCBldmVu
dCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKK3sKKyAgICBsb2dFdmVudEhlYWRl
cihldmVudCwgbG9jYXRpb24pOworICAgIGRhdGFMb2coIlxuIik7Cit9CisKK3ZvaWQgRXhjZXB0
aW9uU2NvcGU6OmxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25F
dmVudExvY2F0aW9uIGxvY2F0aW9uKQoreworICAgIGRhdGFMb2coIjwiLCBtX3ZtLm1fZXhjZXB0
aW9uRXZlbnRDb3VudCsrLCAiPiBbIiwgbV9kZXB0aCwgIl0gIiwgZXZlbnQsICI6ICIsIGxvY2F0
aW9uKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25TY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFeGNlcHRpb25TY29wZV9oCisjZGVmaW5lIEV4Y2VwdGlvblNjb3BlX2gKKwor
I2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworICAgIAorY2xhc3MgRXhjZXB0aW9u
OworICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KKyAgICB1bnNpZ25lZCBkZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVwdGg7
IH0KKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpCisgICAgeworICAgICAgICBtX3ZtLm1fbmVl
ZEV4Y2VwdGlvbkNoZWNrID0gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigp
OworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBFeGNlcHRpb25TY29wZShWTSYsIEV4Y2Vw
dGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOworICAgIEV4Y2Vw
dGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBkZWxldGU7CisgICAgRXhjZXB0aW9u
U2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0OworICAgIH5FeGNlcHRpb25TY29wZSgp
OworCisgICAgdm9pZCBsb2dFdmVudChFeGNlcHRpb25FdmVudCwgRXhjZXB0aW9uRXZlbnRMb2Nh
dGlvbik7CisgICAgdm9pZCBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisKKyAgICBWTSYgbV92bTsKKyAgICBFeGNlcHRpb25TY29wZSogbV9w
cmV2aW91c1Njb3BlOworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbV9sb2NhdGlvbjsKKyAg
ICB1bnNpZ25lZCBtX2RlcHRoOworfTsKKyAgICAKKyNlbHNlIC8vIG5vdCBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNzIEV4Y2VwdGlvblNjb3BlIHsKK3B1
YmxpYzoKKyAgICBBTFdBWVNfSU5MSU5FIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgeyByZXR1cm4gbV92bS5l
eGNlcHRpb24oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb25T
Y29wZShWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyAgICB7IH0KKyAgICBFeGNlcHRpb25T
Y29wZShjb25zdCBFeGNlcHRpb25TY29wZSYpID0gZGVsZXRlOworICAgIEV4Y2VwdGlvblNjb3Bl
KEV4Y2VwdGlvblNjb3BlJiYpID0gZGVmYXVsdDsKKworICAgIFZNJiBtX3ZtOworfTsKKyAgICAK
KyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhjZXB0aW9uU2NvcGVfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcg
QEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIH0KIAogICAg
IFN0cnVjdHVyZSogc3ViY2xhc3NTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb24sIGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSwgc3ViY2xhc3NTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgIC8vIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHBy
b3BlcnR5IG9mIEYgdG8gMC4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIGlmICh0YXJn
ZXRPYmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpKSB7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgLy8gYS4gTGV0IEwgYmUgdGhlIGxlbmd0
aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTMgKzIx
OSwxNiBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgogdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpKQogICAgICAgICAgICAgZXhlYy0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9m
ZnNldCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnRE
ZXN0ICsgaSkgPSBnZXQoZXhlYywgaSArIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTUgKzczLDE3IEBAIEdldHRl
clNldHRlciogR2V0dGVyU2V0dGVyOjp3aXRoU2V0dGVyKFYKIAogSlNWYWx1ZSBjYWxsR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyBGSVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkg
d2l0aG91dCBjaGVja2luZyBmb3IgYW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsg
YXJvdW5kIHRoYXQgYnkgY2hlY2tpbmcgaGVyZS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCktPnZhbHVlKCk7CiAKICAgICBKU09iamVjdCogZ2V0dGVyID0ganNDYXN0PEdldHRlclNl
dHRlcio+KGdldHRlclNldHRlciktPmdldHRlcigpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldHRlci0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsK
ICAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZSwg
QXJnTGlzdCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Mywx
MSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdDo6ZGlzCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIFN0cmluZyB2YWx1ZSA9IHRhcmdldC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgZGF0YUxvZyh2YWx1ZSwgIlxuIik7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsCiB7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyBXZSBhbGxvdyBuZXdUYXJn
ZXQgPT0gSlNWYWx1ZSgpIGJlY2F1c2UgdGhlIEFQSSBuZWVkcyB0byBiZSBhYmxlIHRvIGNyZWF0
ZSBjbGFzc2VzIHdpdGhvdXQgaGF2aW5nIGEgcmVhbCBKUyBmcmFtZS4KICAgICAvLyBTaW5jZSB3
ZSBkb24ndCBhbGxvdyBzdWJjbGFzc2luZyBpbiB0aGUgQVBJIHdlIGp1c3QgdHJlYXQgbmV3VGFy
Z2V0ID09IEpTVmFsdWUoKSBhcyBuZXdUYXJnZXQgPT0gZXhlYy0+Y2FsbGVlKCkKICAgICBBU1NF
UlQoIW5ld1RhcmdldCB8fCBuZXdUYXJnZXQuaXNDb25zdHJ1Y3RvcigpKTsKQEAgLTExMCwxMyAr
MTExLDEzIEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIAogICAg
ICAgICAgICAgLy8gTm90ZSwgUmVmbGVjdC5jb25zdHJ1Y3QgbWlnaHQgY2F1c2UgdGhlIHByb2Zp
bGUgdG8gY2h1cm4gYnV0IHdlIGRvbid0IGNhcmUuCiAgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZVZhbHVlID0gbmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0pLT5jcmVhdGVJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0g
bmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBv
bmx5IGhhcHBlbnMgaWYgc29tZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29u
c3RydWN0b3Igd2l0aCBhbm90aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJn
ZXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOSBAQCBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0YShjCiAKIHZvaWQgSW50bENvbGxhdG9y
Ojppbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEwLjEuMSBJbml0
aWFsaXplQ29sbGF0b3IgKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25zKSAoRUNNQS00MDIgMi4w
KQogICAgIC8vIDEuIElmIGNvbGxhdG9yIGhhcyBhbiBbW2luaXRpYWxpemVkSW50bE9iamVjdF1d
IGludGVybmFsIHNsb3Qgd2l0aCB2YWx1ZSB0cnVlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCiAgICAgLy8gMi4gU2V0IGNvbGxhdG9yLltbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gdG8g
dHJ1ZS4KQEAgLTE2OSw3ICsxNzIsNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKEV4CiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVw
dChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gNS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4KQEAgLTE4MSwxNCArMTg0LDE0IEBA
IHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAgICAgLy8gYS4g
TGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQo
b3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICAvLyA3LiBMZXQgdSBiZSBHZXRPcHRpb24ob3B0aW9ucywgInVzYWdlIiwgInN0cmlu
ZyIsIMKrInNvcnQiLCAic2VhcmNoIsK7LCAic29ydCIpLgotICAgIFN0cmluZyB1c2FnZVN0cmlu
ZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlO
YW1lcy0+dXNhZ2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIg
XCJzb3J0XCIgb3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7CisgICAgU3RyaW5nIHVzYWdlU3RyaW5n
ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNh
Z2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIg
b3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7CiAgICAgLy8gOC4gUmV0dXJuSWZBYnJ1cHQodSkuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyA5LiBTZXQgY29sbGF0b3IuW1t1c2Fn
ZV1dIHRvIHUuCiAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJzb3J0IikKQEAgLTIxMiw5ICsyMTUs
OSBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gb3B0OwogCiAgICAgLy8gMTMuIExldCBtYXRjaGVyIGJlIEdldE9w
dGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyJsb29rdXAiLCAiYmVz
dCBmaXQiwrssICJiZXN0IGZpdCIpLgotICAgIFN0cmluZyBtYXRjaGVyID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRj
aGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0
aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CisgICAgU3RyaW5n
IG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRj
aGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0
Iik7CiAgICAgLy8gMTQuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gMTUuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0
Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVy
KTsKQEAgLTIzMywxNiArMjM2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IoRXgKICAgICB7CiAgICAgICAgIFN0cmluZyBudW1lcmljU3RyaW5nOwogICAgICAgICBi
b29sIHVzZXNGYWxsYmFjazsKLSAgICAgICAgYm9vbCBudW1lcmljID0gaW50bEJvb2xlYW5PcHRp
b24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bnVtZXJpYywgdXNl
c0ZhbGxiYWNrKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBi
b29sIG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bnVtZXJpYywgdXNlc0ZhbGxiYWNrKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCF1c2Vz
RmFsbGJhY2spCiAgICAgICAgICAgICBudW1lcmljU3RyaW5nID0gQVNDSUlMaXRlcmFsKG51bWVy
aWMgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtu
IiksIG51bWVyaWNTdHJpbmcpOwogICAgIH0KICAgICB7Ci0gICAgICAgIFN0cmluZyBjYXNlRmly
c3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5
TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAibG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmly
c3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBcImxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51
bGxwdHIpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIFN0cmlu
ZyBjYXNlRmlyc3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZp
cnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBu
dWxscHRyKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtmIiksIGNhc2VG
aXJzdCk7CiAgICAgfQpAQCAtMjc3LDkgKzI4MCw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0
aWFsaXplQ29sbGF0b3IoRXgKICAgICBtX251bWVyaWMgPSAocmVzdWx0LmdldChBU0NJSUxpdGVy
YWwoImtuIikpID09ICJ0cnVlIik7CiAKICAgICAvLyAyNC4gTGV0IHMgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJzZW5zaXRpdml0eSIsICJzdHJpbmciLCDCqyJiYXNlIiwgImFjY2VudCIsICJjYXNl
IiwgInZhcmlhbnQiwrssIHVuZGVmaW5lZCkuCi0gICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5n
ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5h
bWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9
LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2Fz
ZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyBzZW5zaXRpdml0eVN0
cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFjY2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJz
ZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBcImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIs
IG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7CiAgICAgLy8gMjUuIFJldHVybklmQWJydXB0KHMp
LgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjYuIElmIHMgaXMgdW5kZWZp
bmVkLCB0aGVuCiAgICAgLy8gYS4gSWYgdSBpcyAic29ydCIsIHRoZW4gbGV0IHMgYmUgInZhcmlh
bnQiLgpAQCAtMzAwLDExICszMDMsMTEgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogCiAgICAgLy8gMjguIExldCBpcCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImln
bm9yZVB1bmN0dWF0aW9uIiwgImJvb2xlYW4iLCB1bmRlZmluZWQsIGZhbHNlKS4KICAgICBib29s
IHVzZXNGYWxsYmFjazsKLSAgICBib29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5P
cHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+aWdub3JlUHVu
Y3R1YXRpb24sIHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCBpZ25vcmVQdW5jdHVhdGlvbiA9IGlu
dGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQ
dW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAg
ICBpZ25vcmVQdW5jdHVhdGlvbiA9IGZhbHNlOwogICAgIC8vIDI5LiBSZXR1cm5JZkFicnVwdChp
cCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAzMC4gU2V0IGNvbGxhdG9y
LltbaWdub3JlUHVuY3R1YXRpb25dXSB0byBpcC4KICAgICBtX2lnbm9yZVB1bmN0dWF0aW9uID0g
aWdub3JlUHVuY3R1YXRpb247CkBAIC0zMTgsMTEgKzMyMSwxMyBAQCB2b2lkIEludGxDb2xsYXRv
cjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKIHZvaWQgSW50bENvbGxhdG9yOjpjcmVhdGVDb2xs
YXRvcihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEFTU0VSVCghbV9jb2xs
YXRvcik7CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0
aWFsaXplQ29sbGF0b3Ioc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKQEAgLTQxNiw2ICs0MjEsOSBAQCBjb25zdCBjaGFyKiBJbnRs
Q29sbGF0b3I6OnNlbnNpdGl2aXR5U3RyCiAKIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29s
dmVkT3B0aW9ucyhFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTAu
My41IEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAy
LjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3Bl
cnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8vIGNvbnN0cnVjdGVkIGJ5
IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgcHJv
cGVydGllcyB0aGUKQEAgLTQyNywxMCArNDM1LDkgQEAgSlNPYmplY3QqIEludGxDb2xsYXRvcjo6
cmVzb2x2ZWRPcHRpb25zKAogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkQ29sbGF0b3IpIHsKICAg
ICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZzdGF0ZSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9sb2NhbGUpKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJpbmco
JnN0YXRlLCBBU0NJSUxpdGVyYWwodXNhZ2VTdHJpbmcobV91c2FnZSkpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxDb2xsYXRv
cihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4xLjIgSW50bC5D
b2xsYXRvciAoW2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEu
IElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBm
dW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8g
Mi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1Rhcmdl
dCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoY29sbGF0
b3IpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxD
b2xsYXRvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+Y29sbGF0b3JTdHJ1Y3R1cmUo
KSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0
ZShzdGF0ZS0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0g
SW50bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKGNvbGxhdG9y
KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29sbGF0b3IoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpLgpAQCAtMTM3LDEzICsxMzksMTUgQEAgQ2FsbFR5cGUgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmdldENhbAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxD
b2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRl
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4yLjIgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEu
IExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcyku
CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2Fs
ZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZB
YnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRl
ZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAgdm9pZCBJbnRsQ29sbGF0b3JQcm90b3R5cGU6
OmZpbmlzaENyZWF0aQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAvLyAxMC4zLjQgQ29sbGF0b3IgQ29tcGFyZSBGdW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKICAg
ICAvLyAxLiBMZXQgY29sbGF0b3IgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4gQXNzZXJ0
OiBUeXBlKGNvbGxhdG9yKSBpcyBPYmplY3QgYW5kIGNvbGxhdG9yIGhhcyBhbiBbW2luaXRpYWxp
emVkQ29sbGF0b3JdXSBpbnRlcm5hbCBzbG90IHdob3NlIHZhbHVlIGlzIHRydWUuCkBAIC05MSwx
MyArOTMsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAg
IC8vIDUuIExldCBYIGJlIFRvU3RyaW5nKHgpLgogICAgIEpTU3RyaW5nKiB4ID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChYKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5KS4KICAgICBKU1N0cmluZyogeSA9
IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSk7CiAgICAgLy8gOC4gUmV0dXJuSWZB
YnJ1cHQoWSkuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgLy8gOS4gUmV0dXJuIENvbXBhcmVTdHJpbmdzKGNvbGxhdG9y
LCBYLCBZKS4KQEAgLTEyNSw3ICsxMjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxDb2xsYXRvCiAKICAgICAgICAgLy8gYy4gTGV0IGJjIGJlIEJvdW5kRnVuY3Rpb25DcmVh
dGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3VuZENvbXBhcmUgPSBKU0JvdW5kRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBjb2xs
YXRvciwgbnVsbHB0ciwgMiwgQVNDSUlMaXRlcmFsKCJjb21wYXJlIikpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAg
IC8vIGQuIFNldCBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1dIHRvIGJjLgogICAgICAgICBjb2xs
YXRvci0+c2V0Qm91bmRDb21wYXJlKHZtLCBib3VuZENvbXBhcmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShy
ZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDcgQEAgc3RhdGlj
IEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogewogICAgIC8vIDEyLjEuMSBUb0Rh
dGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG9wdGlvbnMg
YmUgbnVsbCwgZWxzZSBsZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25zKS4KICAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KQEAgLTIyNiw3ICsyMjcsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgICAgIG9wdGlvbnMgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bGxQcm90
b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEpTT2JqZWN0KiBv
cmlnaW5hbFRvT2JqZWN0ID0gb3JpZ2luYWxPcHRpb25zLnRvT2JqZWN0KCZleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgb3B0aW9u
cyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBvcmlnaW5hbFRvT2JqZWN0KTsKICAgICB9
CkBAIC0yNDMsMjUgKzI0NCwyNSBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0CiAgICAgLy8gaWlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCiAgICAgLy8gaXYuIElm
IHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gbGV0IG5lZWREZWZhdWx0cyBiZSBmYWxzZS4K
ICAgICBKU1ZhbHVlIHdlZWtkYXkgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPndlZWtkYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICghd2Vla2RheS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsK
IAogICAgIEpTVmFsdWUgeWVhciA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+eWVhcik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF5
ZWFyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAg
SlNWYWx1ZSBtb250aCA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bW9u
dGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbW9udGgu
aXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIGRheSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5KTsKLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWRheS5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKQEAgLTI3NSwxOSArMjc2LDE5IEBA
IHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJl
dHVybklmQWJydXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbiBsZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgaG91ciA9IG9w
dGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aG91cik7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFob3VyLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBtaW51dGUgPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtaW51dGUuaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHNlY29uZCA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXNlY29uZC5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKQEAgLTMwMSwxNSArMzAyLDE1IEBAIHN0YXRpYyBKU09i
amVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAgICAgSlNTdHJpbmcqIG51bWVyaWMg
PSBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIEFTQ0lJTGl0ZXJhbCgibnVtZXJpYyIpKTsKIAog
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIG51
bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgs
IG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGF5
LCBudW1lcmljKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTQzMCwxMyArNDMxLDEzIEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5v
bmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGxvY2FsZXMpOwogICAgIC8v
IDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLAotICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIDUuIExldCBvcHRpb25zIGJlIFRvRGF0ZVRpbWVPcHRpb25zKG9w
dGlvbnMsICJhbnkiLCAiZGF0ZSIpLgogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gdG9EYXRlVGlt
ZU9wdGlvbnNBbnlEYXRlKGV4ZWMsIG9yaWdpbmFsT3B0aW9ucyk7CiAgICAgLy8gNi4gUmV0dXJu
SWZBYnJ1cHQob3B0aW9ucykuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
Ny4gTGV0IG9wdCBiZSBhIG5ldyBSZWNvcmQuCkBAIC00NDUsNyArNDQ2LDcgQEAgdm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDguIExldCBtYXRjaGVyIGJl
IEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyJsb29rdXAi
LCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmluZyBsb2NhbGVNYXRjaGVyID0g
aW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVN
YXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUg
ZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8g
OS4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIC8vIDEwLiBTZXQgb3B0LltbbG9jYWxlTWF0Y2hlcl1dIHRvIG1hdGNoZXIuCiAgICAgbG9j
YWxlT3B0LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLnN0cmluZygpLCBsb2Nh
bGVNYXRjaGVyKTsKQEAgLTQ3NCw3ICs0NzUsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMTcuIExldCB0eiBiZSBHZXQob3B0aW9ucywgInRpbWVa
b25lIikuCiAgICAgSlNWYWx1ZSB0elZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50aW1lWm9uZSk7CiAgICAgLy8gMTguIFJldHVybklmQWJydXB0KHR6KS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyAxOS4gSWYgdHogaXMgbm90IHVuZGVm
aW5lZCwgdGhlbgpAQCAtNDgzLDcgKzQ4NCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojpp
bml0aWFsaXplRGF0ZVQKICAgICAgICAgLy8gYS4gTGV0IHR6IGJlIFRvU3RyaW5nKHR6KS4KICAg
ICAgICAgU3RyaW5nIG9yaWdpbmFsVHogPSB0elZhbHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKICAg
ICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgICAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gSWYgdGhlIHJlc3VsdCBvZiBJc1ZhbGlkVGlt
ZVpvbmVOYW1lKHR6KSBpcyBmYWxzZSwgdGhlbiBpLiBUaHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0
aW9uLgogICAgICAgICAvLyBkLiBMZXQgdHogYmUgQ2Fub25pY2FsaXplVGltZVpvbmVOYW1lKHR6
KS4KQEAgLTUxNiw3ICs1MTcsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgYXV0byBzaG9ydExvbmcgPSB7ICJzaG9ydCIsICJsb25nIiB9OwogCiAgICAg
U3RyaW5nIHdlZWtkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPndlZWtkYXksIG5hcnJvd1Nob3J0TG9uZywgIndlZWtkYXkgbXVzdCBiZSBcIm5h
cnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghd2Vla2RheS5pc051bGwoKSkgewogICAgICAgICBpZiAo
d2Vla2RheSA9PSAibmFycm93IikKQEAgLTUyOCw3ICs1MjksNyBAQCB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGVyYSA9IGludGxT
dHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+ZXJhLCBuYXJyb3dT
aG9ydExvbmcsICJlcmEgbXVzdCBiZSBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wi
IiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZXJhLmlz
TnVsbCgpKSB7CiAgICAgICAgIGlmIChlcmEgPT0gIm5hcnJvdyIpCkBAIC01NDAsNyArNTQxLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyB5ZWFyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT55ZWFyLCB0d29EaWdpdE51bWVyaWMsICJ5ZWFyIG11c3QgYmUgXCIyLWRpZ2l0XCIg
b3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCF5ZWFyLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh5ZWFyID09ICIyLWRpZ2l0IikK
QEAgLTU1MCw3ICs1NTEsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURh
dGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1vbnRoID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgdHdvRGlnaXROdW1lcmljTmFycm93U2hv
cnRMb25nLCAibW9udGggbXVzdCBiZSBcIjItZGlnaXRcIiwgXCJudW1lcmljXCIsIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFtb250aC5pc051bGwoKSkgewogICAgICAgICBpZiAobW9udGgg
PT0gIjItZGlnaXQiKQpAQCAtNTY2LDcgKzU2Nyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgZGF5ID0gaW50bFN0cmluZ09w
dGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIHR3b0RpZ2l0TnVtZXJp
YywgImRheSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0g
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZGF5LmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChkYXkgPT0gIjItZGlnaXQiKQpAQCAtNTc2LDcgKzU3Nyw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgaG91ciA9
IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91ciwg
dHdvRGlnaXROdW1lcmljLCAiaG91ciBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wi
IiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVl
ZCBob3VyMTIgdG8gbWFrZSB0aGUgaG91ciBza2VsZXRvbiBwYXR0ZXJuIGRlY2lzaW9uLCBzbyBk
byB0aGlzIGVhcmx5LgpAQCAtNTg0LDcgKzU4NSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICBib29sIGlzSG91cjEyVW5kZWZpbmVkOwogICAgIGJvb2wg
aHIxMiA9IGludGxCb29sZWFuT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PmhvdXIxMiwgaXNIb3VyMTJVbmRlZmluZWQpOwogICAgIC8vIDMzLiBSZXR1cm5JZkFicnVwdCho
cjEyKS4KLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWhvdXIuaXNOdWxs
KCkpIHsKQEAgLTYwNyw3ICs2MDgsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1pbnV0ZSA9IGludGxTdHJpbmdPcHRpb24o
ZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlLCB0d29EaWdpdE51bWVyaWMs
ICJtaW51dGUgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1pbnV0ZS5pc051bGwoKSkgewog
ICAgICAgICBpZiAobWludXRlID09ICIyLWRpZ2l0IikKQEAgLTYxNyw3ICs2MTgsNyBAQCB2b2lk
IEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5n
IHNlY29uZCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+c2Vjb25kLCB0d29EaWdpdE51bWVyaWMsICJzZWNvbmQgbXVzdCBiZSBcIjItZGlnaXRcIiBv
ciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIXNlY29uZC5pc051bGwoKSkgewogICAgICAgICBpZiAoc2Vjb25kID09ICIyLWRpZ2l0
IikKQEAgLTYyNyw3ICs2MjgsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHRpbWVab25lTmFtZSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmVOYW1lLCBzaG9ydExv
bmcsICJ0aW1lWm9uZU5hbWUgbXVzdCBiZSBcInNob3J0XCIgb3IgXCJsb25nXCIiLCBudWxscHRy
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF0aW1lWm9uZU5hbWUuaXNO
dWxsKCkpIHsKICAgICAgICAgaWYgKHRpbWVab25lTmFtZSA9PSAic2hvcnQiKQpAQCAtNjQxLDcg
KzY0Miw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAv
LyAyNi4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJmb3JtYXRNYXRjaGVyIiwg
InN0cmluZyIsIMKrImJhc2ljIiwgImJlc3QgZml0IsK7LCAiYmVzdCBmaXQiKS4KICAgICBpbnRs
U3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmZvcm1hdE1hdGNo
ZXIsIHsgImJhc2ljIiwgImJlc3QgZml0IiB9LCAiZm9ybWF0TWF0Y2hlciBtdXN0IGJlIGVpdGhl
ciBcImJhc2ljXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gMjcuIFJl
dHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEFsd2F5cyB1c2UgSUNVIGRhdGUgZm9ybWF0IGdlbmVyYXRvciwgcmF0aGVyIHRoYW4gb3Vy
IG93biBwYXR0ZXJuIGxpc3QgYW5kIG1hdGNoZXIuCkBAIC04MzYsMTUgKzgzNywxNyBAQCBjb25z
dCBjaGFyKiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnRpbWVab25lCiAKIEpTT2JqZWN0KiBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmIGV4ZWMpCiB7CisgICAgVk0m
IHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEyLjMuNSBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZl
ZE9wdGlvbnMoKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEg
bmV3IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzIGFyZSBzZXQgYXMgaWYg
Y29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhl
IGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnRl
cm5hbCBzbG90IG9mIHRoaXMgRGF0ZVRpbWVGb3JtYXQgb2JqZWN0IChzZWUgMTIuNCk6IGxvY2Fs
ZSwgY2FsZW5kYXIsIG51bWJlcmluZ1N5c3RlbSwgdGltZVpvbmUsIGhvdXIxMiwgd2Vla2RheSwg
ZXJhLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgYW5kIHRpbWVab25l
TmFtZS4gUHJvcGVydGllcyB3aG9zZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3RzIGFyZSBu
b3QgcHJlc2VudCBhcmUgbm90IGFzc2lnbmVkLgogICAgIC8vIE5vdGU6IEluIHRoaXMgdmVyc2lv
biBvZiB0aGUgRUNNQVNjcmlwdCAyMDE1IEludGVybmF0aW9uYWxpemF0aW9uIEFQSSwgdGhlIHRp
bWVab25lIHByb3BlcnR5IHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgdGltZSB6b25l
IGlmIG5vIHRpbWVab25lIHByb3BlcnR5IHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucyBvYmpl
Y3QgcHJvdmlkZWQgdG8gdGhlIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IuIFRoZSBw
cmV2aW91cyB2ZXJzaW9uIGxlZnQgdGhlIHRpbWVab25lIHByb3BlcnR5IHVuZGVmaW5lZCBpbiB0
aGlzIGNhc2UuCiAgICAgaWYgKCFtX2luaXRpYWxpemVkRGF0ZVRpbWVGb3JtYXQpIHsKICAgICAg
ICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZN
JiB2bSA9IGV4ZWMudm0oKTsKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZleGVjKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxvY2FsZSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2xvY2FsZSkpOwogICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsZW5kYXIsIGpzTm9udHJp
dmlhbFN0cmluZygmZXhlYywgbV9jYWxlbmRhcikpOwpAQCAtODkxLDcgKzg5NCw3IEBAIEpTVmFs
dWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQoRXhlY1MKICAgICAvLyAxMi4zLjQgRm9ybWF0
RGF0ZVRpbWUgYWJzdHJhY3Qgb3BlcmF0aW9uIChFQ01BLTQwMiAyLjApCiAgICAgaWYgKCFtX2lu
aXRpYWxpemVkRGF0ZVRpbWVGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9y
bWF0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQo
IWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICB9CiAKICAgICAvLyAxLiBJZiB4IGlzIG5vdCBhIGZpbml0ZSBOdW1iZXIsIHRoZW4g
dGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmZpbmkK
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bERhdGVU
aW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjEu
MiBJbnRsLkRhdGVUaW1lRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAy
LjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBi
ZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1Rh
cmdldC4KICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9t
Q29uc3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwg
c3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3Iq
PihzdGF0ZS0+Y2FsbGVlKCkpLT5kYXRlVGltZUZvcm1hdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAo
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
SW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6
Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxEYXRlVGltZUZvcm1hdCog
ZGF0ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
KTsKICAgICBBU1NFUlQoZGF0ZVRpbWVGb3JtYXQpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRp
YWxpemVEYXRlVGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBA
IC0xMzcsNiArMTM5LDggQEAgQ2FsbFR5cGUgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6
OgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0
cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBh
dmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0u
CkBAIC0xNDUsNyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0
ZVRpbQogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDgg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGU6OmZpbmlzaAogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0
ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMy40IERh
dGVUaW1lIEZvcm1hdCBGdW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgZHRm
IGJlIHRoZSB0aGlzIHZhbHVlLgogICAgIC8vIDIuIEFzc2VydDogVHlwZShkdGYpIGlzIE9iamVj
dCBhbmQgZHRmIGhhcyBhbiBbW2luaXRpYWxpemVkRGF0ZVRpbWVGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlIGlzIHRydWUuCkBAIC0xMDEsNyArMTAzLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgICAgICAvLyBhLiBMZXQgeCBiZSBUb051
bWJlcihkYXRlKS4KICAgICAgICAgdmFsdWUgPSBkYXRlLnRvTnVtYmVyKHN0YXRlKTsKICAgICAg
ICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQoeCkuCi0gICAgICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAt
MTQwLDcgKzE0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0K
IAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMg
dmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
dm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEs
IEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBkdGYuW1ti
b3VuZEZvcm1hdF1dIHRvIGJmLgogICAgICAgICBkdGYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3Vu
ZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCw3ICsxNjgsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAg
ICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRM
b2NhbGVzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gSWYgb3B0
aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4KQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJl
IFRvT2JqZWN0KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2Jq
ZWN0KCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xOTAsNyAr
MTkwLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8v
IDguIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJz
dHJpbmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmlu
ZyBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0
Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZp
dCIpOwogICAgIC8vIDkuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0
Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVy
KTsKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGCiAgICAgLy8gMTYuIExldCBzIGJlIEdldE9wdGlvbihvcHRpb25zLCAic3R5bGUiLCAi
c3RyaW5nIiwgwqsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSLCuywgImRlY2ltYWwi
KS4KICAgICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAi
cGVyY2VudCIsICJjdXJyZW5jeSIgfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwi
LCBcInBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICAvLyAxNy4g
UmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAx
OC4gU2V0IG51bWJlckZvcm1hdC5bW3N0eWxlXV0gdG8gcy4KICAgICBpZiAoc3R5bGVTdHJpbmcg
PT0gImRlY2ltYWwiKQpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxOS4gTGV0IGMgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJjdXJyZW5jeSIsICJzdHJpbmciLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuCiAgICAgU3RyaW5n
IGN1cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAg
IC8vIDIwLiBSZXR1cm5JZkFicnVwdChjKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIC8vIDIxLiBJZiBjIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIWN1cnJlbmN5
LmlzTnVsbCgpKSB7CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI0LiBMZXQgY2QgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJjdXJyZW5jeURpc3BsYXkiLCAic3RyaW5nIiwgwqsiY29kZSIsICJzeW1ib2wiLCAibmFtZSLC
uywgInN5bWJvbCIpLgogICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJpbmcgPSBpbnRsU3Ry
aW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1
cnJlbmN5RGlzcGxheSIpLCB7ICJjb2RlIiwgInN5bWJvbCIsICJuYW1lIiB9LCAiY3VycmVuY3lE
aXNwbGF5IG11c3QgYmUgZWl0aGVyIFwiY29kZVwiLCBcInN5bWJvbFwiLCBvciBcIm5hbWVcIiIs
ICJzeW1ib2wiKTsKICAgICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQoY2QpLgotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgLy8gMjYuIElmIHMgaXMgImN1cnJlbmN5Iiwgc2V0IG51bWJl
ckZvcm1hdC5bW2N1cnJlbmN5RGlzcGxheV1dIHRvIGNkLgogICAgIGlmIChtX3N0eWxlID09IFN0
eWxlOjpDdXJyZW5jeSkgewpAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1h
dDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAyOC4gUmV0dXJuSWZBYnJ1cHQobW5pZCkuCiAg
ICAgLy8gMjkuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtSW50ZWdlckRpZ2l0c11dIHRvIG1u
aWQuCiAgICAgdW5zaWduZWQgbWluaW11bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fbWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0czsKIApAQCAtMjg2
LDcgKzI4Niw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAvLyAzMi4gUmV0dXJuSWZBYnJ1cHQobW5mZCkuCiAgICAgLy8gMzMuIFNldCBudW1iZXJGb3Jt
YXQuW1ttaW5pbXVtRnJhY3Rpb25EaWdpdHNdXSB0byBtbmZkLgogICAgIHVuc2lnbmVkIG1pbmlt
dW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwog
CkBAIC0zMDMsMjAgKzMwMywyMCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGCiAgICAgLy8gMzYuIFJldHVybklmQWJydXB0KG14ZmQpLgogICAgIC8vIDM3LiBTZXQg
bnVtYmVyRm9ybWF0LltbbWF4aW11bUZyYWN0aW9uRGlnaXRzXV0gdG8gbXhmZC4KICAgICB1bnNp
Z25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIp
LCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWF4aW11bUZyYWN0aW9uRGln
aXRzID0gbWF4aW11bUZyYWN0aW9uRGlnaXRzOwogCiAgICAgLy8gMzguIExldCBtbnNkIGJlIEdl
dChvcHRpb25zLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIC8v
IDM5LiBSZXR1cm5JZkFicnVwdChtbnNkKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gNDAuIExldCBteHNkIGJlIEdldChvcHRpb25zLCAibWF4aW11bVNpZ25pZmljYW50
RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9w
dGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNp
Z25pZmljYW50RGlnaXRzIikpOwogICAgIC8vIDQxLiBSZXR1cm5JZkFicnVwdChteHNkKS4KLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNDIuIElmIG1uc2QgaXMgbm90IHVu
ZGVmaW5lZCBvciBteHNkIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTMyNCwxMiArMzI0LDEy
IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAgICAgLy8g
YS4gTGV0IG1uc2QgYmUgR2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiLCAxLCAyMSwgMSkuCiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2Fu
dERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAg
ICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobW5zZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gTGV0IG14c2QgYmUgR2V0TnVtYmVyT3B0
aW9uKG9wdGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiLCBtbnNkLCAyMSwgMjEpLgog
ICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1T
aWduaWZpY2FudERpZ2l0cyIpLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CiAg
ICAgICAgIC8vIGQuIFJldHVybklmQWJydXB0KG14c2QpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIGUuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHNdXSB0byBtbnNkLgogICAgICAgICBtX21pbmltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsKQEAgLTM0Myw3ICszNDMsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgaWYgKHVzZXNG
YWxsYmFjaykKICAgICAgICAgdXNlR3JvdXBpbmcgPSB0cnVlOwogICAgIC8vIDQ0LiBSZXR1cm5J
ZkFicnVwdChnKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDQ1LiBTZXQg
bnVtYmVyRm9ybWF0LltbdXNlR3JvdXBpbmddXSB0byBnLgogICAgIG1fdXNlR3JvdXBpbmcgPSB1
c2VHcm91cGluZzsKQEAgLTM2NSwxMSArMzY1LDE0IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGVOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghbV9u
dW1iZXJGb3JtYXQpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KSB7CiAg
ICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5k
ZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAg
ICBVTnVtYmVyRm9ybWF0U3R5bGUgc3R5bGU7CkBAIC00ODMsNiArNDg2LDkgQEAgY29uc3QgY2hh
ciogSW50bE51bWJlckZvcm1hdDo6Y3VycmVuY3lEaQogCiBKU09iamVjdCogSW50bE51bWJlckZv
cm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyAxMS4zLjUgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9u
cygpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2Jq
ZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8v
IGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRo
ZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGUKQEAgLTQ5NCwxMCArNTAwLDkgQEAgSlNPYmplY3Qq
IEludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aQogCiAgICAgaWYgKCFtX2luaXRpYWxpemVk
TnVtYmVyRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpz
VW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBv
cHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBtX2xv
Y2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJudW1iZXJpbmdTeXN0ZW0iKSwganNTdHJpbmcoJnN0YXRlLCBtX251bWJlcmluZ1N5
c3RlbSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIC8vIDExLjEuMiBJbnRsLk51bWJlckZvcm1hdCAoW2xvY2FsZXMg
Wywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1
bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVs
c2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1h
dCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3Jt
YXRQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJG
b3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxOdW1iZXJG
b3JtYXQqIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQobnVtYmVyRm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0
aWFsaXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0x
MzcsNiArMTM5LDggQEAgQ2FsbFR5cGUgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2Nh
bGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJs
ZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCkBAIC0xNDUs
NyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAg
ICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8g
My4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcgogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihFeGVjU3RhdGUqIHN0
YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4zLjQgRm9ybWF0IE51bWJlciBGdW5jdGlv
bnMgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgbmYgYmUgdGhlIHRoaXMgdmFsdWUuCiAg
ICAgLy8gMi4gQXNzZXJ0OiBUeXBlKG5mKSBpcyBPYmplY3QgYW5kIG5mIGhhcyBhbiBbW2luaXRp
YWxpemVkTnVtYmVyRm9ybWF0XV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSAgdHJ1ZS4KQEAg
LTkxLDcgKzkzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAog
ICAgIC8vIDQuIExldCB4IGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICBkb3VibGUgbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKHN0YXRlKTsKICAgICAvLyA1LiBSZXR1cm5JZkFi
cnVwdCh4KS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KQEAg
LTEyOCw3ICsxMzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJG
CiAKICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlz
IHZhbHVlwrspLgogICAgICAgICBib3VuZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEs
IEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBuZi5bW2Jv
dW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRG
b3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDkgQEAgdm9pZCBj
b252ZXJ0SUNVTG9jYWxlVG9CQ1A0N0xhbmd1YWdlVGFnKAogCiBib29sIGludGxCb29sZWFuT3B0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5LCBib29sJiB1c2VzRmFsbGJhY2spCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyA5LjIuOSBH
ZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAg
IC8vIEZvciB0eXBlPSJib29sZWFuIi4gdmFsdWVzIGlzIGFsd2F5cyB1bmRlZmluZWQuCiAKQEAg
LTEzMCwxNCArMTMzLDE0IEBAIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0
ZSwKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAg
IC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KICAg
ICBKU1ZhbHVlIHZhbHVlID0gb3B0cy0+Z2V0KCZzdGF0ZSwgcHJvcGVydHkpOwogCiAgICAgLy8g
NC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xNzIs
MTQgKzE3NSwxNCBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAg
ICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2JqZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChvcHRzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFs
dWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1
cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xOTIsNyArMTk1LDcg
QEAgU3RyaW5nIGludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICBTdHJp
bmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogCiAgICAgICAgIC8v
IGlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICAgICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTIyMCwxNCArMjIzLDE0IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24o
RXhlY1N0YXRlJiBzdGEKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0
YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVy
dHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAK
ICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAt
MjM1LDcgKzIzOCw3IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oRXhlY1N0YXRlJiBzdGEK
ICAgICAgICAgLy8gYS4gTGV0IHZhbHVlIGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICAgICAgZG91
YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKICAgICAgICAgLy8gYi4g
UmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgLy8gMS4gSWYgdmFsdWUgaXMgTmFOIG9yIGxlc3MgdGhhbiBtaW5p
bXVtIG9yIGdyZWF0ZXIgdGhhbiBtYXhpbXVtLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9u
LgogICAgICAgICBpZiAoIShkb3VibGVWYWx1ZSA+PSBtaW5pbXVtICYmIGRvdWJsZVZhbHVlIDw9
IG1heGltdW0pKSB7CkBAIC01NTYsMTYgKzU1OSwxNiBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEV4CiAgICAgfQogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTyku
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgLy8g
Ni4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIpKS4KICAgICBKU1ZhbHVlIGxl
bmd0aFByb3BlcnR5ID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
CiAKICAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyBL
ZWVwIHRyYWNrIG9mIGxvY2FsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCkBA
IC01ODEsNyArNTg0LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChF
eAogICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoJnN0
YXRlLCBrKTsKIAogICAgICAgICAvLyBjLiBSZXR1cm5JZkFicnVwdChrUHJlc2VudCkuCi0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgIC8vIGQuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KQEAgLTU5MCw3ICs1OTMsNyBA
QCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgICAgICBK
U1ZhbHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUsIGspOwogCiAgICAgICAg
ICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1ZhbHVlKS4KLSAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAg
ICAgICAgIC8vIGlpaS4gSWYgVHlwZShrVmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0
aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCkBAIC02MDMsNyArNjA2LDcgQEAgVmVjdG9yPFN0
cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeAogICAgICAgICAgICAgSlNTdHJpbmcqIHRh
ZyA9IGtWYWx1ZS50b1N0cmluZygmc3RhdGUpOwogCiAgICAgICAgICAgICAvLyB2LiBSZXR1cm5J
ZkFicnVwdCh0YWcpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gdmkuIElmIElzU3Ry
dWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyh0YWcpIGlzIGZhbHNlLCB0aHJvdyBhIFJhbmdlRXJy
b3IgZXhjZXB0aW9uLgpAQCAtOTMzLDYgKzkzNiw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxl
cyhFeGVjU3RhdGUmIHN0YXQKIHsKICAgICAvLyA5LjIuOCBTdXBwb3J0ZWRMb2NhbGVzIChhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKQogICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFN0cmluZyBtYXRjaGVyOwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuCkBAIC05NDAsNyArOTQ0LDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNT
dGF0ZSYgc3RhdAogICAgICAgICAvLyBhLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9u
cywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsgImxvb2t1cCIsICJiZXN0IGZpdCIgwrss
ICJiZXN0IGZpdCIpLgogICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJl
c3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwi
YmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCht
YXRjaGVyKS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUg
ImJlc3QgZml0Ii4KQEAgLTk2MCw3ICs5NjQsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMo
RXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBsb29rdXBTdXBwb3J0
ZWRMb2NhbGVzKHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKICAg
ICB9CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAv
LyA2LiBMZXQgc3Vic2V0IGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcyku
CkBAIC05NjksNyArOTczLDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYg
c3RhdAogICAgIC8vIDcuIExldCBrZXlzIGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCku
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cygmc3RhdGUsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MpOwogICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9y
dGVkTG9jYWxlcywgJnN0YXRlLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2M7CkBAIC05ODYsNyArOTkwLDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNT
dGF0ZSYgc3RhdAogICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShz
dXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXNbaV0sIGRlc2MsIHRydWUpOwogCiAgICAgICAg
IC8vIGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNyBAQCBK
U1ZhbHVlIGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhXb3JrYXJvCiAgICAgLy8gRklYTUU6IFdv
cmthcm91bmQgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwv
YXBwbHkgcGF0dGVybnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzY3OQogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEludGxJ
bnN0YW5jZSo+KHRoaXNWYWx1ZSkpIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxs
ZWUtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAg
aWYgKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoJnN0YXRlLCB0aGlzVmFsdWUsIHByb3Rv
dHlwZSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBJbnRsSW5zdGFuY2UqIGlu
c3RhbmNlID0gZmFjdG9yeSh2bSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICB0aGlzT2JqZWN0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJz
dGl0dXRlVmFsdWVQcml2YXRlTmFtZSgpLCBpbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgSlNWYWx1ZSBpdGVy
YXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwpA
QCAtNTMsNyArNTMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpT
CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVu
Y3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0
b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNPYmplY3QoKSkKQEAgLTgwLDExICs4
MCwxNCBAQCBib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiBleGVjLCBKCiAKIEpTVmFs
dWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJh
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYm9v
bCBkb25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1bHQpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihmYWxzZSk7CkBAIC05NywxMiArMTAwLDEzIEBAIHZvaWQgaXRlcmF0b3JDbG9z
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAgICAg
SlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5yZXR1cm5LZXl3b3JkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEyOSw3ICsxMzMsNyBAQCB2
b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbm5lclJl
c3VsdC5pc09iamVjdCgpKSB7CkBAIC0xNjcsNyArMTcxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZv
ckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5n
ZXQoc3RhdGUsIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVy
YXRvckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC0xNzksNyArMTgzLDcgQEAgSlNWYWx1ZSBpdGVyYXRv
ckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwogCiAgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9u
QXJndW1lbnRzOwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1
bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0
YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOwotICAgIGlmIChzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJUaHJvd1Njb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyMCArNDgs
MjIgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxCYWNrVHlwZT4KIHZvaWQgZm9yRWFjaEluSXRl
cmFibGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tU
eXBlJiBjYWxsYmFjaykKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaXRlcmF0b3Ig
PSBpdGVyYXRvckZvckl0ZXJhYmxlKHN0YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRv
clN0ZXAoc3RhdGUsIGl0ZXJhdG9yKTsKLSAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpIHx8IHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUg
bmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShzdGF0ZSwgbmV4dCk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBjYWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1
ZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLCBp
dGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTkxLDcgKzU5MSw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBl
bGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4
ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3Vt
ZW50cyBpbmR4IGFuZCB0cnVlLgogICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMs
IGV4ZWMsIGluZGV4KSkgewpAQCAtNjQzLDcgKzY0Myw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhf
QVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0
aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBKU0FycmF5Ojpw
dXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCA+
IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5wdXRCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5NSw3ICs2OTUsNyBAQCB2b2lkIEpTQXJy
YXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIAogICAgICAgICBpZiAobGVu
Z3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1
dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQg
SlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAg
ICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0
aCwgdmFsdWUsIHRydWUsIHB1dFJlc3VsdCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFk
RXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3RoIDwgMHhGRkZGRkZGRnUpCisgICAgICAgICAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpICYmIG9sZExlbmd0aCA8IDB4RkZGRkZGRkZ1KQogICAgICAgICAg
ICAgICAgIHNldExlbmd0aChleGVjLCBvbGRMZW5ndGggKyAxLCB0cnVlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNzMxLDcgKzczMSw3IEBAIHZvaWQgSlNBcnJheTo6cHVz
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4g
TUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5k
ZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKICAgICAgICAg
ICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAg
ICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBs
ZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMTkwLDYgKzEx
OTAsOSBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkBAIC0xMjU1LDcgKzEy
NTgsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAg
ICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NyArODgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
dW5zaWduZWQgbGVuZ3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAg
ICAgbGVuZ3RoID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3Vt
ZW50YXRpb24gZG9lc24ndCBzYXkgc28sIGl0IGlzIGluIGZhY3QgY29ycmVjdCB0byBzYXkKQEAg
LTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUo
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0s
IGFycmF5QnVmZmVyU3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
MyArNTAsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJT
bGljZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMy
X3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAg
IGludDMyX3QgZW5kOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAg
ICAgICBlbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCkt
PmJ5dGVMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUlubGluZXMuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjQgKzcw
LDI2IEBAIGlubGluZSBib29sIEpTQXJyYXk6OmNhbkZhc3RDb3B5KFZNJiB2bSwKIAogQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBnZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwogICAgIHJldHVybiBsZW5ndGhWYWx1ZS50b1VJbnQzMihleGVjKTsKIH0KIAogQUxXQVlTX0lO
TElORSBkb3VibGUgdG9MZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0
dXJuIGxlbmd0aFZhbHVlLnRvTGVuZ3RoKGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDUz
MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsOCArMTI2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBoYXNJbnN0YW5jZQogCiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0dXJlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCiB7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVu
Y3Rpb24tPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRKU0Z1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnVuY3Rpb24pOwogCkBAIC0xNTgsNiArMTU5LDcg
QEAgaW5saW5lIFN0cnVjdHVyZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdAogCiBKU0JvdW5kRnVu
Y3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpT
VmFsdWUgYm91bmRUaGlzLCBKU0FycmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29u
c3RydWN0VHlwZSA9IEpTQzo6Z2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3Ry
dWN0RGF0YSk7CiAgICAgYm9vbCBjYW5Db25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0
cnVjdFR5cGU6Ok5vbmU7CkBAIC0xNzAsNyArMTcyLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZQogICAgICAgICBjYW5Db25zdHJ1Y3QgPyAoc2xvd0Nhc2UgPyBi
b3VuZEZ1bmN0aW9uQ29uc3RydWN0IDogYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3Qp
IDogY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsCiAgICAgICAgIG5hbWUpOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSh2bSwgZXhlYywg
Z2xvYmFsT2JqZWN0LCB0YXJnZXRGdW5jdGlvbik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhp
cywgYm91bmRBcmdzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcg
QEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAK
ICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAgICAgCiAgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSA9IHN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKQEAgLTM3OCwxMSArMzc4LDExIEBAIEpT
U3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc0Nl
bGwoKSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQ
cmVmZXJTdHJpbmcpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIEFT
U0VSVCghdmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0Miw3ICs2NDIsNyBAQCBpbmxpbmUgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJl
CiAgICAgfQogCiAgICAgU3RyaW5nSW1wbCogaGludFN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+
KHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
Tm9QcmVmZXJlbmNlOwogCiAgICAgaWYgKFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1bHQi
KSkKQEAgLTc4NCw4ICs3ODQsOSBAQCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0
X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZ
U19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24o
Ym9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9
IGdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQs
IHNsb3QpOwogfQpAQCAtODk3LDYgKzg5OCw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFs
KEV4ZWNTdGF0ZSogZXgKIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNl
SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBkbyB7CiAgICAgICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVy
KCkpCiAgICAgICAgICAgICByZXR1cm4gdjEuYXNOdW1iZXIoKSA9PSB2Mi5hc051bWJlcigpOwpA
QCAtOTI0LDcgKzkyNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dD
YXMKICAgICAgICAgICAgIGlmICh2Mi5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biB2MSA9PSB2MjsKICAgICAgICAgICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVj
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgdjEgPSBwMTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkg
JiYgdjIuaXNJbnQzMigpKQpAQCAtOTM0LDcgKzkzNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U1ZhbHVlOjplcXVhbFNsb3dDYXMKIAogICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB2MiA9IHAyOwogICAgICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MywxNCArMTMzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpIikpOwogICAgIAog
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJ
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAg
IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwog
ICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsK
ICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTE4MSw3ICsxODEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFz
dCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkiKSk7CiAgICAgCiAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSk7CkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBz
ZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9IHU7CiAKICAgICB1LnZhbHVlID0gdG9OYXRp
dmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIAogICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxl
bWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1l
bnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0
bGVFbmRpYW4gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTAs
NiArNTkwLDkgQEAgU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIAogCiB2
b2lkIEpTRnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBUaGUgIm5hbWUiIHByb3BlcnR5IG1heSBo
YXZlIGJlZW4gYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHByb3BlcnR5IGxpc3Qg
aW4gYW4KICAgICAvLyBvYmplY3QgbGl0ZXJhbCAoYW5kIHRoZXJlZm9yZSByZWlmaWVkKS4KICAg
ICBpZiAoaGFzUmVpZmllZE5hbWUoKSkKQEAgLTYwNSwxMiArNjA4LDExIEBAIHZvaWQgSlNGdW5j
dGlvbjo6c2V0RnVuY3Rpb25OYW1lKEV4ZWNTdGEKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bmFtZSA9IG1ha2VTdHJpbmcoJ1snLCBTdHJpbmcodWlkKSwgJ10nKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2
YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5TmFtZShleGVjLCBuYW1lKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXcuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcg
KzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgICAgIHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2
ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1ZhbHVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAko
cmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
ODksMTQgKzg5LDE0IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIK
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9yYWdlOwogICAgIHdoaWxlICh0cnVlKSB7CiAg
ICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlm
IChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTVmFsdWUg
bmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBzdG9yYWdlLmFwcGVuZChu
ZXh0SXRlbSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVj
dEdlbmVyaWNUeXBlZEFyCiAKICAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3Jl
YXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIHN0b3JhZ2Uuc2l6ZSgpKTsKICAgICBp
ZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsr
aSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChp
KSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIsNyArMTYyLDcgQEAgaW5saW5lIEpTT2JqZWN0
KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAgICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAg
ICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAgICAvLyBXZSB3b3Vs
ZCBsaWtlIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFzIGl0IGlzIHBhaW5mdWxseSBzbG93LiBGb3J0
dW5hdGVseSwgdW5sZXNzCkBAIC0xODMsMjEgKzE4MywyMSBAQCBpbmxpbmUgSlNPYmplY3QqIGNv
bnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmd1
bWVudHM7CiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMs
IGl0ZXJhdG9yRnVuYywgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdGcm9tSXRlcmF0b3I8Vmlld0NsYXNzPihleGVj
LCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGVu
Z3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAwIDogbGVuZ3RoU2xvdC5nZXRWYWx1ZShleGVj
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogCiAgICAgICAgIAogICAgICAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3Jl
YXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiAgICAgICAgIGlmICgh
cmVzdWx0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjM1LDcgKzIzNSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBm
dW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0
dXJlKiBwYXJlbnRTdHJ1Y3R1cmUgPSBmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJy
YXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIHBhcmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIHNpemVf
dCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKQEAgLTI1MiwxMiArMjUyLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1
bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9wdDsKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5
QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYgYXJnQ291bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvVUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZl
clZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAg
LTYyLDE0ICs2MiwxNCBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1
CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVzID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3ltYm9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3BlY2llcy5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVjdG9yKCk7CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25z
dHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlm
IChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZp
ZXcqPihyZXN1bHQpKSB7CkBAIC0xNDcsNyArMTQ3LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5
V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAv
LyAyMi4yLjMuNQpAQCAtMTU3LDEzICsxNTYsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBsZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgo
KTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAg
ICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEs
IGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIGxv
bmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDIsIGxl
bmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAK
ICAgICBpZiAoZmluYWwgPCBmcm9tKQpAQCAtMTgzLDcgKzE4Miw2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4K
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9G
dW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlz
VmFsdWUoKSk7CkBAIC0xOTgsNyArMTk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZQogICAgIEpTVmFsdWUgdmFsdWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgw
KTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkK
QEAgLTIwOSw3ICsyMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNU
eXBlCiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09i
amVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlmIChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRv
dWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0yMzAsNyArMjI4LDYgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNz
PgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAvLyAyMi4yLjMuMTMKQEAgLTI0NSw3ICsyNDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+
YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZy
b21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTI1
NSw3ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAg
ICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xhc3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1
ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKLSAgICBBU1NFUlQo
IXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBp
bmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAtMjY5LDcgKzI2Niw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganNDYXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKQEAgLTI4MiwxMSArMjc4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVu
Z3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVjLCBzZXBhcmF0b3Is
IGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgam9pbmVyLmFwcGVuZCgqZXhlYywgdGhpc09i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVj
KSk7CkBAIC0yOTksNyArMjk1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5nKiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0
b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRl
cmVkKCkpCkBAIC0zMTAsNyArMzA2LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4z
LjE2CkBAIC0zMzgsNyArMzMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZQogICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURv
dWJsZSk7CiAgICAgfQogCi0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0zNDksNyAr
MzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7CiAKICAgICB0eXBlbmFtZSBW
aWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7
Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAK
ICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRleCkgewpAQCAtNDMyLDcgKzQyNyw2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1l
IFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIC8vIDIyLjIuMy4yNgpAQCAtNDQ1LDEwICs0MzksMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGgg
PSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVu
Z3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAo
dGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtNDY3LDcgKzQ2MSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFz
czo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3Jl
YXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAg
IEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkpOwpAQCAtNTE4LDcgKzUxMiw2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZp
ZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShWTSZ2bSwgRXhlY1N0YXRlKiBleGVjKQogewot
Ly8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMjMKQEAgLTUzNyw5ICs1MzAsOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgQVNTRVJUKGV4ZWMtPmFy
Z3VtZW50KDApLmlzTnVtYmVyKCkpOwogICAgIEFTU0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1Vu
ZGVmaW5lZCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDEpLmlzTnVtYmVyKCkpOwogICAgIHVuc2lnbmVk
IGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlz
TGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB1bnNpZ25lZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZy
b21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5ndGgsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VS
VCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAg
ICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKQEAgLTU3Miw3
ICs1NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAg
YXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3MsICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVj
dG9yIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgx
NSwxMiArODE1LDE0IEBAIGlubGluZSBKU0dsb2JhbE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMK
IAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBB
cnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0gMCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1Zh
bHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsK
ICAgICBpZiAoaW5pdGlhbExlbmd0aCA+PSBNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05f
TEVOR1RIKQogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBBcnJheVdpdGhBcnJheVN0b3Jh
Z2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAgICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmls
ZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3Io
cHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgaW5pdGlhbExl
bmd0aCkpOwpAQCAtODMzLDggKzgzNSwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1w
dHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0g
SlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRp
b24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RB
bGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFs
dWVzKSk7CiB9CkBAIC04NDYsOCArODUwLDEwIEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RB
cnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0
ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpT
VmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJv
ZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4
ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KQEAgLTg1OSw4ICs4NjUsMTAgQEAg
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFs
bG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQg
PSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2Nh
dGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFz
dEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhl
Yywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAg
IFN0cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAo
cy5pczhCaXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNw
cAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNK
b2IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw5IEBAIFJlZjxNaWNyb3Rhc2s+IGNy
ZWF0ZUpTSm9iKFZNJiB2bSwgSlNWYWwKIAogdm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBoYW5kbGVyQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShtX2pvYi5nZXQo
KSwgaGFuZGxlckNhbGxEYXRhKTsKICAgICBBU1NFUlQoaGFuZGxlckNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKTsKQEAgLTcyLDcgKzc1LDcgQEAgdm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4
ZWNTdGF0ZSogZXhlYwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwLCBsZW5ndGggPSBtX2Fy
Z3VtZW50cy0+bGVuZ3RoKCk7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KQogICAgICAgICBoYW5k
bGVyQXJndW1lbnRzLmFwcGVuZChtX2FyZ3VtZW50cy0+SlNBcnJheTo6Z2V0KGV4ZWMsIGluZGV4
KSk7CiAgICAgcHJvZmlsZWRDYWxsKGV4ZWMsIFByb2ZpbGluZ1JlYXNvbjo6TWljcm90YXNrLCBt
X2pvYi5nZXQoKSwgaGFuZGxlckNhbGxUeXBlLCBoYW5kbGVyQ2FsbERhdGEsIGpzVW5kZWZpbmVk
KCksIGhhbmRsZXJBcmd1bWVudHMpOwotICAgIGV4ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52
aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcg
Kzc4LDE5IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9ubWVudDo6dmlzaXRDaGlsZHJlbigKIAogYm9v
bCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KGNlbGwpOwogICAgIEpTTW9kdWxlUmVj
b3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+
cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVyOjpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFt
ZS51aWQoKSkpOwogICAgIGlmIChyZXNvbHV0aW9uLnR5cGUgPT0gSlNNb2R1bGVSZWNvcmQ6OlJl
c29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAgICAgICAgIC8vIFdoZW4gcmVzb2x2ZUltcG9y
dCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhlIGltcG9ydGVkIG1vZHVsZSBlbnZpcm9ubWVu
dCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAgICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGlt
cG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNvbHV0aW9uLm1vZHVsZVJlY29yZC0+bW9kdWxl
RW52aXJvbm1lbnQoKTsKICAgICAgICAgUHJvcGVydHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRl
ZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0
KTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52
aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAg
ICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxl
KHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMs
IHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVjdFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAgQVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVl
KCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gcmVkaXJlY3RTbG90LmdldFZhbHVlKGV4ZWMs
IHJlc29sdXRpb24ubG9jYWxOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgcmVkaXJlY3RTbG90LmF0dHJpYnV0
ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lv
biAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxMyArMTQ5LDE1IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2gKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRj
aF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMsIGtleSksICJcbiIpOwogCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIGlmIChnbG9iYWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQogICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmpl
Y3QsIGV4ZWMsIHRoaXMsIGtleSwgaW5pdGlhdG9yKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVj
LCBnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+
dmFsdWUoKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgZGVmZXJy
ZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnBy
b21pc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q6OkpTTW9kdWxlTmFtZXNwYQogdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkLCBjb25zdCBJZGVudGlmaWVyU2V0JiBleHBv
cnRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBB
U1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKQEAgLTgxLDcgKzgyLDcgQEAgdm9pZCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1v
YmplY3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFs
Lm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXBy
ZXZlbnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0
aGlzLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogfQogCiB2b2lkIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTEzNiw3ICsxMzcsNyBA
QCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wCiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKIAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdHJhbXBv
bGluZVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwogCiAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBmaWxsZWQgd2l0aCBURFogdmFsdWUsIHRo
cm93IGEgcmVmZXJlbmNlIGVycm9yLgogICAgICAgICBpZiAoIXZhbHVlKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZp
c2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJl
Y29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3OSw3ICs3NzksNyBAQCB2b2lkIEpTTW9kdWxl
UmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAgICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBv
cnRlZE1vZHVsZSA9IGhvc3RSZXNvbHZlSW1wb3J0ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnku
bW9kdWxlUmVxdWVzdCk7CiAgICAgICAgIGlmIChpbXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkp
IHsKICAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3Qg
PSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBib29s
IHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNo
cG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIGltcG9ydEVudHJ5LmxvY2FsTmFtZSwg
bmFtZXNwYWNlT2JqZWN0LCAvKiBzaG91bGRUaHJvd1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8q
IGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUsIHB1dFJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyMCwxNiArMjIwLDE4IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihF
eGVjU3RhdGUqIGV4ZWMKICAgICAsIG1fcmVwbGFjZXJDYWxsVHlwZShDYWxsVHlwZTo6Tm9uZSkK
ICAgICAsIG1fZ2FwKGdhcChleGVjLCBzcGFjZS5nZXQoKSkpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
aWYgKCFtX3JlcGxhY2VyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICht
X3JlcGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRzKEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAg
ICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVlOwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+
IGFycmF5ID0gbV9yZXBsYWNlci5hc09iamVjdCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJ
bnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgbmFt
ZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBpZiAobmFtZS5pc09iamVjdCgpKSB7
CkBAIC0yNDgsMzYgKzI1MCwzOSBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRl
KiBleGVjCiAKIExvY2FsPFVua25vd24+IFN0cmluZ2lmaWVyOjpzdHJpbmdpZnkoSGFuZGxlPFVu
a25vd24+IHZhbHVlKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgp
KTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4g
TG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsKIAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0
aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1w
dHlJZGVudGlmaWVyKTsKLSAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIG1fZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlkZW50aWZpZXIsIHZhbHVlLmdldCgpKTsKKyAg
ICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5hbWUodm0ucHJvcGVy
dHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJp
bmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBwZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQs
IHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJvcGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNj
ZWVkZWQpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5k
ZWZpbmVkKCkpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc051bGwoKSk7CisgICAgICAgIHJldHVy
biBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmluZWQoKSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051
bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1N0cmlu
ZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+
KHZtLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9KU09OKEpTVmFsdWUgdmFsdWUsIGNvbnN0IFBy
b3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlOYW1lKQogewotICAgIEFTU0VSVCgh
bV9leGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biB2YWx1ZTsKICAgICAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwot
ICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qs
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIGlmICghb2JqZWN0
LT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3Qp
KQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAgICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0g
c2xvdC5nZXRWYWx1ZShtX2V4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSlNPTik7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICByZXR1cm4gdG9KU09OSW1wbCh2YWx1ZSwgdG9K
U09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9CkBAIC0zMDEsNyArMzA2LDcgQEAgU3RyaW5n
aWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogCiAgICAgLy8gQ2FsbCB0aGUgdG9K
U09OIGZ1bmN0aW9uLgogICAgIHZhbHVlID0gdG9KU09OKHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgLy8gQ2FsbCB0aGUg
cmVwbGFjZXIgZnVuY3Rpb24uCkBAIC0zMTAsNyArMzE1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmlu
Z2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAgICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUu
dmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFs
dWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5nZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBt
X3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJncyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAgfQogCkBAIC0zMjQsNyArMzI5LDcgQEAg
U3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogCiAgICAgdmFsdWUgPSB1
bndyYXBCb3hlZFByaW1pdGl2ZShtX2V4ZWMsIHZhbHVlKTsKIAotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7CkBAIC0z
NzcsMTQgKzM4MiwxNCBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVy
CiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1wdHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHko
KTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChIb2xkZXIodm0sIG1fZXhlYywgb2JqZWN0KSk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIGlm
ICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRl
ZDsKIAogICAgIGRvIHsKICAgICAgICAgd2hpbGUgKG1faG9sZGVyU3RhY2subGFzdCgpLmFwcGVu
ZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikpIHsKLSAgICAgICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKICAgICAgICAgfQogICAgICAg
ICBtX2hvbGRlclN0YWNrLnJlbW92ZUxhc3QoKTsKQEAgLTQzNiw2ICs0NDEsOCBAQCBib29sIFN0
cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgQVNTRVJUKG1faW5kZXggPD0g
bV9zaXplKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIC8vIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZS4KICAgICBp
ZiAoIW1faW5kZXgpIHsKQEAgLTQ0NCw3ICs0NTEsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xk
ZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAg
ICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29iamVjdC5nZXQoKSktPmxlbmd0aCgpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAg
ICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdb
Jyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RyaW5naWZpZXIubV91c2lu
Z0FycmF5UmVwbGFjZXIpCkBAIC00NTIsNyArNDU5LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9s
ZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAgICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5nZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9iamVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURh
dGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Niw3ICs0OTMsNyBAQCBib29sIFN0cmluZ2lmaWVy
OjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGluZGV4KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtNTA0LDcg
KzUxMSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAg
ICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2Jq
ZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVpbGRlci5sZW5ndGgoKTsKQEAgLTY0MCw3ICs2
NDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGluZGV4KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC02NTgsNyArNjY1LDcgQEAgTkVW
RVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAg
ICBhcnJheS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4
ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgp
LCBmaWx0ZXJlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1l
bWJlcjsKQEAgLTY3NSw3ICs2ODIsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6Ondh
bGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQoUHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0
YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpA
QCAtNjk4LDcgKzcwNSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1Zh
bHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICAg
ICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBiZSBtb2RpZmllZCBieSB0aGUgcmV2aXZlciBm
dW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJvdwotICAgICAgICAgICAgICAgIGlmIChtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTcxNyw3ICs3MjQsNyBA
QCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBtX2V4
ZWMsIHByb3ApOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0LCBtX2V4ZWMsIHByb3AsIGZpbHRlcmVkVmFs
dWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgICAgICAgICBpbmRleFN0YWNr
Lmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdvdG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsK
QEAgLTc1NCw3ICs3NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90
b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSlNP
Ti5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIikpKTsKICAgICBKU1N0cmlu
Zzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmco
ZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSB1bmZpbHRlcmVkOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MzYsNiArNDM2LDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBl
eGVjLCBKUwogICAgIC8vIDMuIEVTNiBQcm94eS4KIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0
KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBvd25EZXNjcmlwdG9y
OwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDcsMTMgKzQ0OCwxMyBAQCBib29sIG9yZGluYXJ5
U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBv
d25EZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oUCkuCiAgICAgICAgIGJvb2wgb3duRGVz
Y3JpcHRvckZvdW5kID0gY3VycmVudC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgb3duRGVzY3JpcHRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQp
IHsKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1hIExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJv
dG90eXBlT2ZdXSgpLgogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5n
ZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMt
YiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4KQEAgLTQ4NSw3ICs0ODYsNyBAQCBib29sIG9y
ZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNl
aXZlck9iamVjdCA9IGFzT2JqZWN0KHJlY2VpdmVyKTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JG
b3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJv
cGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIDkuMS45LjEtNC1kIElmIGV4
aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xMzYxLDcgKzEzNjIs
NyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUo
ZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghaXNFeHRlbnNp
YmxlKSB7CkBAIC0xNjIxLDcgKzE2MjIsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVl
IGNhbGxUb1ByaW1pCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAoZnVu
Y3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtMTY0OSw3ICsxNjUwLDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAgQVNTRVJUKCFyZXN1bHQuaXNHZXR0ZXJTZXR0
ZXIoKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICBp
ZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBtb2RlID09IFR5cGVIaW50TW9k
ZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgpIDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLnRvUHJpbWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIp
KTsKQEAgLTE2ODcsNyArMTY4OCw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9Qcmlt
aXRpdmUoRXgKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
IAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJO
byBkZWZhdWx0IHZhbHVlIikpOwogfQpAQCAtMTc4Nyw3ICsxNzg4LDcgQEAgYm9vbCBKU09iamVj
dDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RW
YWx1ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFvYmplY3RWYWx1
ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTgwOSwxMiArMTgx
MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByaXZhCiB2b2lkIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC0xODI2LDEw
ICsxODI4LDEwIEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1l
cywgbW9kZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKG5l
eHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTkyNywxNiArMTkyOSwy
MCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtCiAKIGRvdWJsZSBK
U09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29v
biBpbiBOb2Rlcy5jcHAKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSAvLyBz
aG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9kZXMuY3BwCiAgICAgICAgIHJldHVybiAwLjA7
CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJlcihleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpT
T2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNFbXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1
cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwogfQpAQCAtMzExMywxNSArMzExOSwxOCBAQCBi
b29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoCiAKIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wg
dGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZtICA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBUcmFjayBvbiB0
aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRlZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJy
ZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBkZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMg
d2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAogICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBj
aGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBkZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZp
Z3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxldGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRl
ZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbWFrZSB0aGlzIHdvcmsuCi0gICAg
Vk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKGV4ZWMtPnZtKCksIFZNOjpEZWxldGVQ
cm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSk7CisgICAgVk06OkRlbGV0ZVByb3BlcnR5
TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1
cmFibGUpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBjdXJyZW50OwogICAgIGJvb2wgaXNDdXJy
ZW50RGVmaW5lZCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnQpOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgdGhpcywg
cHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRlc2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQs
IGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0KQEAgLTMyMjEsMTIgKzMyMzAsMTMgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVydHlOYW1lcwogdm9pZCBKU09iamVjdDo6Z2V0
R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwg
SlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlw
ZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG5l
eHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzIzOCwxMCArMzI0OCwxMCBA
QCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyhKCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJv
dG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTMyNTcsNyArMzI2Nyw3IEBAIEpT
VmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVjU3RhdGUqIGUKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVj
LCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgaWYgKCFtZXRob2QuaXNDZWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTYgKzM5LDE2IEBAIHZvaWQgY3JlYXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0
YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1ZT4gcmVzdWx0OwogICAgIEpTVmFsdWUgbGVu
Z3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJs
ZSA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNEb3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91
YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3VibGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGgg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3RoQXNEb3VibGUpOwogICAgIGZvciAodWludDY0
X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICAgICBKU1ZhbHVl
IG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhlYywgaW5kZXgpOwotICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0g
cnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKQEAgLTk1LDggKzk1LDEwIEBAIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNr
V2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxD
YWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJh
Y2spIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIHJldHVybiBj
YWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC0xMDQsNiArMTA2LDcgQEAgQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYQogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJ
RFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1
bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0UHJvdG90eXBlOwpAQCAtMTExLDE0ICsxMTQs
MTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBT
dHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVj
dHVyZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAg
ICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFBy
b3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBl
KCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAg
ICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0s
IGV4ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKQEAgLTEz
Myw2ICsxMzYsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAg
ICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
YXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVG
dW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsK
QEAgLTE0NCw3ICsxNDgsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbklu
ZGV4CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5m
bygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwpAQCAtMTUyLDcgKzE1Niw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICAgICAgICAgIHByb3RvdHlw
ZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVjdCgpKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1
cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVj
LT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5wcm9taXNlU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNQ
cm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUp
OwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhlYywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1
bWVudCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCBwcml2YXRlOgogaW5saW5lIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBiYXNlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWludDMyX3QgaW5kZXhlZExl
bmd0aCA9IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBi
YXNlKTsKIApAQCAtMTE5LDE4ICsxMjAsMTggQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogcHJvcGVydAogCiAgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1
aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlM
ZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVBy
b3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkp
OwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGll
cyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQg
cHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNvIGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBl
bnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxpbmRleGVkTGVuZ3RofCB0byAwLgogICAgICAg
ICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQ
cm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwxMCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0gcHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVj
LCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMs
IHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVudW1lcmF0b3IpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDAsMTYgKzIwMCwxOCBAQCBKU09iamVjdCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShK
U1Njb3BlCiAvLyBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNj
b3BhYmxlIGJlY29tZXMgZmFsc2UuCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoc2NvcGUtPnR5
cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnVuc2NvcGFibGVzU3ltYm9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCF1bnNjb3BhYmxlcy5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgSlNWYWx1ZSBibG9ja2VkID0ganNDYXN0PEpTT2JqZWN0Kj4odW5zY29wYWJsZXMp
LT5nZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIHJldHVybiBibG9ja2VkLnRvQm9vbGVhbihleGVjKTsKQEAgLTIxNyw2ICsyMTks
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0CiAKIEpTT2JqZWN0
KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTY29wZUNoYWlu
SXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9
IHNjb3BlLT5iZWdpbigpOwogICAgIHdoaWxlICgxKSB7CkBAIC0yMzksNyArMjQzLDcgQEAgSlNP
YmplY3QqIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0YXRlKiBleAogICAgICAgICBpZiAob2JqZWN0
LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsKICAgICAgICAgICAgIGlmICghaXNVbnNjb3Bh
YmxlKGV4ZWMsIHNjb3BlLCBvYmplY3QsIGlkZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
b2JqZWN0OwotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZXhlYy0+aGFkRXhjZXB0
aW9uKCksICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3Bh
YmxlIGJlY29tZXMgZmFsc2UiKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5V
U0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRp
b24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CiAg
ICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDkgKzc0LDExIEBAIHZv
aWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25zdCBKU0NlbGwKIAogYm9vbCBKU1N0cmluZzo6
ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBvdGhlcikgY29uc3QKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBTdHJpbmcgc3RyMSA9IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBz
dHIyID0gb3RoZXItPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9p
bmVyLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAg
SlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihFeGVjU3RhdGUmIAogICAgIEFTU0VSVChtX3N0
cmluZ3Muc2l6ZSgpIDw9IG1fc3RyaW5ncy5jYXBhY2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFsZW5ndGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3Miw2ICs1NzIsOCBAQCBUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFy
VHlwZT46OkxleGVyCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVy
YWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJzZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7Cisg
ICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBzdGF0ZSA9IGluaXRpYWxTdGF0ZTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFjazsKICAgICBKU1ZhbHVlIGxhc3RWYWx1ZTsK
QEAgLTU4Myw3ICs1ODUsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJz
ZShQCiAgICAgICAgICAgICBzdGFydFBhcnNlQXJyYXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0
UGFyc2VBcnJheTogewogICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShtX2V4ZWMsIDApOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVuZChhcnJheSk7CiAgICAgICAgICAgICB9CkBA
IC02ODEsNyArNjgzLDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2Uo
UAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09i
amVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAgICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBp
ZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9k
ZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09IG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51
bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAgICAgICBpZiAobV9tb2RlICE9IFN0cmljdEpT
T04gJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFVuZGVyc2NvcmVQcm90by5hZGQob2JqZWN0KS5p
c05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcnNlRXJyb3JNZXNzYWdl
ID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8gcmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5
Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAtNjkzLDcg
KzY5NSw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgo
aWRlbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleCht
X2V4ZWMsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0o
KSwgaWRlbnQsIGxhc3RWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhlci5jdXJyZW50VG9rZW4oKS0+dHlwZSA9PSBU
b2tDb21tYSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJn
ZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNN
YXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7
CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0
aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBmb3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVy
YWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG5leHRJdGVtKSB7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYg
KCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBKU1Zh
bHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwot
ICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0
aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsOCArMTYyLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2x6MzIoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50
MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkp
KTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
SHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVuc2lnbmVkIGFyZ3ND
b3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUgbWF4ID0gMDsKICAgICBW
ZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShh
cmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkg
ewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChp
KS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgICAgICBpZiAoc3RkOjppc2luZihhcmdz
W2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIo
K3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOwpAQCAtMjkyLDggKzI5
NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3QgbGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQgPSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01v
ZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9k
dWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVy
dHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VD
b2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVsZUtleS5pbXBsKCkpOwpAQCAtMTQyLDEyICsx
NDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1v
ZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3Jk
KiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJn
dW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cikpOwogCiAgICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBtb2R1bGVS
ZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHNpemVfdCBpID0g
MDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVsZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygp
KQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxl
TG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5
cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
MTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUK
ICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtl
eSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBA
IHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHIKIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVz
c2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5u
ZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUo
KSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKGVycm9yU3RydWN0dXJlKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0
cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDkgKzg1LDExIEBAIHZv
aWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFYKIC8vIEVDTUEgMTUuNy4xCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0g
ZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1i
ZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBO
dW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0
CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9iamVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9i
amVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgbmV3VGFyZ2V0IGNvbmRpdGlv
biBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQgb2YgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAvLyBTaW5jZSBpZiB3ZSBmb3VuZCB0aGlzIGNv
bmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3QgZmFsbCBpbnRvIHRoZSB0eXBlIGNvbnZlcnNp
b24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYgKG5ld1RhcmdldCAmJiBuZXdUYXJnZXQgIT0g
b2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAgLy8gYS4gUmV0dXJuID8gT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAiJU9iamVjdFByb3RvdHlwZSUiKS4KICAgICAg
ICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+b2JqZWN0U3Ry
dWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAgICB9CkBAIC0yMTEsOCArMjEzLDEwIEBAIEpT
VmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZigKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmpl
Y3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAtMjMxLDcg
KzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdFZhbHVlKTsKIAogICAgIGlmICghY2hlY2tQ
cm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywgb2JqZWN0KSkgewpAQCAtMjQxLDE2ICsyNDUs
MTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiAgICAgYm9v
bCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUg
PSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJ
ZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCB2bS5leGNlcHRp
b24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAgIEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90
eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwogfQogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVj
dG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
amVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7CkBAIC0yNjEsMTkgKzI2NywyMSBA
QCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAKIEpTVmFsdWUgb2Jq
ZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBw
cm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVk
ZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0b3JzID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiBwcm9wZXJ0aWVzKSB7CiAgICAg
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAgICBib29sIGRpZEdldERl
c2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCkBAIC0y
ODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAog
CiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGRlc2NyaXB0b3JzKTsKICAgICAgICAgZGVz
Y3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1heUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1l
LCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAg
ICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMsMTkgKzMwMSwyMyBAQCBKU1ZhbHVlIG9iamVj
dENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVu
dCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFy
Z3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29u
c3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAt
MzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJv
cGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogfQpAQCAtMzIyLDggKzMzNiwxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBl
bnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2Jq
ZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0NywyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4K
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+
YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3du
UHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09i
amVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhl
Yywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpAQCAtMzYwLDQwICszODAsNDAgQEAgYm9vbCB0
b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogCiAgICAgaWYgKGRlc2NyaXB0aW9u
LT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkpIHsK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51bWVyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSk7Ci0gICAgICAgIGlmICh2
bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFz
UHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
ZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpOwot
ICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0
V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQpKSB7CiAgICAgICAgIEpTVmFsdWUgZ2V0ID0g
ZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0KTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWdldC5pc1Vu
ZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQwMywxMiAr
NDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkZXNjLnNldEdldHRlcihnZXQpOwotICAgIH0g
ZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlv
bi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCkpIHsKICAgICAg
ICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxE
YXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkZXNjLnNldFNldHRl
cihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQpAQCAtNDQ1LDcgKzQ2NSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4g
b25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikpOwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09i
amVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5h
cmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBl
eGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7CkBAIC00NTMsNyArNDczLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNj
cmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29yKSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5k
ZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1
ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2Jq
KTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm9wZXJ0aWVzKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgYXNPYmplY3QocHJvcGVydGllcyktPm1l
dGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3Bl
cnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywg
RW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBW
ZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVy
dGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvcCA9IHByb3BlcnRpZXMtPmdldChleGVj
LCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkK
QEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNT
dGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsK
ICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1ByaXZhdGVOYW1lKHByb3BlcnR5
TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHko
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBq
c051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTUzMSw2ICs1NTQsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJu
IE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5p
c09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwog
CiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2Vh
bChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0LT5zZWFsKHZtKTsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVk
IG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0
aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmpl
Y3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
ZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhl
YywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6Oklu
Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVB
cnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAvLyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxl
XV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAg
ZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBjLiBDYWxsIHRoZSBbW0Rl
ZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQg
dHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0o
KSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0
cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0KIAog
ICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0
byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0
ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVj
KTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTU3
NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QK
IAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc0pTRmluYWxPYmplY3Qo
b2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkp
IHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+
ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKICAgICAvLyAyLiBG
b3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFy
cmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwxNCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3Ry
dWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8vIGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVd
XSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIHRvIGZhbHNlLgogICAgICAgICBk
ZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAgICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVm
aW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0
cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgp
KS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRy
dWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0
aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3Qs
IGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2NDYsMTQgQEAgSlNPYmplY3QqIG9iamVjdENv
bnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUg
b2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBhc09iamVjdChvYmopKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTYzOSw2ICs2NzAsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVl
LgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNP
YmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAog
ICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZChleGVjLT52bSgpKSkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkp
OwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAog
ICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlv
bk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1v
ZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVy
dGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBp
dGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02NzAs
MTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAg
ICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMg
ZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAgLy8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFs
c2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVu
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykg
aXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNjg0LDEyICs3MjEsMTIgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3Qp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJv
emVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBv
d24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGll
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0
LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNs
dWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlO
YW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSArNzQ2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0g
aW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxzZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAv
LyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9i
amVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2Jq
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAgICAgYm9vbCBp
c0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5zaWJsZSkpOwogfQpAQCAtNzM1LDEzICs3NzQs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogSlNBcnJheSog
b3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBEb250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRF
bnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVNb2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRpZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFtZU1vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw5IEBAIGlubGluZSBKU09iamVjdCog
Y29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0
RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogZGVzY3Jp
cHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50
aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhp
c09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsK
ICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSArMTE1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsK
IAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhl
Yy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUg
KHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVj
dCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB9CiB9CkBA
IC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVu
dCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xNjAsNyArMTY1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE2OSw3ICsxNzQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0
dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgw
KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVj
LT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90
IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93
blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0
eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsyNTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Q
cm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9
IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUs
IGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpOwpAQCAtMjU0LDkgKzI2OCwx
MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAvLyAxNS4yLjQu
MyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nKCkKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFsdWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHBhc3Npbmcg
InRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBAIC0yOTIsNyArMzA5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBb
Jl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9
IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJpbmdUYWcuaXNTdHJpbmcoKSkgewogICAgICAg
ICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwpAQCAt
MzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8K
ICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0YWcgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRoaXNPYmplY3QsIGV4ZWMpOwotICAgICAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICBTdHJpbmcgbmV3U3Ry
aW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2JqZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsK
ICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDExICs0NCwxMiBAQCBO
RVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGCiB7CiAgICAgLy8gZXhjZXB0
aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVlKCkKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICBKU1ZhbHVlIHAyID0gdjIu
dG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJpbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNj
cmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0
eURlc2NyaXB0b3I6OnNldFVuZGVmaW5lZCgpCiBHZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3Jp
cHRvcjo6c2xvd0dldHRlclNldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwogICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmIChtX2dldHRlciAmJiAhbV9nZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIodm0sIGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2Jq
ZWN0Kj4obV9nZXR0ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMjMgKzU2LDIzIEBAIFByb3h5Q29uc3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3Io
Vk0mIHYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJs
ZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRD
b3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiUHJveHkucmV2b2NhYmxlIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3
byBhcmd1bWVudHM6IHRoZSB0YXJnZXQgYW5kIHRoZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJn
ZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAg
UHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFuZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm94eVJldm9rZSogcmV2b2tlID0g
UHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94
eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwg
InByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlk
ZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tlLCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIFByb3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYg
dm0sIFN0cnVjdHUKIFN0cmluZyBQcm94eU9iamVjdDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQ
cm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29uc3QgUHJveHlPYmplY3QqPihvYmplY3QpOwog
ICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBjb25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJv
eHktPnRhcmdldCgpOwogICAgICAgICBpZiAoaXNBcnJheShleGVjLCB0YXJnZXQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldC0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFt
ZSh0YXJnZXQsIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29uc3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpA
QCAtMTQ0LDcgKzE0NSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3Rh
dGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBK
U1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNh
bGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVy
dHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFu
ZGxlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTU1LDcgKzE1Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBl
cmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJU
b1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlO
YW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFs
dWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTY5LDcg
KzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIHJldHVybiB0cmFwUmVzdWx0OwpAQCAtMTc3LDggKzE3OCwxMCBAQCBzdGF0aWMgSlNW
YWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZv
cm1HZXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3Jt
UHJveHlHZXQoZXhlYywgdGhpcywgc2xvdC50aGlzVmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRy
aWJ1dGVzID0gMDsKICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCBy
ZXN1bHQpOwpAQCAtMjEyLDcgKzIxNSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRl
cm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXIt
PmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAi
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5
RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxh
YmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93
blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4g
cGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgpOwpAQCAtMjIxLDcgKzIyNCw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5k
KHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNW
YWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsK
ICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNV
bmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09iamVjdCgpKSB7CkBAIC0yMzEsNyArMjM0LDcg
QEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVy
dHlEZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRl
ZmluZWQoKSkgewpAQCAtMjQ0LDcgKzI0Nyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1J
bnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklYTUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0
YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRvbid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxl
bWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQcm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4
dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IENvbWUgdXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJy
b3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVjYXVzZQpAQCAtMjU4LDExICsyNjEsMTEgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wg
aXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFz
RGVzY3JpcHRvcjsKICAgICB0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0
cmFwUmVzdWx0QXNEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxzZTsKICAgICBib29sIHZhbGlkID0gdmFs
aWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5h
bWUsIGlzRXh0ZW5zaWJsZSwKQEAgLTI4MSw3ICsyODQsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBpZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAgICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0
dGVyID0gdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5zbG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Qu
c2V0R2V0dGVyU2xvdCh0aGlzLCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwg
Z2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNE
YXRhRGVzY3JpcHRvcigpICYmICF0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0
eSgpKQpAQCAtMzIwLDcgKzMyMyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9w
ZXJ0eShFeGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsK
ICAgICBKU1ZhbHVlIGhhc01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0z
MjksMTcgKzMzMiwxNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhl
CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRl
bnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBw
cm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVj
LCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNC
b29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkgewogICAgICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3Jp
cHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaXNQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7
CiAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Nyw3
ICszNTAsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9v
bCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVl
JyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eSIpKTsKQEAgLTQyMCw3ICs0MjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJm
b3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJh
bCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxl
IikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRh
cmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkK
QEAgLTQzMiwxMCArNDM1LDEwIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0
YXRlKiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRN
ZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRy
YXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC00NzMsOCArNDc2LDkgQEAgYm9vbCBQcm94eU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
YwogYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRleENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0g
KCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDgs
NyArNTEyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUg
YXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBl
LCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5IiksIEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9w
ZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJnZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2Qu
aXNVbmRlZmluZWQoKSkgewpAQCAtNTE5LDcgKzUyMyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNv
bnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihu
dWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKQEAgLTU1OCw3ICs1NjIsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtl
SWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBBU0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHBy
b3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0
cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBAIC01NjksMTQgKzU3MywxNCBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSog
YXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRp
b25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAg
YXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5u
ZXdUYXJnZXQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1l
dGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlm
ICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3VsdCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29u
c3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9iamVjdCIpKTsKQEAgLTYxOSw3ICs2MjMsNyBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9w
ZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUs
IG1ha2VJZGVudGlmaWVyKHZtLCAiZGVsZXRlUHJvcGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVs
ZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxs
YWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0
KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2Qu
aXNVbmRlZmluZWQoKSkKQEAgLTYyOSwxMSArNjMzLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAg
YXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRy
YXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVByb3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRy
YXBSZXN1bHRBc0Jvb2wpCkBAIC02NDcsNyArNjUxLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybURlbGV0ZShFeGVjU3RhdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtNjkzLDcgKzY5Nyw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRl
bnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJwcmV2ZW50RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwo
IidwcmV2ZW50RXh0ZW5zaW9ucycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxk
IGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5z
aW9uc01ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAtNzAyLDE2ICs3MDYsMTYgQEAgYm9vbCBQcm94
eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNpbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9v
bGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0
YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAg
ICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5
J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJldHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRz
IHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsK
QEAgLTc0Niw3ICs3NTAsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxl
KEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAg
SlNWYWx1ZSBpc0V4dGVuc2libGVNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2Fs
bERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJ
SUxpdGVyYWwoIidpc0V4dGVuc2libGUnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtNzU2LDE1ICs3NjAs
MTUgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7
CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBpc0V4dGVuc2libGVNZXRob2Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJl
c3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGJvb2wgaXNUYXJnZXRFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVz
dWx0QXNCb29sICE9IGlzVGFyZ2V0RXh0ZW5zaWJsZSkgewpAQCAtODEzLDE0ICs4MTcsMTQgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogICAgIENhbGxEYXRhIGNh
bGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVy
dHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2
bS5wcm9wZXJ0eU5hbWVzLT5kZWZpbmVQcm9wZXJ0eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJv
cGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5
TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmlu
ZU93blByb3BlcnR5KCk7CiAKICAgICBKU09iamVjdCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0
cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3Vt
ZW50czsKQEAgLTgyOCwxMSArODMyLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZp
bmVPd25Qcm9wZXIKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNK
U1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3JpcHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVj
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNC
b29sKQpAQCAtODQwLDExICs4NDQsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmlu
ZU93blByb3BlcgogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAg
ICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0
YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRvRmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3Vy
YWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKTsKIApAQCAtOTAyLDcg
KzkwNiw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93
bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBl
LCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMiKSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgp
OwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkxMyw3ICs5MTcs
NyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsK
ICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBQcm9wZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVz
dWx0Lm1vZGUoKTsKQEAgLTk0MSw3ICs5NDUsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0T3duUHJvcGVydHlOCiAgICAgICAgICAgICByZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAg
ICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRvRXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hl
Y2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwoKSk7CkBAIC05NTAsMjEgKzk1NCwyMSBAQCB2
b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNy
ZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFycmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5F
eGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVyYWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5
cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25s
eSBTdHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFByb3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxl
KGV4ZWMpOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5
TmFtZU1vZGUpOwogICAgIHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZp
Z3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29u
ZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0
S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAg
Ym9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRvcik7IAotICAgICAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChpc1Byb3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRv
ci5jb25maWd1cmFibGUoKSkKICAgICAgICAgICAgIHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMu
YXBwZW5kKGlkZW50LmltcGwoKSk7CkBAIC0xMDUzLDcgKzEwNTcsNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhh
bmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVy
KHZtLCAic2V0UHJvdG90eXBlT2YiKSwgQVNDSUlMaXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHBy
b3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRh
cmdldCgpOwpAQCAtMTA2NCwxMSArMTA2OCwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
U2V0UHJvdG90eXBlKEV4CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQocHJvdG90eXBlKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4
ZWMsIHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFy
Z3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJl
c3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDc4
LDEzICsxMDgyLDEzIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgK
ICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNp
YmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElz
RXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFBy
b3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghc2FtZVZhbHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0
UHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlByb3h5ICdzZXRQcm90b3R5cGVPZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4g
aXRzIHRhcmdldCBpcyBub24tZXh0ZW5zaWJsZSBhbmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUg
aXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxk
IGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC0xMTE4LDcgKzExMjIsNyBAQCBKU1ZhbHVlIFBy
b3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9
IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlm
aWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVNDSUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2Yn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0
aGlzLT50YXJnZXQoKTsKQEAgLTExMjgsNyArMTEzMiw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6
OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7
CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9
IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAg
IGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYmICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBA
IC0xMTM3LDEzICsxMTQxLDEzIEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90
b3R5cGUKICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNF
eHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlm
ICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAg
SlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhl
YywgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0
cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdldCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZh
bHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNv
bnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3Vt
ZW50cywgbmV3VGFyZ2V0KSk7CkBAIC0xMzksMTQgKzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVByb3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhl
Yy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkg
JiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgIC8vIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJv
dyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Qcm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAg
ICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpAQCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0
LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAg
IGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHJlY2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcg
KzIwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
YXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CkBAIC0yMjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNF
eHRlbnNpYmxlIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwog
CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09iamVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUp
KTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
ZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1
aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0
KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJnZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNW
YWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTMwNyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAKICAgICBib29sIHNob3VsZFRocm93SWZDYW50
U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3Rv
dHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRocm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3RvdHlwZSkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUg
UmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUqIGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZp
bmVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZsYWdzOwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmlu
ZyA9IGZsYWdzLnRvU3RyaW5nKGV4ZWMpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8
fCBmbGFnc1N0cmluZyk7CiAgICAgaWYgKCFmbGFnc1N0cmluZykgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAg
IH0KIAogICAgIFJlZ0V4cEZsYWdzIHJlc3VsdCA9IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52
YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAg
ICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3MpCiAgICAgICAgIHRocm93U3ludGF4RXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdF
eHAgY29uc3RydWN0b3IuIikpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCog
cmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBTdHJpbmcgcGF0dGVybiA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQo
KSA/IGVtcHR5U3RyaW5nKCkgOiBwYXR0ZXJuQXJnLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFn
cyBmbGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NBcmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0
YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAt
PmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4
cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCByZWdFeHApOwogfQpAQCAtMjU1LDYgKzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCog
cmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBh
cmdzLCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSBwYXR0ZXJuQXJnID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdz
QXJnID0gYXJncy5hdCgxKTsKIApAQCAtMjYzLDcgKzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1
Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQo
KSAmJiBjb25zdHJ1Y3RBc1JlZ2V4cCAmJiBmbGFnc0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAg
ICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBwYXR0ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICBpZiAoY2FsbGVlID09IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAg
ICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBpcyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3Ry
dWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBAIC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHAp
IHsKICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVy
bkFyZyktPnJlZ0V4cCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4
cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3QsIG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NB
cmcuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzMsMTIgKzEzMywxMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0
b3I6OnJlCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFs
dWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNo
U3ltYm9sKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1
ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhl
Yyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVj
dC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1Zh
bHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhlY1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVk
IG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAwOwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgp
IHsKQEAgLTIzMywxNCArMjMzLDE0IEBAIEpTVmFsdWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBF
eGVjU3RhdGUKIAogSlNWYWx1ZSBSZWdFeHBPYmplY3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7
CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwoKSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFs
T2JqZWN0LT52bSgpOwotCiAgICAgc2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52
YWx1ZShleGVjKTsKQEAgLTI0OSwxNCArMjQ5LDE0IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0Ojpt
YXRjaEdsb2JhbChFeGVjU3QKICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpIHsKICAgICAgICAg
dW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcy5sZW5ndGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxl
Y3RNYXRjaGVzKAotICAgICAgICAgICAgKnZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0
cnVjdG9yLCByZWdFeHAsCisgICAgICAgICAgICB2bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBD
b25zdHJ1Y3RvciwgcmVnRXhwLAogICAgICAgICAgICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXpl
X3QgewogICAgICAgICAgICAgICAgIHJldHVybiBhZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJp
bmdMZW5ndGgsIGVuZCk7CiAgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAqdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29u
c3RydWN0b3IsIHJlZ0V4cCwKKyAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29u
c3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3Qgewog
ICAgICAgICAgICAgcmV0dXJuIGVuZCArIDE7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2Jq
ZWN0KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgcGF0dGVy
biA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBlbXB0eVN0cmluZygpIDogYXJnMC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxh
Z3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewog
ICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxh
Z3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxp
ZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSAr
MTg5LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NTdHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBz
dHJpbmdbMF0gPSAwOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0g
cmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNWYWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdl
eHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNWYWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4
cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2
bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgc3RpY2t5VmFsdWUgPSByZWdleHAtPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0
cmluZzsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFs
dWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBT
dHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5
TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgZmxhZ3MgPSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAnLycsIHNvdXJjZSwgJy8nLCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4
cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3Qi
KSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1Zh
bHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZs
YWdzLmRhdGEoKSkpOwpAQCAtNDcyLDEyICs0NzMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNTZWFyY2hGYXN0KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhw
ID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyog
c3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAg
U3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJl
Z0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25z
dHJ1Y3RvcigpOwpAQCAtNTg0LDcgKzU4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBi
ZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNTdHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+
YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJp
bmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5wdXQuaXNOdWxsKCkpOwogCkBAIC01OTksNyAr
NjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8v
IDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4KICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUg
MC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAy
MDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAg
IFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3Ry
dWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0
dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03Miw3
ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQpOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0
aW9uID0gc2V0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAy
MDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBjb2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
ICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRB
c0RvdWJsZSk7CkBAIC0xMjEsMTAgKzEyMSwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxP
YmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVu
dENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBA
QCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3BlcnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5n
T2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJp
bmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAog
ICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFt
ZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJv
cGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAg
ICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxl
ID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNp
YmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlv
bik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nzcs
OSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAg
ICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFy
Y2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAogICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJp
bmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNv
dXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgc291cmNlTGVuID0gc291
cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdF
eHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0
LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNv
ZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2JhbCkgewogICAgICAgICAvLyBFUzUuMSAxNS41
LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMs
IDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6
Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJn
Q291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5j
dGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAg
Q2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRy
dWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNW
YWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwo
KTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcg
KzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAg
ICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICAgICAg
ICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAg
ICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGFyZ3Mu
YXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNh
bGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCks
IGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2
MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYg
KHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5h
LgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRo
aXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVjKSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgs
MTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNl
YXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBz
ZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBl
OjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwx
MSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAg
ICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
cmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0
ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxh
Y2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpz
U3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJp
bmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3Ry
aW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
c2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEy
ICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAg
ICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBw
ZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNl
VmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5n
SW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEsMTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZh
bHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNS
ZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDgg
Kzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3Ry
aW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJl
dHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBl
eGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpA
QCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhp
c1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBz
Lmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwyMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAgICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJn
dW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMu
CiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQg
QSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJh
eSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0
cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4K
QEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgog
ICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
ICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEwLiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBA
IC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAg
ICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0x
MzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpT
U3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
VmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAg
ICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikp
KTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2Fs
ZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAK
ICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24g
Zm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcgKzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9j
YWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYg
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExv
Y2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5n
IHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBz
LCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsxNTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlh
bFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyAr
MTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1
NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwog
fQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+
IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+
IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNp
YmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5n
KGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsx
NjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVj
dENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAt
MTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyArMTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNW
YWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAg
ICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQg
bGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVj
LCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dp
dGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFy
ZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGVsc2UgewogICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9IGNs
YW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwg
bGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFy
Y2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNz
aW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0
cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJp
bmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMs
NyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAg
ICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBl
bHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBlbmQgPSBj
bGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyks
IDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmlu
ZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFy
Zy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0gc3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJ
bnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9T
ZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNp
Z25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBh
MCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNh
bm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBl
eGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcgKzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAg
QVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0
cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVj
LT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIwMTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2UgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05G
QzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5v
dCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7
CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlm
IChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAgQ2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6
OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0
cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5n
KiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBT
dHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1i
b2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJpbmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3Ry
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxMyBAQCBKU0FycmF5KiBUZW1wbGF0
ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAgICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRlbXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5z
aXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVjdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRl
eCkgewpAQCAtNjAsMTIgKzYxLDEyIEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRl
bXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdP
YmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVt
IHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1w
bGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0
ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2
ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIK
IAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jaWYgRU5BQkxFKFRI
Uk9XX1NDT1BFX1ZFUklGSUNBVElPTikKLQotbmFtZXNwYWNlIHsKLQotLy8gTG9ncyBhbGwgVGhy
b3dTY29wZSBhY3Rpdml0eSB0byBoZWxwIGRlYnVnIHRoZSBzb3VyY2Ugb2YgYSB2ZXJpZmljYXRp
b24gZmFpbHVyZS4KLWJvb2wgdHJhY2VPbiA9IGZhbHNlOwotCi0vLyBBIG1vcmUgdmVyYm9zZSBs
b2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysgc3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBv
aW50cyB0byBhaWQgZGVidWdnaW5nLgotYm9vbCB0cmFjZVdpdGhTdGFja1RyYWNlcyA9IGZhbHNl
OwotCi0vLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9u
IGZhaWx1cmVzIGFyZSBmaXhlZC4KLWJvb2wgdmVyaWZpY2F0aW9uT24gPSBmYWxzZTsKLQotdW5z
aWduZWQgdHJhY2VDb3VudCA9IDA7Ci19OworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVS
SUZJQ0FUSU9OKQogCiAvKgogICAgIFRocm93U2NvcGUgdmVyaWZpY2F0aW9uIHdvcmtzIHRvIHNp
bXVsYXRlIGV4Y2VwdGlvbiB0aHJvd3MgYW5kIGNhdGNoIGNhc2VzIHdoZXJlCkBAIC0yMjAsNyAr
MjA3LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7CiAKICAgICBiLiBUdXJuIG9uIFRocm93
U2NvcGUgdHJhY2luZwogIAotICAgICAgIEp1c3Qgc2V0IHRyYWNlT249dHJ1ZSBhdCB0aGUgdG9w
IG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAor
ICAgICAgIEp1c3Qgc2V0IFZNOjptX3RyYWNlRXhjZXB0aW9uRXZlbnRzPXRydWUgaW4gdGhlIFZN
LCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAogICAgICAgIHNlZSBhIHRyYWNl
IG9mIFRocm93U2NvcGVzIGJlaW5nIGVudGVyZWQgYW5kIGV4aXRlZCBhcyB3ZWxsIGFzIHRoZWly
IGRlcHRoIGUuZy4KIAogICAgIFRocm93U2NvcGUgWzFdIEVudGVyOiBsbGludF9zbG93X3BhdGhf
amZhbHNlIEAgL1ZvbHVtZXMvRGF0YS93czYvT3BlblNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEwMzIKQEAgLTIzNCw3ICsyMjEsNyBAQCB1bnNp
Z25lZCB0cmFjZUNvdW50ID0gMDsKIAogICAgIGMuIFR1cm4gb24gVGhyb3dTY29wZSBzdGFjayBk
dW1wcwogCi0gICAgICAgSnVzdCBzZXQgdHJhY2VXaXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCB0aGUg
dG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWlsZC4KKyAgICAgICBKdXN0IHNldCBWTTo6
bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcz10cnVlIGF0IGluIHRoZSBWTSwg
YW5kIHJlYnVpbGQuCiAgICAgICAgVGhlcmVhZnRlciwgeW91IHNob3VsZCBzZWUgYSBzdGFjayB0
cmFjZXMgYXQgdmFyaW91cyByZWxldmFudCBUaHJvd1Njb3BlIGV2ZW50cy4KIAogICAgIGQuIFVz
aW5nIHRocm93U2NvcGVQcmludElmTmVlZENoZWNrKCkKQEAgLTI0OSwzMyArMjM2LDE4IEBAIHVu
c2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgICAgIGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVk
IHRoZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjaygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCiAq
LwogCi1UaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZNJiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxv
Y2F0aW9uKQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRo
cm93U2NvcGUpCi0gICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQotICAgICwgbV9kZXB0aChtX3By
ZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2Nv
cGU6OlRocm93U2NvcGUoVk0mIHZtLCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQor
ICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnks
IGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BUaHJvd1Njb3BlID0gdGhpczsKLQotICAgIGlm
ICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93
U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAiLCBsb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUpOwotICAgICAgICBpZiAobV92
bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAgICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hl
Y2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLQotICAgICAgICBpZiAodHJhY2VXaXRoU3Rh
Y2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKLSAgICB9Ci0KLSAg
ICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpTY29wZUVudHJ5KTsK
KyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2
ZW50OjpUaHJvd1Njb3BlRW50cnksIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Nj
b3BlOjp+VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93
U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAK
ICAgICBpZiAoIW1faXNSZWxlYXNlZCkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsKKyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRp
b25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1f
ZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIGVsc2UgewogICAgICAgICAvLyBJZiB3ZSByZWxlYXNl
ZCB0aGUgc2NvcGUsIHRoYXQgbWVhbnMgd2UncmUgbGV0dGluZyBvdXIgY2FsbGVycyBkbyB0aGUK
ICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrLiBIb3dldmVyLCBiZWNhdXNlIG91ciBjYWxsZXIg
bWF5IGJlIGEgTExJbnQgb3IgSklUCkBAIC0yOTcsMjcgKzI2OSwyNSBAQCBUaHJvd1Njb3BlOjp+
VGhyb3dTY29wZSgpCiAgICAgICAgIHdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCA9IHRydWU7CiAg
ICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQpCi0gICAgICAgIHNpbXVsYXRl
VGhyb3coKTsKKyAgICAgICAgc2ltdWxhdGVUaHJvdyhFeGNlcHRpb25FdmVudDo6VGhyb3dTY29w
ZUV4aXQpOwogCi0gICAgaWYgKHRyYWNlT24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNl
Q291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9kZXB0aCwgIl0gRXhpdDogIiwgbV9sb2NhdGlv
bi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5s
aW5lKTsKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxv
Z0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRXhpdCwgbV9sb2NhdGlvbik7
CiAgICAgICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQogICAgICAgICAgICAgZGF0
YUxvZygiLCB3aXRoIHJldGhyb3ciKTsKICAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9u
Q2hlY2spCiAgICAgICAgICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7CiAgICAgICAgIGRh
dGFMb2coIlxuIik7CiAKLSAgICAgICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQorICAgICAg
ICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzV2l0aFN0YWNrVHJhY2VzKQogICAgICAg
ICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAgICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93
U2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CiB9CiAKIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAo
bV92bS5leGNlcHRpb24oKSAmJiBtX3ZtLmV4Y2VwdGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAg
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAg
ICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2
ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7CiAgICAgCiAgICAgbV92bS50aHJvd0V4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpAQCAtMzI1LDcgKzI5NSw3IEBAIHZvaWQgVGhy
b3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGVycm9yKQogewogICAgIGlmICgh
ZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxs
KCkpKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpU
aHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQo
RXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKICAgICAKICAgICBy
ZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBlcnJvcik7CiB9CkBAIC0zMzMsNyArMzAz
LDcgQEAgSlNWYWx1ZSBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihFeGVjUwogSlNPYmplY3Qq
IFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
aikKIHsKICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4ob2JqKSkKLSAgICAgICAg
dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAg
ICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50
OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhy
b3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KQEAgLTM0MSw1NSArMzExLDI0IEBAIEpTT2JqZWN0
KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihFeGUKIHZvaWQgVGhyb3dTY29wZTo6cHJpbnRJ
Zk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVu
c2lnbmVkIGxpbmUpCiB7CiAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAg
ICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IE5lZWQgZXhjZXB0aW9uIGNoZWNrIGF0
ICIsIGZ1bmN0aW9uTmFtZSwgIiBAICIsIGZpbGUsICI6IiwgbGluZSwgIlxuIik7CisgICAgICAg
IGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpOZWVkRXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkV2
ZW50TG9jYXRpb24oZnVuY3Rpb25OYW1lLCBmaWxlLCBsaW5lKSk7CiB9CiAKLXZvaWQgVGhyb3dT
Y29wZTo6c2ltdWxhdGVUaHJvdygpCit2b2lkIFRocm93U2NvcGU6OnNpbXVsYXRlVGhyb3coRXhj
ZXB0aW9uRXZlbnQgZXZlbnQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93
U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7Cisg
ICAgbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudCA9IGV2ZW50OwogICAgIG1fdm0ubV9z
aW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb24gPSBtX2xvY2F0aW9uOwogICAgIG1fdm0ubV9zaW11
bGF0ZWRUaHJvd1BvaW50RGVwdGggPSBtX2RlcHRoOwogICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9u
Q2hlY2sgPSB0cnVlOwogCi0gICAgaWYgKHRyYWNlT24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIs
IHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9kZXB0aCwgIl0gVGhyb3cgZnJvbTog
IiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6Iiwg
bV9sb2NhdGlvbi5saW5lLCAiXG4iKTsKLSAgICAgICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2Vz
KQorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZl
bnQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2xvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0u
bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcykKICAgICAgICAgICAgIFdURlJl
cG9ydEJhY2t0cmFjZSgpOwogICAgIH0KIH0KIAotdm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNl
cHRpb25DaGVja05lZWRJc1NhdGlzZmllZChUaHJvd1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAg
aWYgKCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZ
KG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0g
bV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0
aW9uID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRv
IHNpdGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4gY29uc3QgY2hhciogewotICAgICAgICAgICAg
c3dpdGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0gICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3Bl
RXhpdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkV4aXQiOwotICAgICAgICAgICAgY2FzZSBT
aXRlOjpUaHJvdzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBkYXRhTG9nKAotICAgICAg
ICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sgdmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAg
ICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20gVGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAi
XSAiLCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFpbExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBA
ICIsIGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZhaWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAg
ICAgICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBUaHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTog
IiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6Iiwg
bV9sb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiXG4iKTsKLQotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRpb25DaGVjayk7Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUo
RVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuaAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4OCArMjYsNjQgQEAKICNpZm5kZWYgVGhyb3dTY29wZV9o
CiAjZGVmaW5lIFRocm93U2NvcGVfaAogCi0jaW5jbHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVk
ZSAiVk0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNPYmplY3Q7CiAKLSNpZiBFTkFCTEUoVEhST1df
U0NPUEVfVkVSSUZJQ0FUSU9OKQorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FU
SU9OKQogCi1jbGFzcyBUaHJvd1Njb3BlIHsKK2NsYXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhj
ZXB0aW9uU2NvcGUgewogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUo
Vk0mLCBUaHJvd1Njb3BlTG9jYXRpb24pOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2Nv
cGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+
VGhyb3dTY29wZSgpOwogCiAgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxl
dGU7CiAgICAgVGhyb3dTY29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2
bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhjZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNP
YmplY3QqKTsKIAotICAgIGlubGluZSBFeGNlcHRpb24qIGV4Y2VwdGlvbigpCi0gICAgewotICAg
ICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBt
X3ZtLmV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIHJlbGVhc2UoKSB7IG1f
aXNSZWxlYXNlZCA9IHRydWU7IH0KKyAgICB2b2lkIHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9
IHRydWU7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJpbnRJZk5lZWRDaGVjayhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUp
OwogCiBwcml2YXRlOgotICAgIHZvaWQgc2ltdWxhdGVUaHJvdygpOworICAgIHZvaWQgc2ltdWxh
dGVUaHJvdyhFeGNlcHRpb25FdmVudCk7CiAKLSAgICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAg
ICBTY29wZUVudHJ5LAotICAgICAgICBTY29wZUV4aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsK
LSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0g
ICAgVk0mIG1fdm07Ci0gICAgVGhyb3dTY29wZSogbV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93
U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9uOwotICAgIHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9v
bCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9OwogfTsKIAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtX18pIFwKLSAgICBKU0M6OlRocm93U2NvcGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVM
b2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJv
d1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywg
X19GSUxFX18sIF9fTElORV9fKSkKIAogI2RlZmluZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
ayhzY29wZV9fKSBcCiAgICAgc2NvcGVfXy5wcmludElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywg
X19GSUxFX18sIF9fTElORV9fKQogCi0jZWxzZSAvLyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZF
UklGSUNBVElPTikKKyNlbHNlIC8vIG5vdCBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNB
VElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7CitjbGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4
Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBUaHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAg
OiBtX3ZtKHZtKQorICAgIEFMV0FZU19JTkxJTkUgVGhyb3dTY29wZShWTSYgdm0pCisgICAgICAg
IDogRXhjZXB0aW9uU2NvcGUodm0pCiAgICAgeyB9CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJv
d1Njb3BlJikgPSBkZWxldGU7CisgICAgVGhyb3dTY29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVs
dDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lk
IHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsg
bV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0u
dGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4
Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0gICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7
IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9Ci0gICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIFZNJiBtX3ZtOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhy
b3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBK
U09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7
IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9OwogCiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NP
UEUodm1fXykgXAogICAgIEpTQzo6VGhyb3dTY29wZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFC
TEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05f
U0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBzY29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24p
CiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Nj
b3BlTG9jYXRpb24uaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsK
LSAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQot
ICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxl
KQotICAgICAgICAsIGxpbmUobGluZSkKLSAgICB7IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUgeyBudWxscHRyIH07Ci0gICAgY29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIg
fTsKLSAgICB1bnNpZ25lZCBsaW5lIHsgMCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3Myw0ICs4NzMsMjYgQEAgc2l6ZV90IFZNOjpjb21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAj
ZW5kaWYKIH0KIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9p
ZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQg
ZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRpb25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikK
K3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9uRXZlbnRzKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8g
dGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQb2ludEV2ZW50OworICAgICAgICBhdXRvIHRo
cm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9pbnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhy
b3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOworCisgICAgICAgIGRh
dGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246
XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlvbiB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0
aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhyb3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAg
ICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRlcHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9j
YXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAgfQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUz
MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNs
dWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAi
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtNDgsNyAr
NTAsNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUu
aCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNsdWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIK
ICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKQEAgLTgyLDYgKzgzLDcgQEAgY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBF
eGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247CitjbGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNz
IEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2ZpbGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9n
OwpAQCAtMTA5LDcgKzExMSw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNl
bmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhyb3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU7CkBAIC00NDAsMTIgKzQ0MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNl
cHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNl
cHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFz
dEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAgIEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxG
cmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxGcmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNl
cHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlND
ZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0Nl
bGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAgRXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9uOyB9CkBAIC02NDEsMTEgKzY0MCwxNyBAQCBw
cml2YXRlOgogICAgICAgICBtX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgICAgICAgbV9sYXN0
RXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0KKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigp
IHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7CiAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAg
ICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50
LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYK
QEAgLTY3MCwxMSArNjc1LDIzIEBAIHByaXZhdGU6CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0
aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlvbiogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0
ciB9OwotI2lmIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29w
ZSogbV90b3BUaHJvd1Njb3BlIHsgbnVsbHB0ciB9OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBt
X3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKyAgICBFeGNlcHRpb25TY29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7
IG51bGxwdHIgfTsKKyAgICBFeGNlcHRpb25FdmVudCBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVu
dDsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9uIG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0
aW9uOwogICAgIHVuc2lnbmVkIG1fc2ltdWxhdGVkVGhyb3dQb2ludERlcHRoIHsgMCB9OwogICAg
IG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25DaGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBM
b2dzIGFsbCBleGNlcHRpb24gYWN0aXZpdHkgdG8gaGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEg
dmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzIHsg
ZmFsc2UgfTsKKworICAgIC8vIEEgbW9yZSB2ZXJib3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAg
dGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVnaWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcu
CisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzV2l0aFN0YWNrVHJhY2VzIHsgZmFsc2Ug
fTsKKworICAgIC8vIERpc2FibGVkIHRlbXBvcmFyaWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmlj
YXRpb24gZmFpbHVyZXMgYXJlIGZpeGVkLgorICAgIGJvb2wgbV92ZXJpZnlFeGNlcHRpb25FdmVu
dHMgeyBmYWxzZSB9OworCisgICAgdW5zaWduZWQgbV9leGNlcHRpb25FdmVudENvdW50IHsgMCB9
OwogI2VuZGlmCiAKICAgICBib29sIG1fZmFpbE5leHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwpA
QCAtNzAwLDYgKzcxNywxMCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dD
aGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50
cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIC8vIEZy
aWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBwdXJwb3NlIG9ubHkuCisgICAgZnJpZW5kIGNs
YXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIENhdGNoU2NvcGU7CisgICAgZnJpZW5kIGNsYXNz
IEV4Y2VwdGlvblNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBUaHJvd1Njb3BlOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdU
YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFw
KiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUoZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAg
ICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtNjksNyArNjksNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24g
PSB3ZWFrTWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4
LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAg
ICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRlcmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlmICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewog
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhl
Yywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vh
a1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xv
YmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCks
IGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha1NldCogd2Vha1Nl
dCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdlYWtTZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFs
dWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1Nl
dC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDIwNTMyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDkgKzMwMSwxMCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICBTdHJpbmcg
YXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBkYXRhTG9nKGFyZ1N0cik7CiAgICAgfQpJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsOCArOTE4LDggQEAKICNkZWZpbmUgRU5BQkxF
X01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5kZWYgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklG
SUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OICghZGVmaW5l
ZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgor
I2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRF
QlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNoIGFsbG9jYXRvciB0byB1c2U7IHdlIG9ubHkg
bmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBpZiB0aGUgYXNzZW1ibGVyIGlzIGNvbXBpbGVk
IGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRj
aFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJD
b3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3Bl
Lmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEv
Q0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTMy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNs
ZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1T
ZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFycgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFy
S2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkpOwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpTVmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09O
UGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
IHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAgICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lv
bkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVkOiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6
cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4g
a2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJ
bmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6
cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUgRE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJp
YWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAg
IHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJv
cjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJl
Y29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4gb2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQu
Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVl
SURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw3ICs4NTcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgLy8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEg
a2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZl
ciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlmICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9i
amVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsKKyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VU
aHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUg
PSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCks
IG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsKICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKQEAgLTg3MSw3ICs4NzMsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgp
LCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4
ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBvc3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJREJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9y
QWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVycm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpD
b25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQg
dmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBrZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBAQCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNj
cmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVy
ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRy
b2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKKyAgICBWTSYgdm0gPSBleGVj
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1ZhbHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGds
b2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
Z2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7
CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAgICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVh
dGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNj
cmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9pc29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUyOSw5IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpj
YWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdMaXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4
ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4
ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0dfRVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQg
dGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlvbk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxh
Y2VtZW50Lm1tCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Bs
dWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2
MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIK
ICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50
KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9i
YWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5S
ZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVh
dGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3Jp
cHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAg
LSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQg
c2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCkBAIC0xODgsMTUgKzE5MCwxOCBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50
OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsK
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50
LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRy
b2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwogICAgIAogICAgIC8vIExvb2t1cCB0aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50
IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2Jh
bE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3Jl
YXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNV
bmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmpl
Y3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVj
KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2Fs
bFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2Fs
bERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0g
SlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwzMiArMjE0LDMyIEBAIGJvb2wgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmlu
Zz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVzKSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9K
UzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV92YWx1ZXMpKTsKICAgICBKU0M6OkpTVmFs
dWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+
IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUg
PSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9F
bGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAgICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewog
ICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50
IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7
Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhl
IHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0gICAg
aWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
eworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAg
ICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIGlmICghbV9zY3JpcHRPYmplY3QpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3Jl
YXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50LiIsIHRoaXMpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgy
LDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBEaWN0aQogCiBib29sIEFy
cmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CisgICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGlu
ZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB2YWx1ZSA9IGluZGV4ZWRW
YWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBA
IGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW4KIAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0KCk7CiAgICAgRXhlY1N0
YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKQEAgLTY5LDEwICs3MSwxMCBAQCBi
b29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluCiAgICAgICAgIGlmIChzdHJp
bmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJl
dmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTQgQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFsTwogCiAgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIodm0uYXBpTG9jaygpKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgp
KSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBhdXRvJiBpbkFycmF5ID0g
a2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAg
ICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmds
b2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpLCB0
b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJyYXkuYXQoaSkuZ2V0KCkpKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1
LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2
X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rp
b25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlW
YWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNv
bXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24oc3RhdHVzLCBuZXdUb3RhbCwgbmV3TGluZUl0
ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpAQCAtODgsMTkgKzg4
LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2
X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5
VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9Owot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9Owot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
aW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihzdGF0dXMsIG5ld1NoaXBwaW5n
TWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlv
bigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1LDExIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNl
c3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERp
Y3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkgfTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJy
YXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBs
LmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBl
Yyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgp
LnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lkIEpTQXVkaW9U
cmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3Vh
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBi
bG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKSwg
YmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVChibG9iUGFydHMpOwogCkBAIC0xMDEsNyAr
MTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAg
ICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRpbmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBp
dC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5n
cyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5n
cykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4K
ICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsKLSAgICAgICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7
ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7
Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0g
dG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQo
YmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0u
dG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBlbmRpbmdzKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBKU0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBTdHJpbmcgcHJvcGVydHlO
YW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8Q1NT
VmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlO
YW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElI
b3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBKU1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0
OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSogZ2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVj
U3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZv
JiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lcklu
Zm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91
dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291bnQ7ICsraSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnkuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5QVNDSUkoKSkgewpAQCAtMTA2LDEyICsxMDYs
MTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0RpY3Rpb25hcgogICAgIC8vIEZY
SU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRvIHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0
aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUuCiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBk
aWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYXNoIik7CiAKICAgICBKU1Zh
bHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBvYmplY3QsICJoYXNoIik7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1ZhbHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywg
dmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1B
ZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBpdkRhdGE7Ci0gICAgaWYg
KCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgaXYsIGl2RGF0YSk7CisgICAgQVNT
RVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgaWYgKGl2RGF0YS5zZWNvbmQgIT0g
MTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4
ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRhdGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKQEAg
LTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUFlc0tleUdl
blBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRl
LCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVuZ3RoID0gY29udmVydDx1aW50MTZfdD4oc3Rh
dGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2UpOwpAQCAtMTg5LDEwICsxOTEsMTAgQEAgc3Rh
dGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBq
c0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMpOwogCi0gICAgaWYgKCFn
ZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1l
bnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQt
Pmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAgIEFTU0VSVF9VTlVTRUQoc2Nv
cGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUu
Z2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdv
cml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlmICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rp
b25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRI
YXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6
OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICBy
ZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFyeS5nZXQoImxlbmd0aCIsIHJlc3VsdC0+bGVu
Z3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsyMzgsMTYgQEAgc3RhdGljIFJlZlB0cjxDcnlw
dG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBD
cnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMpOwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVu
Z3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1
c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8v
IEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3Jn
L0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVz
TGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3RhdGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1
ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50Iik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJy
YXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25lbnRWYWx1ZSk7CkBAIC0yNzksMTMgKzI4MSwx
MyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0
aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byBy
ZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJhbXMpOwogCi0g
ICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNo
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5
LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFBy
b3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpLCAibGFiZWwiKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5MywxMCArMjk1LDEwIEBAIHN0YXRpYyBSZWZQ
dHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgbGFiZWxEYXRhOwotICAgIGlmICghY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSkp
IHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0g
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0
YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmVzdWx0LT5s
YWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBsYWJlbERhdGEuc2Vjb25kKTsKIApAQCAtMzE2
LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgog
ICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7
CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobVJzYVNzYVBh
cmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQt
Pmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gZ2V0SGFzaEFsZ29yaXRobShq
c0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpSZXF1aXJlZCk7Cisg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2Vz
cykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkocmV2aXNpb24gMjA1MzI0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0Fy
cmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNP
TiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDEwICs4NSwxMCBA
QCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNPTihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRl
bnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCBy
ZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQgYW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24u
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0
cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09O
KEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICgh
anNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEgYm9vbGVhbiB2YWx1ZSBmb3IgXCIlc1wiIEpT
T04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDgsNyArMTQ4LDcg
QEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpKU0NyeXB0b0tleQogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUganNvblZhbHVlID0g
SlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNvblZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI5
OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAg
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBrZXlPcHMtPmdldEluZGV4KG1fZXhlYywgaSk7
CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9uOwogICAgICAgICAgICAgaWYgKCFqc1ZhbHVl
LmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1f
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRyaWJ1dGUgY291bGQgbm90IGJlIHByb2Nlc3Nl
ZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0zMjAsNyAr
MzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uYwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICht
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJp
bmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpT
Q3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zy
b21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiayIsIGtleUJhc2U2NFVSTCkpIHsKLSAgICAg
ICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90IHByZXNlbnQgaXMgSldLIikpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00MjAsNyArNDIwLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRl
RXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMs
IG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpX
SyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+
IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09O
KG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4cG9uZW50KSkgewotICAgICAgICBpZiAoIW1f
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJl
cXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9l
eGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1cykpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBleHBvbmVudCk7CiAgICAgfQpAQCAtNDQ2LDM4
ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAg
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwog
ICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclBy
aW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBt
X2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tl
eURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2
YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21K
U09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAiLCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRF
eHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9k
dWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25k
UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3Jl
YXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAK
ICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQo
KSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewotICAgICAgICBp
ZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0
ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENv
ZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZSht
b2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBKU0FycmF5
KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAgaWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9l
eGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhlclByaW1lSW5mb0pTQXJyYXkpKSB7Ci0gICAg
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0
b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1v
ZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQ
cmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAgICAgfQpAQCAtNDg1LDI0ICs0ODUsMjQgQEAg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0FycmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAg
ICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmltZUluZm8gaW5mbzsKICAgICAgICAg
SlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUluZm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMs
IGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sgXCJvdGhcIiBhcnJheSBtZW1i
ZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywg
YXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5wcmltZUZhY3RvcikpIHsKLSAgICAgICAgICAg
IGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1lIGZhY3RvciBmb3IgYSBwcmltZSBpbiBcIm90
aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
fQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFzT2Jq
ZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9yQ1JURXhwb25lbnQpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0b3IgQ1JUIGV4cG9uZW50IGZvciBhIHByaW1l
IGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhl
YywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5mby5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsK
LSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9l
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2ll
bnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUxOSw3ICs1MTksNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAKICAgICBTdHJpbmcgandrS2V5VHlwZTsKICAg
ICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAia3R5Iiwgandr
S2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9l
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1aXJlZCBKV0sgXCJrdHlcIiBtZW1iZXIgaXMg
bWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNTQ5LDYgKzU0
OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZvck9jdGV0U2VxdWVuY2UoRXgKIAogc3RhdGlj
IHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIGRhdGEsIEpTQzo6SlNPYmplY3QqIHJlc3Vs
dCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRvSlNPTihleGVjLCByZXN1bHQsICJrdHkiLCAi
UlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJlc3VsdCwgIm4iLCBiYXNlNjRVUkxFbmNvZGUo
ZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pTT04oZXhlYywgcmVzdWx0LCAiZSIsIGJhc2U2
NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsKQEAgLTU3MCw5ICs1NzMsOCBAQCBzdGF0aWMg
dm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRzKEpTCiAgICAgaWYgKGRhdGEub3RoZXJQcmlt
ZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBkYXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUo
KSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9
IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBKU09iamVjdCoganNQcmltZUluZm8gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0aWMgdm9pZCBhZGRKV0tBbGdvcml0aG1Ub0pT
T04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2FnZXNUb0pTT04oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTczOCwxMyArNzQxLDEzIEBAIFN0cmluZyBK
U0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmkKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAKICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04o
ZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJlc3VsdCwgImV4dCIsIGtleS5leHRyYWN0YWJs
ZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihleGVjLCByZXN1bHQsIGtleS51c2FnZXNCaXRt
YXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChp
czxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oKmtleURhdGEpKQpAQCAtNzU1LDcgKzc1OCw3
IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmkKICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiS2V5IGRvZXNuJ3Qgc3VwcG9y
dCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5
KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTMyNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDkgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3Vz
dG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4g
cHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2lzb2xhdGVk
V29ybGQtPnZtKCkpOworICAgIFZNJiB2bSA9IG1faXNvbGF0ZWRXb3JsZC0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgaWYgKCFtX2NvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTg5LDggKzkxLDExIEBAIFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2UKICAgICBKU1ZhbHVlIG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3Qoc3RhdGUsIG1fY29uc3Ry
dWN0b3IuZ2V0KCksIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MpOwogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgY29udGV4dCk7
CiAKLSAgICBpZiAoc2hvdWxkQ2xlYXJFeGNlcHRpb24gPT0gU2hvdWxkQ2xlYXJFeGNlcHRpb246
OkNsZWFyICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgc3RhdGUtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgaWYgKHNob3VsZENsZWFyRXhjZXB0aW9uID09IFNob3VsZENsZWFyRXhj
ZXB0aW9uOjpDbGVhciAmJiBzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICBhdXRvIGNhdGNo
U2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9u
KCkgfHwgIW5ld0VsZW1lbnQuaXNFbXB0eSgpKTsKIAogICAgIGlmIChuZXdFbGVtZW50LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMjIsNyArMTI3LDcgQEAgdm9pZCBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbAogICAgIEFTU0VSVChjb250ZXh0LT5p
c0RvY3VtZW50KCkpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsICptX2lzb2xhdGVkV29ybGQpOwogICAgIEV4ZWNTdGF0
ZSogc3RhdGUgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKQEAgLTE0MSw3
ICsxNDYsNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsCiAKICAg
ICBtX2NvbnN0cnVjdGlvblN0YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgIGlmIChzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgRWxlbWVudCogd3JhcHBlZEVsZW1lbnQgPSBKU0VsZW1lbnQ6OnRv
V3JhcHBlZChyZXR1cm5lZEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21F
bGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBA
IHN0YXRpYyBKU09iamVjdCogZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWMKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGNhbGxiYWNrID0gcHJv
dG90eXBlLmdldCgmc3RhdGUsIGlkKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgaWYgKGNhbGxiYWNrLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojpk
ZWZpbmUoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBs
b2NhbE5hbWUoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dG9B
dG9taWNTdHJpbmcoJnN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3JWYWx1ZSA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDEpOwpAQCAtMTE4LDcgKzExOCw3IEBAIEpTVmFsdWUgSlNDdXN0
b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICB9CiAKICAgICBKU1ZhbHVlIHByb3RvdHlw
ZVZhbHVlID0gY29uc3RydWN0b3ItPmdldCgmc3RhdGUsIHZtLnByb3BlcnR5TmFtZXMtPnByb3Rv
dHlwZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlm
ICghcHJvdG90eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ3VzdG9tIGVsZW1lbnQgY29uc3RydWN0
b3IncyBwcm90b3R5cGUgbXVzdCBiZSBhbiBvYmplY3QiKSk7CkBAIC0xMjgsMjkgKzEyOCwyOSBA
QCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAgICAgYXV0byBlbGVt
ZW50SW50ZXJmYWNlID0gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwgY29u
c3RydWN0b3IsIGdsb2JhbE9iamVjdCgpKTsKIAogICAgIGF1dG8qIGNvbm5lY3RlZENhbGxiYWNr
ID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChjb25uZWN0ZWRDYWxsYmFj
aykKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0Q29ubmVjdGVkQ2FsbGJhY2soY29ubmVj
dGVkQ2FsbGJhY2spOwogCiAgICAgYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0
b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKGRpc2Nvbm5lY3RlZENhbGxiYWNrKQog
ICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXREaXNjb25uZWN0ZWRDYWxsYmFjayhkaXNjb25u
ZWN0ZWRDYWxsYmFjayk7CiAKICAgICBhdXRvKiBhZG9wdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21F
bGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChhZG9wdGVkQ2FsbGJhY2spCiAgICAgICAgIGVsZW1l
bnRJbnRlcmZhY2UtPnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJhY2spOwogCiAgICAg
YXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNr
KHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYXR0
cmlidXRlQ2hhbmdlZENhbGxiYWNrIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBpZiAoYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKSB7CiAgICAgICAg
IGF1dG8gdmFsdWUgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBjb25z
dHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJvYnNl
cnZlZEF0dHJpYnV0ZXMiKSkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgZWxlbWVu
dEludGVyZmFjZS0+c2V0QXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJpYnV0ZUNoYW5nZWRD
YWxsYmFjaywgKnZhbHVlKTsKQEAgLTE4MSw3ICsxODEsNyBAQCBzdGF0aWMgSlNWYWx1ZSB3aGVu
RGVmaW5lZFByb21pc2UoRXhlY1N0CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAg
IEF0b21pY1N0cmluZyBsb2NhbE5hbWUoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJp
bmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghdmFsaWRhdGVDdXN0
b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQoc3RhdGUsIGxvY2FsTmFtZSkpCkBAIC0yMDIs
MTMgKzIwMiwxNSBAQCBzdGF0aWMgSlNWYWx1ZSB3aGVuRGVmaW5lZFByb21pc2UoRXhlY1N0CiAK
IEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OndoZW5EZWZpbmVkKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoc3RhdGUudm0o
KSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0gKmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgYXV0byYg
cHJvbWlzZURlZmVycmVkID0gKkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0KTsKICAgICBKU1ZhbHVlIHByb21pc2UgPSB3aGVuRGVmaW5lZFByb21pc2Uoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgd3JhcHBlZCgpKTsKIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
cmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBwcm9t
aXNlRGVmZXJyZWQpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBwcm9taXNl
RGVmZXJyZWQucHJvbWlzZSgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
OCArMTE5LDExIEBAIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbEMKIAog
U3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIFN0cmluZ1ZpZXcgdmll
dyB7IHN0cmluZyB9OwogCkBAIC0xODcsMTAgKzE5MCwxMSBAQCBkb3VibGUgdmFsdWVUb0RhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFJFTEVBU0VfQVNTRVJU
KHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0ganNEeW5hbWljQ2FzdDxFeGNlcHRpb24qPihleGNlcHRpb25WYWx1ZSk7CiAgICAg
aWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZXhlYy0+bGFzdEV4Y2VwdGlv
bigpOworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CiAgICAgICAgIGlm
ICghZXhjZXB0aW9uKQogICAgICAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3RhY2sp
OwogICAgIH0KQEAgLTIwMCwxNSArMjA0LDE4IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlMKIAogdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlv
bkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+
dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7
CiAKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4
Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgZXhlYy0+Y2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKIAogICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWlj
Q2FzdDxKU0RPTVdpbmRvdyo+KGdsb2JhbE9iamVjdCkpIHsKQEAgLTIzOSw4ICsyNDYsOCBAQCB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAKICAgICAgICAgLy8gV2Ug
bmVlZCB0byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhl
IHRvU3RyaW5nKCkgY2FsbCBhYm92ZS4KICAgICAgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMg
bm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJMYXN0RXhjZXB0aW9uKCk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHZtLmNsZWFyTGFzdEV4Y2Vw
dGlvbigpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAg
LTI1Niw4ICsyNjMsMTAgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eAogCiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNj
b3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmVwb3J0
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTM0MSw3ICszNTAsNyBAQCB2b2lk
IHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoIWVjIHx8IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmICghZWMgfHwgc2NvcGUuZXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMpKTsKQEAgLTM1Miw3ICszNjEsNyBAQCB2
b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpZiAoIWVjLmNvZGUgfHwgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFlYy5jb2Rl
IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjLmNvZGUsIGVjLm1l
c3NhZ2UpKTsKQEAgLTM2MiwxNSArMzcxLDE3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiBleGUKIAogYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpT
VmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgi
U3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5l
ZCgpOwpAQCAtNTA5LDcgKzUyMCw3IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhl
Y1N0YXRlJiAKICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewpAQCAtNTU2LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1Nt
YWxsZXJVSW50KEV4ZWNTdGF0ZSYKICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewpAQCAtNjQyLDExICs2NTMsMTQgQEAgdWludDE2
X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYQogLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1sb25nCiBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CiAKICAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIs
IGtNYXhJbnQzMik7CiB9CkBAIC02NzIsMjcgKzY4NiwzNiBAQCB1aW50MzJfdCB0b1VJbnQzMkNs
YW1wKEV4ZWNTdGF0ZSYgc3RhdGUsCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LXVuc2lnbmVkLWxvbmcKIHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNV
SW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKICAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUlu
dDMyKTsKIH0KIAogaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBr
SlNNYXhJbnRlZ2VyKTsKIH0KIAogdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pT
TWF4SW50ZWdlcik7CiB9CkBAIC04NTYsMjEgKzg3OSwyMSBAQCB2b2lkIHJlcG9ydERlcHJlY2F0
ZWRTZXR0ZXJFcnJvcihKU0M6OkV4CiAKIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7
CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7CiB9CiAKIHZvaWQgdGhy
b3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgU3RyaW5n
IG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdl
U3RyaW5nKSk7CiB9CiAKIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMjA1MzI0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwMSw3ICs1MDEsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNl
KEpTQzo6CiAgICAgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5n
ZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgewpAQCAtNTEwLDcgKzUxMCw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjoKICAgICB9CiAKICAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigm
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4g
b2JqZWN0OwpAQCAtNTUzLDggKzU1MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVs
bHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9y
LnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwpAQCAtNTYzLDggKzU2NiwxMSBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZl
Y3RvcikKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
dmVjdG9yW2ldLmdldCgpKSk7CkBAIC02NDMsMTQgKzY0OSwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gSlNDOjpKU1ZhbHVlIGpzRnJvemVuQXJyYXkoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKSB7CiAgICAgICAgIGxpc3QuYXBwZW5kKEpTVmFsdWVUcmFpdHM8VD46OmFycmF5
SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAg
fQogICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBudWxscHRyLCBn
bG9iYWxPYmplY3QsIGxpc3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTQzo6anNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZy
ZWV6ZShleGVjLCBhcnJheSk7CiB9CkBAIC02OTEsMzIgKzcwMCw0MCBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1
ZVRyYWl0czxTdHJpbmc+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBTdHJpbmcmIGluZGV4ZWRW
YWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1
ZSA9IGpzVmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFk
RXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQog
fTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+IHsKICAg
ICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlLCB1bnNpZ25lZCYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b1VJbnQz
MigmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAg
cmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRp
dmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGZsb2F0
JiBpbmRleGVkVmFsdWUpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBp
bmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4
ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAg
ICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZG91YmxlPiB7
CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgZG91YmxlJiBpbmRleGVkVmFsdWUpCiAgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvTnVt
YmVyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAg
ICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKQEAgLTc1MywxMSArNzcw
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUEKICAgICB9CiAK
ICAgICBWZWN0b3I8VD4gcmVzdWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1
ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJmV4ZWMsIHZhbHVlLCBbJnJlc3Vs
dF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
ICAgICBUIGNvbnZlcnRlZFZhbHVlOwotICAgICAgICBpZiAoIU5hdGl2ZVZhbHVlVHJhaXRzPFQ+
OjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUsIGNvbnZlcnRlZFZhbHVlKSkKKyAgICAgICAg
Ym9vbCBzdWNjZXNzID0gTmF0aXZlVmFsdWVUcmFpdHM8VD46Om5hdGl2ZVZhbHVlKCpzdGF0ZSwg
anNWYWx1ZSwgY29udmVydGVkVmFsdWUpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBz
Y29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5oYWRFeGNlcHRpb24oKSk7
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydGVkVmFsdWUpOwogICAgIH0pOwogICAgIHJl
dHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEx
ICs3NSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VUaGlzVHlwCiB7CiAg
ICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpID09IDIpOworICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUgPSBl
eGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAg
IEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChz
Y29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGZ1bmN0aW9uTmFtZSA9IGV4ZWNT
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNT
RVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVj
U3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRh
KCksIGZ1bmN0aW9uTmFtZS51dGY4KCkuZGF0YSgpKSkpOwogfQogCkBAIC04NywxMSArODksMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlR2V0dGVyVAogewogICAgIEFTU0VS
VChleGVjU3RhdGUpOwogICAgIEFTU0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291bnQoKSA9PSAy
KTsKKyAgICBWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gZXhlY1N0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQo
IWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgYXV0byBhdHRyaWJ1dGVOYW1lID0gZXhlY1N0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQoIWV4
ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlwZUVycm9yKGV4ZWNTdGF0ZSwg
bWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBh
dHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3RUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgUmVmPEpTR2xvYmFsT2JqZWN0Q2FsbGJhY2s+IHBy
b3RlY3RlZFRoaXMoKnRoaXMpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2dsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCkBAIC02NCw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6cnVuVGFzayhleGVjLCBtX3Rhc2spOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX3Rhc2stPnJ1bihleGVjKTsKLSAgICAgICAgQVNTRVJUKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDUsNyArMjA1LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBpdGVyYXRvckZvckVhY2goSlNDOgog
ICAgICAgICBhcHBlbmRGb3JFYWNoQXJndW1lbnRzKHN0YXRlLCB3cmFwcGVyLT5nbG9iYWxPYmpl
Y3QoKSwgYXJndW1lbnRzLCB2YWx1ZSk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQod3JhcHBl
cik7CiAgICAgICAgIEpTQzo6Y2FsbCgmc3RhdGUsIGNhbGxiYWNrLCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6Ompz
VW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2UuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMSArOTksMTQgQEAgdm9p
ZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdChFeGNlcHRpb25DbwogCiB2b2lkIHJlamVjdFByb21p
c2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU1Byb21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQog
ewotICAgIGlmICghc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKU1ZhbHVlIGVycm9y
ID0gc3RhdGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7Ci0gICAgc3RhdGUuY2xlYXJFeGNlcHRpb24o
KTsKKyAgICBKU1ZhbHVlIGVycm9yID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgJnByb21pc2VEZWZlcnJlZCktPnJlamVjdChlcnJvcik7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMiArMTU4LDE1IEBAIHZvaWQgcmVqZWN0UHJvbWlzZVdp
dGhFeGNlcHRpb25JZkFueShKU0MKIAogaW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1
bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwcm9taXNl
RnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKikpCiB7Cisg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKwogICAgIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QgPSAq
SlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOwogICAgIEpTQzo6SlNQcm9taXNlRGVmZXJyZWQmIHByb21pc2VEZWZlcnJlZCA9ICpKU0M6
OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0KTsKICAgICBw
cm9taXNlRnVuY3Rpb24oJnN0YXRlLCAmcHJvbWlzZURlZmVycmVkKTsKIAogICAgIHJlamVjdFBy
b21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoc3RhdGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVy
cmVkKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBwcm9taXNlRGVmZXJy
ZWQucHJvbWlzZSgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDExICs3NSwxNCBAQCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kCiAKIGJvb2wgSlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcg
c3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
CShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTMgKzE5NywxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjYWxsKCkKICAgICB7CiAgICAgICAgIFJlZjxKU0RPTVdpbmRvd01pY3JvdGFz
a0NhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sobV9nbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgICAgICBKU01haW5UaHJlYWRF
eGVjU3RhdGU6OnJ1blRhc2soZXhlYywgbV90YXNrKTsKIAotICAgICAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4
Y2VwdGlvbigpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0Niw2ICszNDYsOSBAQCBib29sIEpTRE9NV2luZG93OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU0M6CiAKIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCiAgICAgLy8gVG8gYXZvaWQgYnJlYWtpbmcgb2xkIHdpZGdldHMsIG1ha2Ug
InZhciBsb2NhdGlvbiA9IiBpbiBhIHRvcC1sZXZlbCBmcmFtZSBjcmVhdGUKICAgICAvLyBhIHBy
b3BlcnR5IG5hbWVkICJsb2NhdGlvbiIgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmF2aWdhdGlv
biAoPHJkYXI6Ly9wcm9ibGVtLzU2ODgwMzk+KS4KQEAgLTM1OSw3ICszNjIsNyBAQCB2b2lkIEpT
RE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUmCiAjZW5kaWYKIAogICAgIFN0cmluZyBs
b2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChMb2NhdGlvbiogbG9jYXRpb24g
PSB3cmFwcGVkKCkubG9jYXRpb24oKSkKQEAgLTM4MywxNSArMzg2LDE4IEBAIEpTVmFsdWUgSlNE
T01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0ZSYgc3QKIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3Bl
bihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIEpTVmFsdWUgdGFyZ2V0VmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBBdG9t
aWNTdHJpbmcgdGFyZ2V0ID0gdGFyZ2V0VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSA/IEF0b21p
Y1N0cmluZygiX2JsYW5rIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiB0
YXJnZXRWYWx1ZS50b1N0cmluZygmc3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgd2luZG93
RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxET01XaW5kb3c+IG9wZW5lZFdpbmRvdyA9IHdyYXBw
ZWQoKS5vcGVuKHVybFN0cmluZywgdGFyZ2V0LCB3aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZl
RE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9NV2luZG93KCZzdGF0ZSkpOwpAQCAtNDQ3LDEwICs0
NTMsMTAgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIGRp
YWxvZ0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWFsb2dIYW5kbGVyIGhhbmRsZXIoc3RhdGUpOwpAQCAt
NDg4LDE2ICs0OTQsMTYgQEAgc3RhdGljIEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2lu
ZAogICAgICAgICB9CiAgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5h
cmd1bWVudCh0cmFuc2ZlcmFibGVzQXJnSW5kZXgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVy
cyk7CiAgICAgfQotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksICZtZXNzYWdlUG9ydHMsICZhcnJheUJ1ZmZlcnMp
OwogCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3Ry
aW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRleCkp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwpAQCAtNTIyLDcgKzUyOCw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6
OnNldFRpbWVvdXQoRXhlY1N0YXQKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVu
dFNlY3VyaXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1l
bnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rp
b24pCkBAIC01NDcsNyArNTUzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwo
RXhlY1N0YQogCiAgICAgQ29udGVudFNlY3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xp
Y3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQoKSA/IHdyYXBwZWQoKS5kb2N1bWVudCgpLT5jb250ZW50
U2VjdXJpdHlQb2xpY3koKSA6IG51bGxwdHI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxl
ZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDExICs1OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJmV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmZXhlYykpOwogCiAgICAgZG91YmxlIHN0YXJ0VGltZShleGVjLnVu
Y2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBk
b3VibGUgZW5kVGltZShleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvTnVtYmVyKCZleGVjKSk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2Fz
dGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwpAQCAtODcsNyArODcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgaWYgKHZhbHVlQXJndW1l
bnQuaXNDZWxsKCkgJiYgdmFsdWVBcmd1bWVudC5hc0NlbGwoKS0+aW5oZXJpdHMoc3RkOjpyZW1v
dmVfcG9pbnRlcjxKU0FycmF5QnVmZmVyKj46OnR5cGU6OmluZm8oKSkpIHsKIAogICAgICAgICBB
cnJheUJ1ZmZlciogZGF0YSA9IHRvQXJyYXlCdWZmZXIodmFsdWVBcmd1bWVudCk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25F
dmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwzMiArNDUsMzUgQEAgc3RhdGljIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYQog
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2ls
bCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50
b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWCA9
ICF4VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeCA9IHhWYWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInkiKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGJvb2wgY2FuUHJvdmlkZVkgPSAheVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAg
ZG91YmxlIHkgPSB5VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVlIHpWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ6IikpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVaID0gIXpWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjYW5Qcm92
aWRlWCAmJiAhY2FuUHJvdmlkZVkgJiYgIWNhblByb3ZpZGVaKQpAQCAtODQsMzIgKzg3LDM1IEBA
IHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb24KICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxk
IGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRl
KTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbHBoYSIpKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQWxwaGEgPSAh
YWxwaGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBhbHBoYSA9IGFscGhh
VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBKU1ZhbHVlIGJldGFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJiZXRhIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVCZXRhID0gIWJldGFWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBiZXRhID0gYmV0YVZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1
ZSBnYW1tYVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImdhbW1hIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBib29sIGNhblByb3ZpZGVHYW1tYSA9ICFnYW1tYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCk7CiAgICAgZG91YmxlIGdhbW1hID0gZ2FtbWFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJvdmlkZUFs
cGhhICYmICFjYW5Qcm92aWRlQmV0YSAmJiAhY2FuUHJvdmlkZUdhbW1hKQpAQCAtMTcwLDYgKzE3
Niw5IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW50ZXJ2YWwoRXgKIAogSlNWYWx1
ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2aWNlTW90aW9uRXZlbnQoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGNvbnN0IFN0cmluZyB0eXBlID0gc3RhdGUuYXJn
dW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBib29sIGJ1YmJs
ZXMgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKICAgICBib29sIGNhbmNl
bGFibGUgPSBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRlKTsKQEAgLTE3NywxNSAr
MTg2LDE1IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU0KICAgICAv
LyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRo
ZW0gYXMgbm90IHByb3ZpZGVkLgogICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBzdGFuZGFyZCBK
YXZhU2NyaXB0IGNvbnZlcnNpb24uCiAgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2Vs
ZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KHN0YXRlLmFy
Z3VtZW50KDMpLCBzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxl
cmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5h
cmd1bWVudCg0KSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0
aW9uUmF0ZSA9IHJlYWRSb3RhdGlvblJhdGVBcmd1bWVudChzdGF0ZS5hcmd1bWVudCg1KSwgc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGJv
b2wgaW50ZXJ2YWxQcm92aWRlZCA9ICFzdGF0ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3Bw
CShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRy
eUdldFByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSYgZmluYWxSZXN1
bHQpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICBib29sIHByb3BlcnR5Rm91bmQgPSBtX2luaXRpYWxpemVyT2JqZWN0
LmdldCgpLT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCBpZGVudGlmaWVyLCBbJl0gKGJvb2wgcHJv
cGVydHlGb3VuZCwgUHJvcGVydHlTbG90JiBzbG90KSAtPiBib29sIHsKQEAgLTg2LDcgKzg4LDcg
QEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBmaW5h
bFJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
blRocm93bjsKICAgICByZXR1cm4gcHJvcGVydHlGb3VuZCA/IFByb3BlcnR5Rm91bmQgOiBOb1By
b3BlcnR5Rm91bmQ7CiB9CkBAIC0xNTEsMTcgKzE1MywyMCBAQCB2b2lkIEpTRGljdGlvbmFyeTo6
Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkKIHsK
ICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3Ro
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7CiAgICAgfQpAQCAtMjIxLDYgKzIyNiw5IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252
ZXJ0VmFsdWUoRXhlY1N0YXQKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHJlc3VsdCkK
IHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICByZXN1bHQuY2xlYXIoKTsK
IAogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtMjI4LDEyICsyMzYsMTIg
QEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVj
LCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0
ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdC5hZGQoaXRlbVZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQpAQCAtMjk3LDE3ICszMDUsMjAgQEAgdm9pZCBKU0Rp
Y3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShKU0M6OkV4ZQogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZl
cnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiYgcmVzdWx0KQogewogICAgIEFTU0VSVChleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVu
Y2UoKmV4ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpT
VmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvIHN0cmVhbSA9IEpTTWVkaWFT
dHJlYW06OnRvV3JhcHBlZChpdGVtVmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAz
LDkgQEAgaW5saW5lIGJvb2wgSlNEaWN0aW9uYXJ5OjpnZXQoY29uc3QgY2hhcgogdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJlc3VsdD4KIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlS
ZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eUFuZFJlc3VsdChjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWUsIFQqIGNvbnRleHQsIHZvaWQgKCpzZXR0ZXIpKFQqIGNvbnRleHQsIGNvbnN0
IFJlc3VsdCYpKSBjb25zdAogeworICAgIEpTQzo6Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNWYWx1
ZSB2YWx1ZTsKICAgICBHZXRQcm9wZXJ0eVJlc3VsdCBnZXRQcm9wZXJ0eVJlc3VsdCA9IHRyeUdl
dFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIHN3aXRjaCAoZ2V0UHJvcGVydHlS
ZXN1bHQpIHsKQEAgLTIxMiw3ICsyMTUsNyBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVz
dWx0IEpTRGljdGlvCiAgICAgICAgIFJlc3VsdCByZXN1bHQ7CiAgICAgICAgIGNvbnZlcnRWYWx1
ZShtX2V4ZWMsIHZhbHVlLCByZXN1bHQpOwogCi0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvblRocm93bjsKIAogICAgICAgICBzZXR0ZXIoY29udGV4dCwg
cmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDE2ICsxNTQs
MTYgQEAgSlNWYWx1ZSBKU0RvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50KCkgPCA0KSkKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogICAgIGF1dG8gY29udGV4dElkID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvIHdpZHRoID0gY29udmVydDxpbnQzMl90Pihz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0
byBoZWlnaHQgPSBjb252ZXJ0PGludDMyX3Q+KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgzKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCB3cmFwcGVkKCkuZ2V0Q1NTQ2FudmFzQ29udGV4dChXVEZNb3ZlKGNvbnRleHRJZCksIFdU
Rk1vdmUobmFtZSksIFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCkpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2
aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTIgQEAgdm9pZCBKU0V2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnZtKCkpOworICAgIFZNJiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICAvLyBTZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNk
aXNwYXRjaGluZy1ldmVudHMgc3BlYyBvbiBjYWxsaW5nIGhhbmRsZUV2ZW50LgorICAgIC8vICJJ
ZiB0aGlzIHRocm93cyBhbiBleGNlcHRpb24sIHJlcG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQgc2hv
dWxkIG5vdCBwcm9wYWdhdGUgdGhlCisgICAgLy8gZXhjZXB0aW9uLgogCiAgICAgSlNPYmplY3Qq
IGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwog
ICAgIGlmICghanNGdW5jdGlvbikKQEAgLTEwOSw2ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIC8vIElmIGpzRnVuY3Rpb24gaXMgbm90IGFj
dHVhbGx5IGEgZnVuY3Rpb24sIHNlZSBpZiBpdCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVy
IGludGVyZmFjZSBhbmQgdXNlIHRoYXQKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5v
bmUpIHsKICAgICAgICAgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGpzRnVuY3Rpb24tPmdldChleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgRXhjZXB0aW9u
KiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKKyAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNl
cHRpb25JbkV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMs
IGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAg
fQogCkBAIC0xMjEsNyArMTM0LDYgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdAogICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVu
dEV2ZW50KCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsK
IAotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZNRW50cnlT
Y29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+Z2xvYmFs
T2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5j
dGlvbkNhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKQEAg
LTEzOCw3ICsxNTAsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0
CiAKICAgICAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkpIHsKICAgICAgICAgICAgIGF1dG8gc2NyaXB0Q29udHJvbGxlciA9IGRvd25jYXN0PFdv
cmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0gICAg
ICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigp
KSk7CisgICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoc2NvcGUu
ZXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4Y2Vw
dGlvbigpKSk7CiAgICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBz
Y3JpcHRDb250cm9sbGVyLT5pc1Rlcm1pbmF0aW5nRXhlY3V0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgc2NyaXB0Q29udHJvbGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAg
IEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNM
ZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgQVNTRVJUKGJsb2JQYXJ0cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcihleGVjLCBzY29wZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUiLCBu
dWxscHRyLCAiRE9NU3RyaW5nIik7CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmcudG9XVEZT
dHJpbmcoJmV4ZWMpLnJlcGxhY2UoJy8nLCAnOicpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXpl
ZFR5cGU7CkBAIC04Nyw3ICs4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAg
ICAgICAgIFN0cmluZyB0eXBlOwogICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUp
OwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgbm9ybWFsaXplZFR5cGUgPSBCbG9iOjpub3JtYWxp
emVkQ29udGVudFR5cGUodHlwZSk7CkBAIC05NSw3ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgLy8gT25seSB0cnkgdG8gcGFyc2UgdGhl
IGxhc3RNb2RpZmllZCBkYXRlIGlmIHRoZXJlIHdhcyBub3QgYW4gaW52YWxpZCB0eXBlIGFyZ3Vt
ZW50LgogICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgICFub3JtYWxpemVkVHlwZS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBsYXN0
TW9kaWZpZWQpOwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xMDcsNyArMTA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7
CiAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5
QnVmZmVyKGl0ZW0pKQpAQCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0
cmluZygmZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JC
dWlsZGVyLmFwcGVuZChzdHJpbmcsIEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9j
YXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsOSBAQCBzdGF0aWMgdm9pZCBzZXRNYXhpbXVtQWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0YXRp
YyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gQ3JlYXRlIGRl
ZmF1bHQgb3B0aW9ucy4KICAgICBhdXRvIG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0
ZSgpOwogCkBAIC04Miw3ICs4NSw3IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBj
cmVhdGVQb3MKIAogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlz
IHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VO
VVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZGlj
dGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICBKU0RpY3Rp
b25hcnkgZGljdGlvbmFyeShleGVjLCBvYmplY3QpOwpAQCAtOTksMTkgKzEwMiwyMiBAQCBzdGF0
aWMgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9sb2Nh
dGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlv
bkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9z
aXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxs
YmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25D
YWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0
aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxi
YWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTEyMSwxOSArMTI3
LDIyIEBAIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNWYWx1
ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQ
b3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1
dG8gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRp
b25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9z
aXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0
ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8
IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9u
cygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rp
b25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsOSBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAvLyBI
VE1MQWxsQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGgg
Z2V0IGFuZCBjYWxsLgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhU
TUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NSw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09
IDEpIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4K
ICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHBhcnNlSW5kZXgoKnN0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0
KCksIGNvbGxlY3Rpb24uaXRlbShpbmRleC52YWx1ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vj
b25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0
cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4
ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKICAgICAgICAgaWYg
KGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4
LnZhbHVlKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lm
IEVOQUJMRShXRUJHTCkKIHN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0
YXRlJiBzdGF0ZSwgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVu
dCgxKTsKICAgICBpZiAoaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5p
dGlhbGl6ZXJWYWx1ZS50b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7
CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsK
QEAgLTg0LDcgKzg3LDcgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0
KAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBl
KGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0
cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTEwNSwxNCArMTA4LDE0IEBAIEpTVmFsdWUgSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6cHJvYmFibHlTdXAKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMg
PSB3cmFwcGVkKCk7CiAgICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJp
YnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1l
bnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRl
cyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnN0cnVjdEpTCiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0Vs
ZW1lbnQoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1
Y3R1cmU8SlNIVE1MRWxlbWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBu
ZXdFbGVtZW50U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmUoJmV4ZWMsIG5ld1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxl
bWVudDo6Y3JlYXRlKGVsZW1lbnRJbnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAtOTgs
MTIgKzk4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAg
ICBBU1NFUlQoZWxlbWVudFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFsdWUg
bmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2Jq
ZWN0KGVsZW1lbnRXcmFwcGVyVmFsdWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxl
bWVudFdyYXBwZXJPYmplY3QsICZleGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhy
b3dJZkNhbnRTZXQgKi8pOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFz
dEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDE4ICs2MywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNT
dGF0ZSYgCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0
YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAg
ICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3Vu
dCA+IDIpIHsKICAgICAgICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51
bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05
NywxOCArOTcsMTggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdAog
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCksIDAsIDApOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIC8vIEZJWE1FOiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmlu
ZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7
CiAgICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJh
c2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIEpTVmFsdWUgSlNJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CkBAIC02
NiwxNyArNjYsMTcgQEAgSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQog
ICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRp
b25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQ
YXRoIikpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
CiAgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0
aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvSW5jcmVtZW50ID0g
b3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
YXV0b0luY3JlbWVudCIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVu
ZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xh
enlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk4LDYgKzk4LDkgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRp
YWxpegogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnczsKQEAgLTExMiw5ICsxMTUsOSBAQCBKU09iamVjdCogSlNMYXp5RXZl
bnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgICAgIGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFt
ZSksCiAgICAgICAgIG1fc291cmNlVVJMLCBtX3NvdXJjZVBvc2l0aW9uLCBvdmVycmlkZUxpbmVO
dW1iZXIpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9u
KGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTEy
MywxNCArMTI2LDEzIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoK
ICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsKICAg
ICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIg
dG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFz
cyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAg
IHNldFdyYXBwZXIoZXhlYy0+dm0oKSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
ICptX29yaWdpbmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIodm0sIGFzT2JqZWN0
KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQog
ICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVs
ZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNl
dFNjb3BlKGV4ZWMtPnZtKCksIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRI
YW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CisgICAgICAg
IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUodm0sIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVy
KCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29w
ZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlz
aW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTEgKzEwNywxNCBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1
ZSBpbml0aWF0b3IsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24p
CiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAKICAgICAgICAgSlNNYWluVGhy
ZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJl
dHVyblZhbHVlID0gSlNDOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgbW9kdWxlS2V5LCBp
bml0aWF0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLSAgICAgICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWU7CkBAIC0xMzEsOCArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAgICB+SlNNYWlu
VGhyZWFkRXhlY1N0YXRlKCkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc19tYWluVGhy
ZWFkU3RhdGUtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKCFz
X21haW5UaHJlYWRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIGJvb2wgZGlkRXhpdEphdmFT
Y3JpcHQgPSBzX21haW5UaHJlYWRTdGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQCBK
U1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAKIHN0YXRpYyBKU0M6OkpT
VmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlND
OjpFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5nJiB0
eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigm
c3RhdGUpOwogICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9v
bGVhbigmc3RhdGUpOwpAQCAtMTE2LDE2ICsxMTksMTYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBo
YW5kbGVJbml0TWVzc2FnZUV2ZQogICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2VfdW5p
cXVlPE1lc3NhZ2VQb3J0QXJyYXk+KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6bWFr
ZV91bmlxdWU8QXJyYXlCdWZmZXJBcnJheT4oKTsKICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJy
YXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZmZXJz
KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcoc3RhdGUudm0oKSwg
c3RhdGUuYXJndW1lbnQoMykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJnKHZtLCBzdGF0ZS5hcmd1bWVudCgzKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBNZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+d3JhcHBlZCgp
OwogICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5j
ZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcs
IFdURk1vdmUobWVzc2FnZVBvcnRzKSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNldChzdGF0ZS52
bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+bV9kYXRhLnNl
dCh2bSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDEyICs3MywxMiBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlCiAg
ICAgLy8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQuMS4x
My4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pT
U2VxdWVuY2Uoc3RhdGUsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9u
LW51bGwgb2JqZWN0cywgcGVyIEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXJyYXlCdWZm
ZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CiAg
ICAgICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFy
cmF5KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRl
ZmluZWQoKTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0
aW5nczo6c2V0RGVjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVl
LCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERl
Y2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+KG5h
dGl2ZVZhbHVlKSB9OwpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRv
RGVjaXNpb24oRXhlY1N0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZh
bHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBEZWNpc2lv
bjo6QWxsb3c7CiAKICAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9u
PihuYXRpdmVWYWx1ZSkgfTsKQEAgLTExOSw4ICsxMTksMTEgQEAgSlNWYWx1ZSBKU01vY2tDb250
ZW50RmlsdGVyU2V0dGluZ3M6OmRlYwogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
czo6c2V0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUp
IH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdyYXBwZWQoKS5zZXREZWNp
c2lvbihkZWNpc2lvbik7CkBAIC0xMzMsOCArMTM2LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29udGVu
dEZpbHRlclNldHRpbmdzOjp1bmIKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6
OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24g
eyB0b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgd3JhcHBlZCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVl
c3REZWNpc2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDExICs0OSwxMiBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAg
ICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMo
c3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCiAgICAgTmFrZWRQdHI8RXhj
ZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRhLT5p
bnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlv
bk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0Tm9kZSIpLCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCByZXR1
cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIC8v
IFJldGhyb3cgZXhjZXB0aW9uLgogICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUs
IHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTYyLDcgKzYzLDcgQEAgdWludDE2X3QgSlNOb2RlRmls
dGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIH0KIAogICAgIHVpbnQxNl90IHJlc3VsdCA9IGNv
bnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICBy
ZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JT
dHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmlu
Zy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIApAQCAtMzUsNiArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZl
Y3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9k
ZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBz
aXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKIAogICAgIFZlY3Rv
cjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsK
QEAgLTQ2LDcgKzUwLDcgQEAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxO
bwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFwcGVkKCkpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5z
YWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDEzICs0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUg
SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIAogICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgw
KS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBhc3NlbWJsZSB0aGUgbGlzdCBvZiBT
UUwgYXJndW1lbnRzCkBAIC02MywxNSArNjYsMTUgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9u
OjpleGVjdXRlU3FsKEV4ZQogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0g
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtODEsNyArODQsNyBA
QCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmlu
ZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZp
ZWRVCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHVu
aXRUeXBlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9y
YWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTYgKzc5LDE5
IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAogdm9pZCBKU1N0
b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTdG9yYWdlKj4ob2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKGVjKTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHByb3BlcnR5
TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3JhcHBl
ZCgpLmtleShpLCBlYykpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBA
IC05Nyw2ICsxMDAsOSBAQCB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09i
CiAKIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wm
IHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3Vz
dG9tIHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0
aGlzIG5hbWUuCiAgICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGlu
ZyBjYW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAg
ICAgLy8gdGhlIG5hdGl2ZSBwcm9wZXJ0eSBzbG90cyBtYW51YWxseS4KQEAgLTExMCw3ICsxMTYs
NyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIC8vIFRoZSByZXR1cm4g
dmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFuZGxlIHRoZSBw
dXQgb3BlcmF0aW9uICh3aGljaAogICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0aGUgY2FsbGVy
IG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGluZGljYXRlIHdo
ZXRoZXIKICAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRl
IHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMSBAQCB2b2lkIEpTVGV4dFRy
YWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiB2b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFn
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
d3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6
dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgp
LnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lkIEpTVmlkZW9U
cmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3Vh
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDEwICsxMDUsMTAgQEAgSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dEluZAogCiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IHdyYXBwZWQoKTsK
ICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigm
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJmV4ZWMpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRJbmRleGVkUGFyYW1ldGVyKHBuYW1lLCBpbmRleCk7CiAgICAg
cmV0dXJuIHRvSlMoJmV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgwLDEwICsxODAsMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0
UGFyYW1ldGVyKEpTV2ViRwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBu
YW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5m
bzsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKQEAgLTMwOCw3ICszMDgsNyBAQCBKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcgbmFt
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKICAg
ICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwpAQCAtMzMw
LDEzICszMzAsMTMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Um
IGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAg
ICAgaWYgKGVjKSB7CkBAIC0zNTcsNyArMzU3LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgcG5h
bWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZv
ID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTM4
MSw3ICszODEsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAg
ICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00MTAsNyArNDEwLDcgQEAgSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xT
aGFkZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgdW5zaWdu
ZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwog
ICAgIGlmIChlYykgewpAQCAtNDY5LDYgKzQ2OSw5IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXQKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IApAQCAtNDgxLDcgKzQ4NCw3IEBAIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0MKICAgICAKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmVjdG9yW2ld
ID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigmc3RhdGUpKTsKICAgICB9CkBAIC01MjksMTEg
KzUzMiwxMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAg
fSBlbHNlCiAgICAgICAgIGluZGV4ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQz
Migmc3RhdGUpOwogICAgIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMy
QXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAg
LTY4MCw3ICs2ODMsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChE
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICAKICAg
ICBib29sIHRyYW5zcG9zZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigm
c3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAK
ICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVD
cnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTQgQEAgZW51bSBj
bGFzcyBDcnlwdG9LZXlGb3JtYXQgewogCiBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4g
Y3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3Jp
dGhtSWRlbnRpZmllcjsKLSAgICBpZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0
QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkg
ewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2Vz
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigm
c3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNj
b3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVy
KTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTgxLDcgKzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRv
S2V5Rm9ybWF0RnJvbUpTVmFsdWUoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5Rm9ybWF0OjpSYXc7CkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRv
S2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkt
Pmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldElu
ZGV4KCZzdGF0ZSwgaSk7CiAgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5cHQi
KQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAgLTE0NSwx
NiArMTQ4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgKICAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVB
bGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYg
KCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5
cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgh
a2V5KQpAQCAtMTY3LDEwICsxNjgsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6
ZW5jcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBp
ZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpKTsKQEAgLTIwMSwxNiArMjAyLDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0
bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAg
YXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigp
IHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdvcml0
aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
cGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFt
ZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0
cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjIzLDEwICsyMjIsMTAgQEAgSlNWYWx1
ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09w
ZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09w
ZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIp
LCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFw
cGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTI1NiwxNiArMjU1LDE0IEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oJnN0YXRlLCBh
bGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAg
IGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAo
IXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAg
IFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjc4LDEwICsyNzUsMTAgQEAg
SlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAgIH0KIAogICAgIENy
eXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAg
ICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7
CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVm
ZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJy
ZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTMxMSwxNiArMzA4LDE0IEBAIEpTVmFs
dWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGUKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1
ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGht
KSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNj
b3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgm
c3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOwor
ICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0zMzMsMTYgKzMy
OCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgfQog
CiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwg
c2lnbmF0dXJlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsK
LSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSk7CisgICAgQVNTRVJUKHNj
b3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVk
V3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7
CkBAIC0zNzIsMjIgKzM2NywyMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkaWdl
c3QoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGht
ID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0p
OworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEg
ZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKTsKKyAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVy
ID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKQEAgLTQxNywzMCArNDEwLDI4IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OmdlbmVyYXRlS2UKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0
byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KCZzdGF0ZSwgYWxnb3Jp
dGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAo
IXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJh
bWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBib29s
IGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAy
KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9C
b29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7
CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGlmICghY3J5
cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlVc2Fn
ZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoMiksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJl
ZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpKTsKQEAgLTQ4NCw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXko
RXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDk3LDExICs0ODgsMTEg
QEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogCiAgICAgT3B0aW9u
YWw8Q3J5cHRvQWxnb3JpdGhtUGFpcj4gcmVjb25jaWxlZFJlc3VsdCA9IGtleVNlcmlhbGl6YXRp
b24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdvcml0aG0uZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkp
OwogICAgIGlmICghcmVjb25jaWxlZFJlc3VsdCkgewotICAgICAgICBpZiAoIXN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdvcml0aG0gc3Bl
Y2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0
S2V5IGFzIGFyZ3VtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBhbGdvcml0aG0gPSByZWNvbmNpbGVkUmVzdWx0LT5hbGdv
cml0aG07CkBAIC01MTMsMTUgKzUwNCwxNSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0
YXRlJiBzdGF0ZSwgCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5U2VyaWFsaXph
dGlvbi0+cmVjb25jaWxlRXh0cmFjdGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2FnZXMoa2V5
VXNhZ2VzKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBrZXlEYXRh
ID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzOSw0NSArNTMwLDQ0IEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNy
eXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9y
bWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8g
c3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwg
ZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNj
ZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBz
dWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBS
ZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAgICBpZiAoIXN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7CiAgICAgICAgIGFsZ29yaXRobSA9
IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgyKSk7Ci0gICAgICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
YWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICAgICAgfQorCiAgICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRl
LCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwot
ICAgICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0
ZXJzKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFs
c2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CiAgICAgICAgIGV4dHJh
Y3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpT
VmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBj
cnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVz
YWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAg
ICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVk
ID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAg
LTU5MCw3ICs1ODAsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXko
CiAgICAgfTsKIAogICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBkYXRh
LCBXVEZNb3ZlKGFsZ29yaXRobSksIFdURk1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBr
ZXlVc2FnZXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJh
Y2spKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBy
ZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CkBAIC02MTcsNyArNjA3LDcgQEAgc3Rh
dGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogICAgIH0KICAgICBjYXNlIENy
eXB0b0tleUZvcm1hdDo6SldLOiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBKU0NyeXB0b0tl
eVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7Ci0gICAgICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0g
cmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHRCdWZmZXI7CkBAIC02NDAsMTAgKzYzMCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjpleHBvcnRLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENy
eXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlG
b3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7Cisg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2Vz
cykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENy
eXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC02NTksNyArNjQ5LDcgQEAgSlNWYWx1ZSBKU1dl
YktpdFN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KAogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBv
cnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBX
VEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKQEAg
LTY3NCwxMCArNjY0LDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXko
RXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtl
eUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVl
KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBK
U0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBp
ZiAoIWtleSkKQEAgLTY5NCwxNiArNjg0LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlw
dG86OndyYXBLZXkoRXgKICAgICB9CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29y
aXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAg
aWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFs
Z29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0
ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJl
ZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAg
ICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC03NDYsMTYg
KzczNCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7
Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5RGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0
YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRL
ZXlEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQpA
QCAtNzY4LDQ0ICs3NTYsNDEgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFw
S2V5KAogICAgIH0KIAogICAgIGF1dG8gdW53cmFwQWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGht
RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAo
IXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0aG0pOworICAg
IGlmICghdW53cmFwQWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAgICAgYXV0byB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIHVud3JhcEFs
Z29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAg
aWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcEFs
Z29yaXRobVBhcmFtZXRlcnMpOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycykK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0
b0FsZ29yaXRobT4gdW53cmFwcGVkS2V5QWxnb3JpdGhtOwogICAgIFJlZlB0cjxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzOwogICAgIGlm
ICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxsKCkpIHsKICAgICAgICAgdW53cmFw
cGVkS2V5QWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAgICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0
aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0aG0pOworICAg
ICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobSkKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckltcG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtleUFs
Z29yaXRobVBhcmFtZXRlcnMpOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBh
cmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQog
ICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJn
dW1lbnRDb3VudCgpID49IDYpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNh
Z2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDcpIHsK
LSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoNiksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1Zh
bHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAg
IEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtODE5LDExICs4MDQsMTUgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgICAgICBhdXRvIGltcG9y
dEZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAgICAgICAgICAgd3Jh
cHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgICAgICB9OworCisgICAgICAgIFZNJiB2bSA9IGRv
bUdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCiAgICAgICAgIEV4ZWNTdGF0ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9y
bWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgdW53cmFw
cGVkS2V5QWxnb3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzLCBleHRyYWN0
YWJsZSwga2V5VXNhZ2VzLCBXVEZNb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUo
aW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBw
b3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdh
eSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgot
ICAgICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAg
ICAgICAgIH0KICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZleGVjKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gU2VlIHNlY3Rpb24gNC44LjIgc3Rl
cCAxNCBvZiBXZWJXb3JrZXJzIGZvciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9iamVj
dC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsMTMgKzYyLDE2IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRB
ZGRpdGlvbmEKIAogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8U3Ry
aW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENv
dW50KCk7ICsraSkgewogICAgICAgICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3RyaW5nKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwpAQCAtODcsNyArOTAsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNl
dFRpbWVvdXQoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJpdHlQ
b2xpY3koKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC0xMDQsNyArMTA3
LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAogICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9u
PiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxl
U3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3
IEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm8KICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIGZ1bmN0aW9uID0gb2Jq
ZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHByb3Bl
cnR5TmFtZSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgp
OwogCiAgICAgaWYgKCFmdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKQEAgLTcwLDE5ICs3MCwyMyBA
QCBKU0M6OkpTVmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAKIGJvb2wgUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aXNDb250cm9sbGVkUmVhZGFibGVTdHJlYW1Mb2Nr
ZWQoKSBjb25zdAogewotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOworICAgIGF1dG8gZ2xv
YmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCi0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50
RGF0YSk7CiAgICAgYXV0byByZWFkYWJsZVN0cmVhbSA9IG1fanNDb250cm9sbGVyLT5nZXQoJnN0
YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbVBy
aXZhdGVOYW1lKCkpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBhdXRvIGlzTG9j
a2VkID0gZ2xvYmFsT2JqZWN0KCktPmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRhYmxl
U3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0KCk7
CisgICAgYXV0byBpc0xvY2tlZCA9IGdsb2JhbE9iamVjdC0+YnVpbHRpbkludGVybmFsRnVuY3Rp
b25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1Mb2NrZWRG
dW5jdGlvbi5nZXQoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRz
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJlYW0pOwogICAgIGF1dG8gcmVzdWx0
ID0gY2FsbEZ1bmN0aW9uKHN0YXRlLCBpc0xvY2tlZCwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1
bWVudHMpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5pc1RydWUoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzQsOCArNzQsMTIgQEAgaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBS
ZWFkYWJsZVN0cmVhbQogCiBpbmxpbmUgYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyOjplbnF1ZXVlKFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiYmIGJ1ZmZlcikKIHsKLSAgICBK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoJnN0YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9iamVj
dCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFidWZmZXIpIHsKICAg
ICAgICAgZXJyb3Ioc3RhdGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoJnN0YXRlKSk7CkBAIC04
NCw4ICs4OCw4IEBAIGlubGluZSBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2wKICAg
ICBhdXRvIGxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIGF1dG8gY2h1bmsgPSBK
U0M6OlVpbnQ4QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAg
QVNTRVJUKGNodW5rKTsKLSAgICBlbnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIGNodW5rLmdldCgpKSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgZW5xdWV1ZShzdGF0ZSwgdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgY2h1bmsuZ2V0
KCkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEz
ICs0OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVs
ZWRBY3Rpb24+IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRE9NV3Jh
cHBlcldvcmxkJiBpc29sYXRlZFdvcmxkLCBDb250ZW50U2VjdXJpdHlQb2xpY3kqIHBvbGljeSkK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YSh2LCBjYWxsRGF0YSkgPT0g
Q2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2
YWwoZXhlYykpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgU3RyaW5nIHN0
cmluZyA9IHYudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxTY2hlZHVsZWRBY3Rpb24+KG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRl
ZFdvcmxkKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogYm9vbCBTY3JpcHRHbG9iYWxP
YmplY3Q6OnNldChFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNw
ZWN0b3JGcm9udGVuZEhvc3QmIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gc2NyaXB0U3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAg
IGdsb2JhbE9iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBu
YW1lKSwgdG9KUygmc2NyaXB0U3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7Ci0gICAgaWYg
KHNjcmlwdFN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigm
c2NyaXB0U3RhdGUsIHNjcmlwdFN0YXRlLmV4Y2VwdGlvbigpKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3Rh
dGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg5LDcgKzM4OSw5IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgc2hvdWxkVGVy
bWluYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOwor
ICAgICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwog
ICAgIH0KIAogICAgIHZvaWQgdGhyb3dTdGFja092ZXJmbG93KCkKQEAgLTI0NDgsNiArMjQ1MCw5
IEBAIHByaXZhdGU6CiAKIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6
ZGVzZXJpYWxpemUoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBWZWN0b3I8dWludDMyX3QsIDE2
PiBpbmRleFN0YWNrOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3Rh
Y2s7CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwpAQCAtMjQ2
OCw3ICsyNDczLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgog
ICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBK
U0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAwLCBtX2dsb2Jh
bE9iamVjdCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBw
ZW5kKG91dEFycmF5KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChvdXRB
cnJheSk7CkBAIC0yNzA2LDEzICsyNzExLDE2IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IFNlcmlhbGl6ZWQKIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVm
IGFwaVZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gdG9KUyhvcmlnaW5Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHRvSlMoZXhlYywgYXBpVmFsdWUpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4
ZWMsIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+
ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVChzZXJpYWxpemVkVmFsdWUpOwpAQCAtMjc0MSwx
MiArMjc0OSwxNSBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiBK
U1ZhbHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0UmVm
IGRlc3RpbmF0aW9uQ29udGV4dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhjZXB0
aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlv
bigpLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KICAgICBBU1NFUlQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIw
NTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2Vy
R2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAogICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwg
bV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRp
b24pOwogCkBAIC0xNDQsOSArMTQ0LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGUoY28KICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCku
c3RyaW5nKCk7CiAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGVycm9yOwogICAgICAg
ICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3Nh
Z2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBlcnJvciwgc291cmNlQ29k
ZS5jYWNoZWRTY3JpcHQoKSkpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7Ci0gICAgICAgICAg
ICByZXR1cm5lZEV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgdm0uY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2Uu
aW1wbCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9
IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVu
dGF0aW9uQ29udAogICAgICAgICBteSAkbmVlZEV4Y2VwdGlvbkNoZWNrID0gMDsKICAgICAgICAg
Zm9yZWFjaCBteSAkbWVtYmVyIChAeyRkaWN0aW9uYXJ5LT5tZW1iZXJzfSkgewogICAgICAgICAg
ICAgaWYgKCRuZWVkRXhjZXB0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAkcmVzdWx0IC49
ICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSlcbiI7CisgICAgICAgICAg
ICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSlcbiI7CiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICByZXR1cm4gTnVsbG9w
dDtcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdl
IHdpbGwgd2FudCB0aGlzIHRvIHNoYXJlIGEgbG90IG1vcmUgY29kZSB3aXRoIEpTVmFsdWVUb05h
dGl2ZS4KQEAgLTMxMjQsNyArMzEyNCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAg
ICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7CkBAIC0zMjIyLDcgKzMyMjIsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgbmF0aXZlVmFsdWUgPSAk
bmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2Vw
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkge1xuIik7CkBAIC0zMjMzLDcgKzMyMzMs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlU
aHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzk3OSw3ICszOTc5LDcgQEAgc3ViIEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIH1cbiIpCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBWZWN0b3I8JG5hdGl2ZUVsZW1lbnRUeXBlPiAkbmFtZSA9IHRv
TmF0aXZlQXJndW1lbnRzPCRuYXRpdmVFbGVtZW50VHlwZT4oKnN0YXRlLCAkYXJndW1lbnRJbmRl
eCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFtZSkiOwpAQCAtNDAxNCw3ICs0MDE0LDcg
QEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUg
PSBwYXJzZTwkY2xhc3NOYW1lPigqc3RhdGUsICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRp
bmRlbnQgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIkaW5kZW50ICAgIGlmIChVTkxJS0VMWSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICRhcmd1bWVudElu
ZGV4LCBcIiRuYW1lXCIsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlv
bk5hbWUsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKQEAg
LTQwMzcsNyArNDAzNyw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNV
bmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICAkbmFtZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAg
IGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlc
biIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKCEkbmFtZSkpXG4i
KTsKQEAgLTQwODAsNyArNDA4MCw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRl
cn0ke25hdGl2ZVZhbHVlfTtcbiIpOwogICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3Zl
KCRuYW1lKSI7CiAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIp
OwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC00NDYxLDcgKzQ0NjEsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1l
bnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4g
JGluZGVudCAuICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNl
cHRpb247CiAKICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNv
bnRhaW5zKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdp
dGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAk
aW5kZW50IC4gImlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAk
aW5kZW50IC4gIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CiAgICAgICAgIH0KIApAQCAtNTI3NSw3ICs1Mjc1LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAg
QXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAke2ludGVyZmFjZU5hbWV9SW5pdCBldmVudEluaXQ7CkBAIC01Mjg0LDcgKzUyODQsNyBA
QCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0
aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhl
IGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBK
U09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0
YXRlKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUg
ZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICAgICAg
SlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKQEAgLTU0
MjcsNyArNTQyNyw3IEBAIEVORAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsK
LSAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRw
dXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsK
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01P
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXYKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
bWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0Q3VzdG8KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5hbm90aGVyRnVuY3Rpb24oV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBl
dmVudFR5cGUgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50
b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50
Q29uc3RydWN0b3JJbml0IGV2ZW50SW5pdDsKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0
aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICAgICAgSlNPYmplY3QqIGluaXRp
YWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChzdGF0ZSk7Ci0gICAgICAg
IEFTU0VSVCghc3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3Jh
cHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAgICAgICAgIEpTRGljdGlvbmFyeSBk
aWN0aW9uYXJ5KHN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVu
dFRhcmdldC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNCw3ICsyMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBpbXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1CiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3Qq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0yODUsNyArMjg2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmli
dQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRSZWd1bGFy
QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5
Niw3ICsyOTcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9i
YWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zMDQsNyArMzA2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJs
aWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTMxNiw3ICszMTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjQsNyArMzI3LDcgQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzM3LDcgKzM0MCw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTM0NSw3ICszNDksNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRp
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtMzcyLDcgKzM3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
R2xvYmEKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5yZWd1bGFyT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZN
b3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC00MTYsNyArNDIwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdU
Rk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDEwICsyMzEsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0
U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VM
WSghY29udGV4dCkpCkBAIC02NjMsOSArNjYzLDEwIEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNl
Q29uc3RydWN0b3JJbXBsZW0KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRp
Y0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjc4LDcg
KzY3OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFj
ZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTY4Niw3ICs2ODgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltcGxlbWVu
dHNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3
ICs3MDEsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZh
Y2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC03MTYsNyArNzE5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShF
eAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtNzM5LDkgKzc0MywxMCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVj
dG9yU3VwcGxlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRh
bFN0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NzU0LDcgKzc1OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdElu
dGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTc2Miw3ICs3NjgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bFN0cjIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBXZWJDb3JlOjpU
ZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGltcGwsIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3NSw3ICs3ODEsOCBAQCBib29sIHNldEpT
VGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03OTIsNyArNzk5LDggQEAgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKAogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtODUyLDcgKzg2MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtOTMw
LDcgKzkzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAg
ICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpT
QnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyAr
MTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTMgKzkxLDEzIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhdXRvIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRl
ZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0
ZUZvckpTQ29uc3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIFdURk1vdmUoc3RyMSks
IFdURk1vdmUoc3RyMiksIFdURk1vdmUoc3RyMyksIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwNyw3ICsyMDcsOCBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3Rh
dGUsCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3ROb2RlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTIxNSw3ICsyMTYsNyBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUs
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjksNyArMzcwLDcgQEAgYm9v
bCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODAsNyArMzgx
LDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zODgsNyArMzkwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zOTksNyArNDAxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDcsNyArNDEwLDcgQEAg
Ym9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhj
ZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MTgsNyArNDIxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MjcsNyArNDMxLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNl
cHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjA1MzI0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyNSw5NyArNTI1LDk3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6
RGljdGlvbmFyeT4KICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51
bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVu
dW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVy
YXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBl
PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVu
dW1WYWx1ZTEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0g
Y29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRo
RW1wdHlTdHJpbmdEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIHN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdX
aXRoRGVmYXVsdCIpKSwgImRlZmF1bHRTdHJpbmciKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVs
dCA9IGNvbnZlcnRPcHRpb25hbDxTdHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSkpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5X
aXRoRGVmYXVsdCIpKSwgZmFsc2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc2VxdWVu
Y2VPZlN0cmluZ3MgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VP
ZlN0cmluZ3MiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91
YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gdW5yZXN0cmljdGVkRG91YmxlID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3Ry
aWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3Rl
ZERvdWJsZVdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4o
c3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6
OlllcywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJl
c3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9h
dCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0V2l0
aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVk
RmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRG
bG9hdFdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBz
bWFsbEludGVnZXJDbGFtcGVkID0gY29udmVydE9wdGlvbmFsPGludDhfdD4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVn
ZXJDbGFtcGVkIikpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252
ZXJ0T3B0aW9uYWw8aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252
ZXJ0T3B0aW9uYWw8dWludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2Ui
KSksIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9
IGNvbnZlcnRPcHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1
bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGludGVnZXIgPSBjb252ZXJ0T3B0aW9u
YWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJpbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2Vy
V2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1
bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlciA9IGNvbnZl
cnRPcHRpb25hbDx1aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVnZXIiKSksIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVp
bnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9u
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
CiAgICAgYXV0byBsYXJnZUludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUs
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJn
ZUludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZh
dWx0ID0gY29udmVydE9wdGlvbmFsPGludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQi
KSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29u
dmVydE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSks
IE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvKiBudWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBl
clR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxlTm9kZSIpKSwgSXNOdWxsYWJsZTo6WWVzKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAg
YXV0byBhbnlWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUi
KSksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnRPcHRpb25h
bDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpLCBqc1VuZGVmaW5lZCgpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0
byBkaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0
dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnkgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRob3V0
RGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShl
bnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShib29sZWFu
V2l0aERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksIFdURk1vdmUoc2Vx
dWVuY2VPZlN0cmluZ3MpLCBXVEZNb3ZlKHJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVz
dHJpY3RlZERvdWJsZSksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RG
TW92ZSh1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUocmVzdHJpY3RlZEZs
b2F0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0
V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHNtYWxsSW50ZWdlckNsYW1wZWQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0
KSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNt
YWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGludGVnZXIpLCBXVEZNb3Zl
KGludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92
ZShsYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXIp
LCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxh
YmxlTm9kZSksIFdURk1vdmUoYW55VmFsdWUpLCBXVEZNb3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRp
Y3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OwpAQCAtNjMxLDEzICs2MzEsMTMgQEAgdGVtcGxhdGU8
PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICB9CiAgICAgYXV0byByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RP
Ymo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVh
bldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXRE
ZWZhdWx0IikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byogbm9uTnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5v
ZGUsIEpTTm9kZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUiKSksIElzTnVsbGFibGU6Ok5vKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBy
ZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0
aW9uYXJ5PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RP
Ymo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJl
ZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksICpub25O
dWxsYWJsZU5vZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02NTUs
NyArNjU1LDcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0g
Y29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJv
b2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlU
aGF0U2hvdWxkVG9sZXJhdGVOdWxsIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92
ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC02NzMsNyArNjczLDcgQEAgdGVtcGxhdGU8
PiBPcHRpb25hbDxBbHRlcm5hdGVEaWN0aW9uYXJ5TgogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RP
Ymo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0
RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIp
KSk7CiAgICAgcmV0dXJuIEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIHsgV1RGTW92ZShlbnVtZXJh
dGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC0zMDkwLDkg
KzMwOTAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZwogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBUZXN0T2JqOjpzZXRTdGF0aWNTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTMxMDMsNyArMzEwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVz
dFN1Yk9iakVuYWJsZWRCeVNldHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTMxMTgsNyArMzEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0
dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTMxMjYsNyArMzEyOSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIo
RXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpz
dGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTM5LDcgKzMxNDIsOCBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4
ZWNTdGF0ZSogc3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zMTQ3LDcgKzMxNTEsNyBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNT
dGF0ZSogc3RhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJ5dGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNTgsNyArMzE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
T2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTMxNjYsNyArMzE3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0
ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTc3LDcgKzMxODIsOCBAQCBib29s
IHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTg1LDcgKzMxOTEsNyBAQCBib29sIHNl
dEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE5Niw3ICsz
MjAyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIwNCw3ICszMjEx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENsYW1w
ZWRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MzIxNSw3ICszMjIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIo
RQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIy
Myw3ICszMjMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5n
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzIzNCw3ICszMjQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpV
bnNpZ25lZFNob3J0QXR0cihFeGVjUwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzI0Miw3ICszMjUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNp
Z25lZFNob3J0QXR0cihFeGVjUwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNTMsNyArMzI2Miw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyNjEsNyArMzI3MSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dExvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMy
NzIsNyArMzI4Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyODAs
NyArMzI5MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zMjkxLDcgKzMzMDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVk
TG9uZ0xvbmdBdHRyKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zMjk5LDcgKzMzMTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9u
Z0xvbmdBdHRyKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzMxMCw3ICszMzIyLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzMxOCw3ICszMzMxLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzMjksNyArMzM0Miw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzMzcsNyArMzM1MSw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmlu
ZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzQ4LDcgKzMzNjIsOCBAQCBib29sIHNldEpTVGVz
dE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzY5LDcgKzMzODQsOCBAQCBib29sIHNldEpTVGVzdE9i
alRlc3ROdWxsYWJsZU9iakF0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zMzkzLDcgKzM0MDksOCBAQCBib29sIHNldEpTVGVzdE9iakxl
bmllbnRUZXN0T2JqQXR0cihFeGVjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNDE0LDcgKzM0MzEsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zNDIyLDcgKzM0NDAsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0
dHJUcmVhdGluZ051bGxBCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNDMzLDcgKzM0NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGlu
Z051CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
NDQxLDcgKzM0NjAsNyBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDUyLDcg
KzM0NzEsOCBAQCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDYwLDcgKzM0
ODAsNyBAQCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1lPigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtF
TFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ3Myw3ICszNDkz
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ5NCw3ICszNTE1LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzUwMiw3ICszNTI0LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1MTMsNyArMzUzNSw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTM1MjEsNyArMzU0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTMyLDcgKzM1NTUsOCBAQCBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zNTQwLDcgKzM1NjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3Rh
dGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU1MSw3ICszNTc1LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU1OSw3ICszNTg0LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTcwLDcgKzM1OTUsOCBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTc4LDcgKzM2MDQsNyBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVu
c2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzU4OSw3ICszNjE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRC
b29sZWFuQXR0cihFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzU5Nyw3ICszNjI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29s
ZWFuQXR0cihFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRy
QXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwOCw3
ICszNjM1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzYxNiw3ICsz
NjQ0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2MjcsNyArMzY1
NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2MzUsNyArMzY2NCw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJB
dHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjQ2LDcg
KzM2NzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjU0LDcgKzM2
ODQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0
ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NjUs
NyArMzY5NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2NzMsNyAr
MzcwNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29u
dGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM2ODQsNyArMzcxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3Vz
dG9tQm9vbGVhbkEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTM2OTIsNyArMzcyNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9t
Qm9vbGVhbkEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJv
b2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0
dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzAz
LDcgKzM3MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzExLDcg
KzM3NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0
ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MjMs
NyArMzc1Niw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3MzEsNyAr
Mzc2NSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
NzQzLDcgKzM3NzcsOCBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzUx
LDcgKzM3ODYsNyBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZh
bHVlKSkgewogICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOwpAQCAt
Mzc2Niw3ICszODAxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc3
NCw3ICszODEwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc4NSw3ICszODIxLDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc5Myw3ICszODMwLDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJF
eGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zODA0LDcgKzM4NDEsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zODEzLDcgKzM4NTEsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KHN0YXRlLCBlYyk7CkBAIC0zODI1LDcgKzM4NjMsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zODM0LDcgKzM4NzMsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRo
U2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUp
LCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODQ2LDcgKzM4ODUs
OCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODU0LDcgKzM4OTQsNyBA
QCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhj
ZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjUs
NyArMzkwNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4NzQsNyAr
MzkxNSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwg
ZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtMzg4Niw3ICszOTI3LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkwMSw3ICszOTQzLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkxNiw3ICszOTU5LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzMSw3ICszOTc1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzOSw3ICszOTg0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlw
dFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzk1MCw3ICszOTk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdp
dGhBbmRTZXR0ZXJDYQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzk1OCw3ICs0MDA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhB
bmRTZXR0ZXJDYQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhB
dHRyaWJ1dGUoKnN0YXRlLCBhY3RpdmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhz
dGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5Njks
NyArNDAxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5OTMsNyAr
NDA0MCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMTQsNyArNDA2
Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMzgsNyArNDA4Nyw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNjIsNyArNDExMiw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwODYsNyArNDEzNyw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMTAsNyArNDE2Miw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZEMKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMzIsNyArNDE4NSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxNDAsNyArNDE5NCw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFs
QXR0cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE1Myw3
ICs0MjA3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE2MSw3ICs0
MjE2LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC00MTc0LDcgKzQyMjksOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlv
bmFsQXR0cjMoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MTgyLDcgKzQyMzgsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFs
QXR0cjMoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxOTUsNyArNDI1MSw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMTIsNyArNDI2OSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMjksNyArNDI4Nyw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNDUsNyArNDMwNCw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNjIsNyArNDMyMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
TXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQyODYsNyArNDM0Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1t
dXRhYmxlUG9pbnQoRXhlY1N0YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQzMTAsNyArNDM3Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdi
ZXJyeShFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQzMTgsNyArNDM4MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJy
eShFeGVjU3RhdGUqIHMKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzI5LDcgKzQzOTIsOCBAQCBib29sIHNldEpT
VGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzM3LDcgKzQ0MDEsNyBAQCBib29sIHNldEpTVGVz
dE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzQ4LDcgKzQ0MTIsOCBAQCBib29s
IHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzYzLDcgKzQ0MjgsOCBAQCBib29sIHNl
dEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzcxLDcgKzQ0MzcsNyBAQCBib29sIHNldEpT
VGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxv
bmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC00MzgyLDcgKzQ0NDgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5n
U2V0dGFibGVBCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC00MzkwLDcgKzQ0NTcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0
dGFibGVBCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQwMSw3ICs0NDY4
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQwOSw3ICs0NDc3LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXROdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MjAsNyArNDQ4OCw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0MjgsNyArNDQ5Nyw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3Ry
aW5nVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQz
OSw3ICs0NTA4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3
ICs0NTE3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVO
TElLRUxZKCFuYXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0NjAsNyAr
NDUzMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0NjksNyArNDU0
MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKICAgICBSZWY8
VGVzdE5vZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUoKTsKICAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFt
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDgwLDcgKzQ1
NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDkxLDcgKzQ1NjMs
NyBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDUwMiw3ICs0NTc0LDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDUxMCw3ICs0NTgzLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTQ2LDcgKzQ2MTks
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGlt
ZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC00NTY5LDcgKzQ2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRl
c3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDYyNywxMCArNDcwMCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVu
dCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDY2OCwxMCArNDc0MSwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3Rh
dGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzA5LDEw
ICs0NzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6
dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcp
KQpAQCAtNDc1MCwxMCArNDgyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFvYmpBcmcpKQpAQCAtNDc5MSwxMCArNDg2NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdB
cmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDgzMiw3ICs0OTA1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBhcmcgPSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKGFyZykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00ODUyLDcgKzQ5MjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJ
S0VMWSghcmVzb2x2ZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdp
dGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7CkBAIC00ODk4
LDcgKzQ5NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51
bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTQ5MjAsNyArNDk5Myw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0
YXRlLT5hcmd1bWVudCgwKTsKICAgICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1
dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1B
cmdWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51
bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpA
QCAtNDk0NCw3ICs1MDE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBlbnVtQXJnOwogICAgIGlmICgh
ZW51bUFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZW51bUFyZyA9IHBhcnNlPFRl
c3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIWVudW1BcmcpKQogICAgICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1Bcmci
LCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5
NzAsNyArNTA0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICAgICAgZW51bUFyZyA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1U
eXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAi
ZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZh
dWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigp
KTsKQEAgLTQ5OTUsNyArNTA2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFy
ZykpCkBAIC01MDIwLDcgKzUwOTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZT
dHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MDQwLDcgKzUxMTMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2so
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUwNjAsNyArNTEzMyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92
ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTA4MCw3ICs1MTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFs
aXplZEFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC01MTc5LDcgKzUyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdU
Rk1vdmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpA
QCAtNTE5OSw3ICs1MjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0
ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKQEAgLTUyMTksMTMgKzUyOTIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVu
dCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRF
dmVudExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBz
dGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5hZGRFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92
ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTUyNDUsMTMgKzUzMTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwg
KmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJyZW1vdmVFdmVu
dExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0
ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92
ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTUyODQsNyArNTM1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIGltcGwud2l0aFNjcmlwdFN0YXRlT2JqKCpzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01MzIxLDcgKzUzOTQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53
aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCBlYykpOwogCiAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTUzODAsNyArNTQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCwgZWMpKTsK
IAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDAwLDcgKzU0NzMsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMo
KnN0YXRlLCAqY29udGV4dCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDg2LDcgKzU1NTksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTA0LDcg
KzU1NzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9
IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVm
YXVsdFZhbHVlKFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU1MjQsMTAgKzU1OTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQg
PSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1l
bnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRPcHRpb25hbEFyZyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NDcsMTMgKzU2MjAsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQz
Ml90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0
MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1v
dmUob3B0MSksIFdURk1vdmUob3B0MikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC01NTcxLDcgKzU2NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
ZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01NTg5LDcgKzU2NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5n
KCkgOiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmlu
ZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01NjA3LDcgKzU2ODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0
b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21p
Y1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2MjUsNyArNTY5OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImZvbyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY0Myw3ICs1NzE2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVl
KFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU2NjEsNyArNTczNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmco
KSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKFdU
Rk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTU2NzksNyArNTc1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5l
ZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01Njk3LDcgKzU3NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0
b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21p
Y1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MTUsNyArNTc4OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MzMsNyArNTgwNiw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogdmFsdWVUb1VTVlN0cmlu
ZyhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1v
dmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU3NTEsNyArNTgyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzY5LDcgKzU4NDIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8ZG91Ymxl
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNO
YU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNTc4Nyw3ICs1ODYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODA1LDcgKzU4
NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9
IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6
IGNvbnZlcnQ8aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhP
cHRpb25hbExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MjMsNyArNTg5Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxpbnQ2NF90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShu
dW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTg0MSw3ICs1OTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVp
bnQ2NF90PigpIDogY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg1OSw3ICs1OTMy
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBj
b252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5z
aWduZWRMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODc3LDcgKzU5NTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oKSA6IHRvTmF0aXZlQXJy
YXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShh
cnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
ODk1LDcgKzU5NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5n
PigpIDogdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxT
ZXF1ZW5jZUlzRW1wdHkoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTEzLDcgKzU5ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IE9wdGlvbmFsPGJvb2w+KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9C
b29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxCb29sZWFuKFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC01OTMxLDcgKzYwMDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFu
SXNGYWxzZShXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNjAwOSw3ICs2MDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyID0gbnVs
bHB0cjsKICAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
CiAgICAgICAgIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVyKSkKICAgICAgICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVy
IiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQ
YXRoTlNSZXNvbHZlciIpOwpAQCAtNjA1Miw3ICs2MTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25D
YWxsYmFjayA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0
YXRlLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwg
IlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsK
QEAgLTYxMTYsNyArNjE4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSku
aXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAi
bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwpAQCAtNjI0
OSw3ICs2MzIyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0
T2JqIik7CiAgICAgfQogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0
aG9kKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI3NSw3ICs2MzQ4LDcgQEAgc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RP
YmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8g
bG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50
MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92
ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI5NSw3ICs2MzY4LDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RG
TW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNjMxNSw3ICs2Mzg4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdB
cmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjM3
OCw3ICs2NDUxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0MTgsNyArNjQ5MSw3IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC02NDM4LDcgKzY1MTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0g
dG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFy
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDU4
LDcgKzY1MzEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC02NTQ2LDcgKzY2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIFRlc3RPYmoqIG9iakFyZyA9IG51bGxwdHI7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1l
bnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgewpAQCAtNjU3OCw3ICs2NjUxLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRl
c3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0
T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0
ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjYyNCw3ICs2Njk3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAg
ICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdU
Rk1vdmUoYXJnKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY2
NDksNyArNjcyMiw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28K
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY2NjYsNyArNjczOSw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qx
KFdURk1vdmUodHlwZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC02NzA5LDEwICs2NzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0g
Y29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZN
b3ZlKG9iakFyZ3NMb25nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTY3MzIsMTAgKzY4MDUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQg
PSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJh
bmdlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8
dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZN
b3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjc1NSw3ICs2ODI4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5j
ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Nzc2
LDcgKzY4NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJy
YXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVu
Y3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02ODIxLDEwICs2ODk0LDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbnVsbGFibGVB
cnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51
bGxhYmxlU2VxdWVuY2UoV1RGTW92ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFy
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02ODQ0
LDcgKzY5MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0
ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0
YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92
ZShlbGVtZW50SWQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAt
NjkyNyw3ICs3MDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVy
dDMoV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC02OTQ3LDcgKzcwMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwMTIsMTAg
KzcwODUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFp
bCA9IHRvTmF0aXZlQXJndW1lbnRzPFN0cmluZz4oKnN0YXRlLCAxKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC52YXJpYWRpY1N0cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3Zl
KHRhaWwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NzAzNSwxMCArNzEwOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PGRvdWJsZT4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1
bWVudHM8ZG91YmxlPigqc3RhdGUsIDEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZh
cmlhZGljRG91YmxlTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MDg3LDEwICs3MTYwLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBiID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW55KFdURk1v
dmUoYSksIFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC03MTM3LDcgKzcyMTAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PGZs
b2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5v
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZs
b2F0QXJndW1lbnQoV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzE4NCw3ICs3MjU3LDcgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRp
b25hbEludEFyZ3VtZW50KFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcyMTAsNyArNzI4Myw3IEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKFdURk1vdmUoYSksIERlZmVycmVkV3Jh
cHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTczMjQsNyArNzM5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb25kaXRp
b25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTczNDcsNyArNzQyMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RG
TW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTczOTAsNyArNzQ2Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zaW5nbGVD
b25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0MTEsNyArNzQ4NCw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFs
T3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTc0NTAsNyArNzUyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5pdCA9IGNvbnZl
cnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KGluaXQu
dmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlz
aW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyAr
NzUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihzdGF0ZS0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5
QnVmZmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMi
LCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyVmlldykp
CiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51
bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnM6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1v
dmUob2JqZWN0KSkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAg
QVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIFZlY3RvcjxpbnQzMl90PiBsb25nQXJncyA9IHRvTmF0
aXZlQXJndW1lbnRzPGludDMyX3Q+KCpzdGF0ZSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3Zl
KGxvbmdBcmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4o
c3RhdGUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1
ZW5jZU9mU3RyaW5ncyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9y
PFN0cmluZz4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVl
bmNlT2ZTdHJpbmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVh
dGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7
CkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0
SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpl
Y3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1v
dmUoc3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVk
KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMDUzMjQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIw
NTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEs
NyArMjUxLDggQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjU5LDcgKzI2MCw3
IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3
MCw3ICsyNzEsOCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yNzgsNyArMjgw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5
cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwpAQCAtMzYwLDcg
KzM2MCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXQKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZz
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
NjgsNyArMzY5LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3OSw3ICszODAsOCBAQCBib29sIHNldEpTVGVzdFR5
cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg3LDcgKzM4OSw3IEBAIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltbXV0YWJsZVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zOTgsNyArNDAwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0
dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZz
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQwNiw3ICs0MDksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldp
dGhHZXR0ZXJFeGNlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTcsNyArNDIwLDggQEAg
Ym9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNiw3ICs0MzAs
NyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUo
bmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00
MzgsNyArNDQyLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQ0Niw3ICs0NTEsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhH
ZXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmlu
Z0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ1Nyw3ICs0NjIsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5n
QXR0cldpdGhTZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlw
ZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtNDY2LDcgKzQ3Miw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNT
dHJpbmdBdHRyV2l0aFNldHQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlv
bihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOwpAQCAtNDkxLDcgKzQ5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0VHlwZWQKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byB4ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0
b3I8aW50MzJfdD4oKSA6IHRvTmF0aXZlQXJyYXk8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoV1RG
TW92ZSh4KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTUxMSwxOSArNTE3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlw
ZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxmbG9hdD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgyKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gY29sb3IgPSBzdGF0ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/
IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkgOiBjb252ZXJ0PGZsb2F0Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCg0KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olll
cyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2V0U2hhZG93KFdURk1vdmUod2lkdGgp
LCBXVEZNb3ZlKGhlaWdodCksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoY29sb3IpLCBXVEZNb3Zl
KGFscGhhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU0Myw3ICs1NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVk
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRp
dmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShz
ZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01
NjMsNyArNTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8
U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MywxMCArNTg5LDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYXJnMiA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkg
OiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
Q2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92
ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTYyMiw3ICs2MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdFR5cGVkCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02
NDUsNyArNjUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Fy
cmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5j
ZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY2Nyw3ICs2NzMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRU
YXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuY2Fs
bFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsMTIg
QEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBpZiAo
IXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0
LgogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXA7CkBAIC0xOTMsNyArMTk3LDcg
QEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogCiAgICAgICAgIC8v
IENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAg
ICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAogICAgIH0KIApAQCAtMjI1LDggKzIy
OSwxMyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAg
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICgh
cm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKwor
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5j
dGlvbiwgY2FsbERhdGEpOwpAQCAtMjQwLDcgKzI0OSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQ
IG5wcCwgTlBPYmplY3QqIG8sIE4KIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhl
IHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAgICAgY29udmVydFZhbHVlVG9OUFZh
cmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0yNjAsMTQgKzI2OSwxOCBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQ
LCBOUE9iamVjdCogbywgTlBTCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVj
dC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVj
dCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0
U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAgCi0gICAgICAgIEpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVl
KCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBt
YWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjg0LDEwICsyOTcsMTQgQEAgYm9v
bCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RP
YmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nh
c3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlm
IChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVj
LCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMjk1
LDcgKzMxMiw3IEBAIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAg
ICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaS0+bnVtYmVyKCkpOwogCiAg
ICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzE4LDggKzMzNSwxMiBA
QCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICgh
cm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwor
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+
KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAgLTMyNyw3
ICszNDgsNyBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAg
ICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVu
dGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlh
bnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBzbG90KTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmot
PmltcCwgZXhlYywgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZh
cmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtMzQ2LDI3ICszNjcsMzIgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5
KE5QUCwgTlBPYmplY3QqIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
ICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwor
CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
cHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAg
IGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGV4ZWMsIGktPnN0cmluZygpKSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVy
KCkpKSB7Ci0gICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+
aW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRp
ZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCkpOwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODEsMTcgKzQwNywyMSBAQCBi
b29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9v
dE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVj
dC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNf
Y2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBv
YmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDEwICs0NDQsMTQgQEAgYm9vbCBfTlBO
X0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICBpZiAoIXJvb3RPYmplY3Qg
fHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRp
ZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMu
aXNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgCkBAIC00NDMsOCArNDc3LDEyIEBAIGJvb2wgX05Q
Tl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0
IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0
UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOwpAQCAtNDU4LDcgKzQ5Niw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9i
amVjdCogbywgTlAKICAgICAgICAgKmlkZW50aWZpZXIgPSBpZGVudGlmaWVyczsKICAgICAgICAg
KmNvdW50ID0gc2l6ZTsKIAotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkBAIC00NzksOSArNTE3LDEzIEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVj
dCogbywgY28KICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVj
dDsKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0
aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2Jq
LT5pbXA7CkBAIC00OTYsNyArNTM4LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2Jq
ZWN0KiBvLCBjbwogICAgICAgICAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSBy
ZXN1bHQuCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJl
c3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDUzMjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgsMTQgKzY4LDEzIEBAIHZvaWQgQ0luc3RhbmNlOjpzZXRHbG9iYWxFeGNlcHRpb24oU3Ry
aW4KIAogdm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVj
U3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3Ry
aW5nKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9u
IDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVJ
bnRlcm5hbC5oPgogI2ltcG9ydCA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxy
dW50aW1lL0NhdGNoU2NvcGUuaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2lt
cG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0Lmg+CkBAIC0xMjksOCArMTMwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShl
eGVjLCBleGNlcHRpb24pOwogfQogCkBAIC0zMzQsOSArMzM3LDEyIEBAIC0gKGlkKWNhbGxXZWJT
Y3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8v
IExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
OworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VE
X1BBUkFNKHNjb3BlKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBd
LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTM2OSwxMCArMzc1LDEyIEBAIC0gKGlkKWV2YWx1
YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3Jp
cHRdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVO
VVNFRF9QQVJBTShzY29wZSk7CiAgICAgCiAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpwcm9maWxlZEV2YWx1YXRlKGV4ZWMsIEpTQzo6UHJvZmls
aW5nUmVhc29uOjpPdGhlciwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1
ZSgpKTsKIApAQCAtMzg2LDE3ICszOTQsMTkgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUg
Zm9yS2V5OihOU1N0cgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6Ompz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPihbc2VsZiBfaW1wXSk7CiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2Jq
Y1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9i
amVjdF0pLCBzbG90KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9D
b25zb2xlKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIH0KIApAQCAtNDA1LDIyICs0MTUsMjUgQEAg
LSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZl
U2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQogICAgIGlkIHJlc3VsdE9iajsKICAgICB7Cisg
ICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKICAgICAgICAg
Ly8gTmVlZCB0byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUg
bG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3
aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3Ry
dWN0b3IsCiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgCisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworCiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKICAgICAgICAg
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNv
bGUoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0
IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBf
b3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNDM3
LDE1ICs0NTAsMTcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawog
ICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGds
b2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0
byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmco
a2V5KSkpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
ZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkBAIC00NTQsMTUgKzQ2OSwxNyBAQCAtIChCT09M
KWhhc1dlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVT
Y3JpcHRdKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBf
cm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09M
IHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFk
ZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwpAQCAtNDkwLDE2ICs1MDcsMTggQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4
Oih1bnNpZ25lZClpbgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0g
W3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2Jq
ZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2Vs
ZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAt
NTEyLDE1ICs1MzEsMTcgQEAgLSAodm9pZClzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2ln
bgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
YXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4
KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywg
JnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCi0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1
MzI0KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDkgQEAgc3RhdGljIGJvb2wg
Y29udGFpbnNPbmx5QVNDSUlXaXRoTm9VcHBlcgogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QqIGFycmF5T2Jq
ZWN0LCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQo
dmVjdG9yLmlzRW1wdHkoKSk7CiAgICAgaWYgKCFhcnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFy
cmF5T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTklu
dmFsaWREb21haW5MaXN0OwpAQCAtNzEsNyArNzQsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2Rl
IGdldERvbWFpbkxpc3QoRXhlCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBj
b25zdCBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJl
dHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAg
ICAgCiAgICAgICAgIC8vIERvbWFpbnMgc2hvdWxkIGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIg
Y2FzZS4KQEAgLTg3LDExICs5MCwxNCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFp
bkxpc3QoRXhlCiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0
ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywg
dWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYpKQogeworICAgIFZNJiB2bSA9
IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBpZiAoIXR5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgY29uc3QgSlNPYmplY3QqIG9iamVjdCA9IHR5cGVWYWx1ZS50b09iamVjdCgmZXhlYyk7Ci0g
ICAgQVNTRVJUKCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKQogICAgICAgICByZXR1cm4gQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCkBAIC0x
MDAsNyArMTA2LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9
IGFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2Jq
ZWN0SW5UcmlnZ2VyRmxhZ3NBcnJheTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBuYW1lID0g
dmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMTE2LDEyICsxMjIsMTUgQEAgc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3Jf
Y29kZSBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2Jq
ZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBKU1ZhbHVl
IHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmZXhlYywgInRyaWdnZXIiKSk7Ci0gICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8IGV4ZWMu
aGFkRXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIXRy
aWdnZXJPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRU
cmlnZ2VyOwogICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dl
ck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmls
dGVyIikpOwotICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkg
fHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKQorICAgIGlmICghdXJsRmlsdGVyT2JqZWN0
IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKICAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRVUkxGaWx0ZXJJ
blRyaWdnZXI7CiAKICAgICBTdHJpbmcgdXJsRmlsdGVyID0gdXJsRmlsdGVyT2JqZWN0LnRvV1RG
U3RyaW5nKCZleGVjKTsKQEAgLTEzMSwxMSArMTQwLDExIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICB0cmlnZ2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsK
IAogICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5n
ZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNh
c2Utc2Vuc2l0aXZlIikpOwotICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIWV4ZWMuaGFk
RXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQorICAgIGlmICh1
cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VW
YWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRp
dmUgPSB1cmxGaWx0ZXJDYXNlVmFsdWUudG9Cb29sZWFuKCZleGVjKTsKIAogICAgIGNvbnN0IEpT
VmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgInJlc291cmNlLXR5cGUiKSk7Ci0gICAgaWYgKCFleGVj
LmhhZEV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBp
ZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsK
ICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJj
ZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZFJlc291cmNlVHlwZSk7CiAgICAgICAgIGlm
ICh0eXBlRmxhZ3NFcnJvcikKICAgICAgICAgICAgIHJldHVybiB0eXBlRmxhZ3NFcnJvcjsKQEAg
LTE0Myw3ICsxNTIsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNT
CiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dl
ckZsYWdzQXJyYXk7CiAKICAgICBjb25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2Vy
T2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlw
ZSIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09i
amVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlz
T2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhl
eGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCByZWFkTG9hZFR5cGUpOwogICAgICAg
ICBpZiAodHlwZUZsYWdzRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7
CkBAIC0xNTEsNyArMTYwLDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihF
eGVjUwogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRy
aWdnZXJGbGFnc0FycmF5OwogCiAgICAgY29uc3QgSlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJP
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWlu
IikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgp
KSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7
CiAgICAgICAgIGF1dG8gaWZEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmpl
Y3QoaWZEb21haW4pLCB0cmlnZ2VyLmRvbWFpbnMpOwogICAgICAgICBpZiAoaWZEb21haW5FcnJv
cikKICAgICAgICAgICAgIHJldHVybiBpZkRvbWFpbkVycm9yOwpAQCAtMTYzLDcgKzE3Miw3IEBA
IHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwogICAgIAogICAg
IGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxlc3MtZG9tYWluIikpOwotICAgIGlmICgh
ZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW4uaXNPYmplY3QoKSkgeworICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKICAgICAg
ICAgaWYgKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uICE9IFRyaWdnZXI6OkRvbWFpbkNvbmRpdGlv
bjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05V
bmxlc3NBbmRJZkRvbWFpbjsKICAgICAgICAgYXV0byB1bmxlc3NEb21haW5FcnJvciA9IGdldERv
bWFpbkxpc3QoZXhlYywgYXNPYmplY3QodW5sZXNzRG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsK
QEAgLTE4OSwxMyArMTk4LDE2IEBAIHN0YXRpYyBib29sIGlzVmFsaWRTZWxlY3Rvcihjb25zdCBT
dHJpbmcKIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhl
YywgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmplY3QsIEFjdGlvbiYgYWN0aW9uLCBib29sJiB2YWxp
ZFNlbGVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB2YWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAg
ICBjb25zdCBKU1ZhbHVlIGFjdGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiYWN0aW9uIikpOwotICAgIGlmICghYWN0aW9uT2Jq
ZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQor
ICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmpl
Y3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRBY3Rpb247CiAKICAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25P
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidHlwZSIpKTsK
LSAgICBpZiAoIXR5cGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVj
dC5pc1N0cmluZygpKQorICAgIGlmICghdHlwZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8
fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGU7CiAKICAgICBTdHJpbmcgYWN0aW9uVHlwZSA9
IHR5cGVPYmplY3QudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMjA4LDcgKzIyMCw3IEBAIHN0YXRp
YyBzdGQ6OmVycm9yX2NvZGUgbG9hZEFjdGlvbihFeGVjU3QKICAgICAgICAgYWN0aW9uID0gQWN0
aW9uVHlwZTo6QmxvY2tDb29raWVzOwogICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1k
aXNwbGF5LW5vbmUiKSB7CiAgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3Qu
Z2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0g
ICAgICAgIGlmICghc2VsZWN0b3IgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3Iu
aXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzY29wZS5leGNlcHRpb24oKSB8
fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlOwogCiAgICAgICAg
IFN0cmluZyBzID0gc2VsZWN0b3IudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMjQ2LDE3ICsyNTgs
MjAgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkUnVsZShFeGVjU3RhdAogCiBzdGF0aWMg
c3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBT
dHJpbmcmIHJ1bGVzLCBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlzdCkKIHsK
KyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgLy8gRklYTUU6IEpTT05QYXJzZSBzaG91bGQgcmVxdWlyZSBjYWxs
YmFja3MgaW5zdGVhZCBvZiBhbiBFeGVjU3RhdGUuCiAgICAgY29uc3QgSlNWYWx1ZSBkZWNvZGVk
UnVsZXMgPSBKU09OUGFyc2UoJmV4ZWMsIHJ1bGVzKTsKIAotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFk
ZWNvZGVkUnVsZXMpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkOwogCiAgICAgaWYgKCFkZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmpl
Y3Q7CiAKICAgICBjb25zdCBKU09iamVjdCogdG9wTGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMu
dG9PYmplY3QoJmV4ZWMpOwotICAgIGlmICghdG9wTGV2ZWxPYmplY3QgfHwgZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9wTGV2ZWxTdHJ1Y3R1
cmVOb3RBbk9iamVjdDsKICAgICAKICAgICBpZiAoIWlzSlNBcnJheSh0b3BMZXZlbE9iamVjdCkp
CkBAIC0yNzIsMTEgKzI4NywxMSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVk
UnVsZXMoCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub29NYW55
UnVsZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSB0b3BMZXZlbEFycmF5LT5nZXRJbmRleCgmZXhlYywg
aSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5Ub3BMZXZlbEFycmF5OwogCiAg
ICAgICAgIGNvbnN0IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMp
OwotICAgICAgICBpZiAoIXJ1bGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKCFydWxlT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSdWxlOwogCiAgICAgICAgIGF1
dG8gZXJyb3IgPSBsb2FkUnVsZShleGVjLCAqcnVsZU9iamVjdCwgbG9jYWxSdWxlTGlzdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
NTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5MjAsNiArMzkyMCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29u
ZmlndXJlVGV4dFRyYWMKIAogc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSFRN
TE1lZGlhRWxlbWVudCYgbWVkaWEpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0
byBtZWRpYUpTV3JhcHBlciA9IHRvSlMoJmV4ZWMsICZnbG9iYWxPYmplY3QsIG1lZGlhKTsKICAg
ICAKICAgICAvLyBSZXRyaWV2ZSB0aGUgY29udHJvbGxlciB0aHJvdWdoIHRoZSBKUyBvYmplY3Qg
Z3JhcGgKQEAgLTM5MjcsMTggKzM5MjksMTggQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9s
bGVySlNWYWx1ZShKUwogICAgIGlmICghbWVkaWFKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwogICAgIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hv
c3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRyb2xzSG9z
dCIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRy
b2xzSG9zdEpTV3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRy
b2xzSG9zdCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAg
ICBKU0M6OkpTT2JqZWN0KiBjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBKU0M6OmpzRHlu
YW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KGNvbnRyb2xzSG9zdEpTV3JhcHBlcik7CiAgICAgaWYg
KCFjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOwogCi0gICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmZXhlYy52bSgpLCAiY29udHJvbGxlciIpOworICAgIEpTQzo6SWRlbnRp
ZmllciBjb250cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29u
dHJvbGxlciIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29udHJv
bHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7Ci0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAgICByZXR1cm4gY29udHJvbGxl
ckpTV3JhcHBlcjsKQEAgLTM5NzUsOCArMzk3NywxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnVwZGF0ZUNhcHRpb25Db250CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9s
bGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRD
b250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxl
ckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0
KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihj
b250cm9sbGVyVmFsdWUpOwpAQCAtNDAwMSw3ICs0MDA1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojp1cGRhdGVDYXB0aW9uQ29udAogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBu
b0FyZ3VtZW50czsKICAgICBKU0M6OmNhbGwoZXhlYywgbWV0aG9kT2JqZWN0LCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnRyb2xsZXJPYmplY3QsIG5vQXJndW1lbnRzKTsKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBtX2hhdmVT
ZXRVcENhcHRpb25Db250YWluZXIgPSB0cnVlOwogI2VuZGlmCkBAIC02NTE2LDggKzY1MjAsMTAg
QEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgIERPTVdyYXBw
ZXJXb3JsZCYgd29ybGQgPSBlbnN1cmVJc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJv
bGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBK
U0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9u
VmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOwogICAgIGlmIChmdW5jdGlvblZhbHVlLmlzRnVu
Y3Rpb24oKSkKQEAgLTY1MzAsOCArNjUzNiw4IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5z
dXJlTWVkaWFDb250cm8KICAgICBVUkwgc2NyaXB0VVJMOwogI2VuZGlmCiAgICAgc2NyaXB0Q29u
dHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShtZWRpYUNvbnRyb2xzU2Ny
aXB0LCBzY3JpcHRVUkwpLCB3b3JsZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02NTg5LDggKzY1OTUsMTAgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYg
c2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gVGhlIG1lZGlhIGNvbnRyb2xzIHNjcmlw
dCBtdXN0IHByb3ZpZGUgYSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIGRldGFpbHMuCiAgICAg
Ly8gTmFtZTogY3JlYXRlQ29udHJvbHMKQEAgLTY2MTcsMjEgKzY2MjUsMjEgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgIGFyZ0xpc3QuYXBwZW5kKG1lZGlh
Q29udHJvbHNIb3N0SlNXcmFwcGVyKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlND
OjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0M6OkpTT2Jq
ZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3Qq
Pihjb250cm9sbGVyVmFsdWUpOwogICAgIGlmICghY29udHJvbGxlck9iamVjdCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEsIE1lZGlhQ29udHJvbGxlckhvc3Qs
IGFuZCBDb250cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91dCB0aGVpciByZWxhdGlvbnNoaXAK
ICAgICBKU0M6OkpTT2JqZWN0KiBtZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVy
LnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9s
c0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksICJjb250cm9s
c0hvc3QiKTsKICAgICAKICAgICBBU1NFUlQoIW1lZGlhSlNXcmFwcGVyT2JqZWN0LT5oYXNQcm9w
ZXJ0eShleGVjLCBjb250cm9sc0hvc3QpKTsKQEAgLTY2NTEsOCArNjY1OSw4IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gKICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0
b3JKU1Byb3BlcnR5KCk7CiAgICAgdXBkYXRlVXNlc0xUUlVzZXJJbnRlcmZhY2VMYXlvdXREaXJl
Y3Rpb25KU1Byb3BlcnR5KCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9v
bCBkZXBlbmRzT25QYWdlU2NhbGUpCkBAIC02Njg3LDIxICs2Njk1LDIzIEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm8KICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxk
ID0gZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENv
bnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNj
cmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250
cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNP
YmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7
CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0
aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVQcmVzZW50YXRpb25Nb2RlQ2hhbmdlIikpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNPYmpl
Y3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUg
PSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRh
KTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTY3MjgsMjEg
KzY3MzgsMjMgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAg
ICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUo
KS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qo
d29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpK
U1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFs
T2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IGNv
bnRyb2xsZXJWYWx1ZS50b09iamVjdChleGVjKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29u
dHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgSlNDOjpKU09iamVjdCog
ZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
IEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1
bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwog
ICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKQEAgLTY3NTEsNyArNjc2Myw3
IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgIEpTQzo6
SlNWYWx1ZSBvdXRwdXRWYWx1ZSA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0KTsKIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIHJldHVybiBvdXRwdXRWYWx1ZS5nZXRT
dHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTMyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw5ICszOTIs
MTEgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogCiAgICAgU2Ny
aXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2Ny
aXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoaXNvbGF0
ZWRXb3JsZCkpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CkBAIC00MDgsOCArNDEwLDggQEAgdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRo
ZSBKUyBmaWxlIHByb3ZpZGVzIGEgY3JlYXRlT3ZlcmxheShzaGFkb3dSb290LCB0aXRsZSwgc3Vi
dGl0bGUpIGZ1bmN0aW9uLgogICAgIEpTQzo6SlNPYmplY3QqIG92ZXJsYXkgPSBnbG9iYWxPYmpl
Y3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZU92
ZXJsYXkiKSkudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCFvdmVybGF5KSB7Ci0gICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSlNDOjpDYWxsRGF0
YSBjYWxsRGF0YTsKQEAgLTQxOCw3ICs0MjAsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmRpZEFkZFVzZXJBCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6Y2FsbChleGVjLCBv
dmVybGF5LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQog
CiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnBhcnRPZlNuYXBzaG90T3ZlcmxheShjb25z
dCBOb2RlKiBub2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1
MzI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMiBAQCBib29sIE5QSlNP
YmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9qc09i
amVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlm
aWVyUmVwKSk7ICAgIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIHJldHVybiBnZXRD
YWxsRGF0YSh2YWx1ZSwgY2FsbERhdGEpICE9IENhbGxUeXBlOjpOb25lOwpAQCAtMTQ3LDcgKzE0
OSw5IEBAIGJvb2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAo
IWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBi
b29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE1NSw3
ICsxNTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAg
ZWxzZQogICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVu
dGlmaWVyUmVwLT5udW1iZXIoKSk7CiAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTY3
LDcgKzE3MSwxMCBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAg
ICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBKU1ZhbHVlIGpzUmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQog
ICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlk
ZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwpAQCAtMTc1LDcgKzE4Miw3IEBAIGJv
b2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWUKICAgICAgICAganNSZXN1bHQg
PSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIAog
ICAgIG1fb2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGpzUmVzdWx0
LCAqcmVzdWx0KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4Nyw3ICsxOTQsOSBAQCBi
b29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZXhlYywgbV9v
YmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCAqdmFsdWUpOwogICAgIGlmIChpZGVudGlmaWVyUmVw
LT5pc1N0cmluZygpKSB7CkBAIC0xOTUsNyArMjA0LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQ
cm9wZXJ0eShOUElkZW50aWZpZQogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5w
dXQobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4
ZWMsIGlkZW50aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChtX2pzT2JqZWN0LmdldCgpLCBl
eGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwganNWYWx1ZSwgZmFsc2UpOwotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOCwyNiArMjE3LDI5IEBAIGJvb2wgTlBKU09iamVjdDo6
cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygp
KSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRp
ZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9q
c09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0Lmdl
dCgpLCBleGVjLCBpZGVudGlmaWVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fanNP
YmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkgewotICAg
ICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAg
ICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgobV9q
c09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIH0KIAot
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU5LDcgKzI3MSw5IEBAIGJvb2wgTlBKU09iamVj
dDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWEKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0
YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1f
anNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpAQCAtMjc1LDEzICsyODksMTYgQEAgYm9v
bCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIAogICAgIC8vIENvbnZl
cnQgYW5kIHJldHVybiB0aGUgbmV3IG9iamVjdC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpT
VmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50
KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZTo6Tm9uZSkKQEAgLTI5Niw3ICszMTMsNyBAQCBib29sIE5QSlNPYmplY3Q6
Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsCiAKICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhl
IHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpT
VmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIAogICAgIHJldHVy
biB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24g
MjA1MzI0KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsOCArODg1LDExIEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3Js
ZCgpLnZtKCkpOwotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHBsdWdp
bldvcmxkKCkudm0oKSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KSk7CisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAg
ICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0
dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gT3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJl
U3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkgOiBOdWxsb3B0KTsKQEAgLTg5NCw3ICs4OTcs
NyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0KSk7CiAgICAg
CiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3Ro
KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkxNSw5ICs5MTgsMTIgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBtZXRob2RO
YW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC05MzAsNyArOTM2LDcgQEAgYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEpTVmFsdWUgdmFsdWUgPSBj
YWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7
CiAgICAgICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVz
dWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0OCw5ICs5NTQsMTIgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBj
YWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQpAQCAtOTYyLDcg
Kzk3MSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBK
U1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBvYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2Jq
ZWN0LCBhcmdMaXN0KTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3Vs
dERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05ODAsOSAr
OTg5LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5X
b3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0
RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTk5NSw3
ICsxMDA3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAg
IEpTVmFsdWUgdmFsdWUgPSBKU0M6OmNvbnN0cnVjdChleGVjLCBvYmplY3QsIGNvbnN0cnVjdFR5
cGUsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVj
LCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTEwMTMsMTMgKzEwMjUsMTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OmdldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1Zh
bHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBt
YXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
IHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTAzNCwxMyArMTA0OSwxNiBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShb
bV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0
eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwg
cmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwNTgsMTUgKzEwNzYs
MTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwogICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxk
KCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNj
cmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNo
YWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xMDg0LDE0ICsxMTA1LDE3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpzZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2Vi
RnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAg
CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFs
dWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNlKTsKICAgICAKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTExMTAsMTUgKzExMzQsMTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnJlbW92ZQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlm
ICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKQEAgLTExMzYsMTYgKzExNjMsMTkgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUp
KSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAorICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNjMsMTEgKzEx
OTMsMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldv
cmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUt
PnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAg
IGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwot
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExODUsMTEgKzEyMTksMTUgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVz
dWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCkBAIC0xMjA3LDExICsxMjQ1LDE0IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2RO
YW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyMjksOSAr
MTI3MCwxMiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2lu
V29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFt
ZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC0xMjUxLDcgKzEyOTUsNyBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKICAgICBtZW1jcHkocmVzdWx0RGF0YSwg
W2RhdGEgYnl0ZXNdLCByZXN1bHRMZW5ndGgpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDUzMjQpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTY5MzYsNiArNjkzNiw5IEBAIC0gKEJPT0wpc2hvdWxkQ2xvc2UKICNpZiAhUExBVEZPUk0oSU9T
KQogc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBO
U0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9v
bGVhbigpKQogICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRv
cldpdGhCb29sZWFuOmpzVmFsdWUuYXNCb29sZWFuKCldOwpAQCAtNjk3Niw4ICs2OTc5LDggQEAg
c3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJp
bWl0aXZlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3Jd
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShleGVjLCBwcmlt
aXRpdmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>287837</attachid>
            <date>2016-09-02 17:29:58 -0700</date>
            <delta_ts>2016-09-02 17:29:58 -0700</delta_ts>
            <desc>x86_64 benchmark result run 1</desc>
            <filename>bench-result-x86_64-1.txt</filename>
            <type>text/plain</type>
            <size>87930</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">JCBzbGVlcCAxNSAmJiB0aW1lIC4vVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MgLS1v
dXRlciA2IGJhc2U6L1ZvbHVtZXMvRGF0YS93cy1vbGQvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9S
ZWxlYXNlL0R1bXBSZW5kZXJUcmVlIG5ldzovVm9sdW1lcy9EYXRhL3dzNi9PcGVuU291cmNlL1dl
YktpdEJ1aWxkL1JlbGVhc2UvRHVtcFJlbmRlclRyZWUKODE2NC84MTY0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKR2VuZXJhdGluZyBiZW5jaG1hcmsgcmVwb3J0IGF0IC9Wb2x1
bWVzL0RhdGEvd3M2L0ludGVybmFsL2Jhc2VfbmV3X1N1blNwaWRlckxvbmdTcGlkZXJWOFNwaWRl
ck9jdGFuZUtyYWtlbkpTQmVuY2hNaWNyb2JlbmNobWFya3NBc21CZW5jaERTUENvbXByZXNzaW9u
QmVuY2hfZGV1Y2FsaW9uXzIwMTYwOTAyXzE0MTRfcmVwb3J0LnR4dApBbmQgcmF3IGRhdGEgYXQg
L1ZvbHVtZXMvRGF0YS93czYvSW50ZXJuYWwvYmFzZV9uZXdfU3VuU3BpZGVyTG9uZ1NwaWRlclY4
U3BpZGVyT2N0YW5lS3Jha2VuSlNCZW5jaE1pY3JvYmVuY2htYXJrc0FzbUJlbmNoRFNQQ29tcHJl
c3Npb25CZW5jaF9kZXVjYWxpb25fMjAxNjA5MDJfMTQxNC5qc29uCgpCZW5jaG1hcmsgcmVwb3J0
IGZvciBTdW5TcGlkZXIsIExvbmdTcGlkZXIsIFY4U3BpZGVyLCBPY3RhbmUsIEtyYWtlbiwgSlNC
ZW5jaCwgTWljcm9iZW5jaG1hcmtzLCBBc21CZW5jaCwgRFNQLCBhbmQgQ29tcHJlc3Npb25CZW5j
aCBvbiBkZXVjYWxpb24gKE1hY1BybzYsMSkuCgpWTXMgdGVzdGVkOgoiYmFzZSIgYXQgL1ZvbHVt
ZXMvRGF0YS93cy1vbGQvT3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlL0R1bXBSZW5kZXJU
cmVlIChyMjA1MzI0KQoibmV3IiBhdCAvVm9sdW1lcy9EYXRhL3dzNi9PcGVuU291cmNlL1dlYktp
dEJ1aWxkL1JlbGVhc2UvRHVtcFJlbmRlclRyZWUgKHIyMDUzMjQpCgpDb2xsZWN0ZWQgNiBzYW1w
bGVzIHBlciBiZW5jaG1hcmsvVk0sIHdpdGggNiBWTSBpbnZvY2F0aW9ucyBwZXIgYmVuY2htYXJr
LiBFbWl0dGVkIGEgY2FsbCB0byBnYygpIGJldHdlZW4gc2FtcGxlIG1lYXN1cmVtZW50cy4KVXNl
ZCAxIGJlbmNobWFyayBpdGVyYXRpb24gcGVyIFZNIGludm9jYXRpb24gZm9yIHdhcm0tdXAuIFVz
ZWQgdGhlIGpzYy1zcGVjaWZpYyBwcmVjaXNlVGltZSgpIGZ1bmN0aW9uIHRvIGdldCBtaWNyb3Nl
Y29uZC1sZXZlbAp0aW1pbmcuIFJlcG9ydGluZyBiZW5jaG1hcmsgZXhlY3V0aW9uIHRpbWVzIHdp
dGggOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGluIG1pbGxpc2Vjb25kcy4KCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAg
ICAgICAgICAgICAgICAgICBuZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgClN1blNwaWRlcjoKICAgM2QtY3ViZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNi40MjUwKy0wLjAzODkgICAgID8gICAgICA2LjQ4ODYrLTAuMTMwOCAgICAg
ICAgPwogICAzZC1tb3JwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2LjU2MjIrLTAuMDc4OSAgICAgICAgICAgIDYuNTQzOSstMC4xNDM4ICAgICAgICAKICAgM2Qt
cmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy40MDAyKy0w
Ljc0MjcgICAgICAgICAgICA3LjI1NTgrLTAuMjI4MCAgICAgICAgICBtaWdodCBiZSAxLjAxOTl4
IGZhc3RlcgogICBhY2Nlc3MtYmluYXJ5LXRyZWVzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzLjM4MzErLTAuMTAyOSAgICAgPyAgICAgIDMuMzkyMystMC4wNjY2ICAgICAgICA/CiAg
IGFjY2Vzcy1mYW5ua3VjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMDU4
MCstMC4xNzY0ICAgICAgICAgICAgNi44NzE5Ky0wLjI0NTYgICAgICAgICAgbWlnaHQgYmUgMS4w
MjcxeCBmYXN0ZXIKICAgYWNjZXNzLW5ib2R5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMy4xNTAzKy0wLjA2NzQgICAgID8gICAgICAzLjIyMzErLTAuMDg1MCAgICAgICAg
PyBtaWdodCBiZSAxLjAyMzF4IHNsb3dlcgogICBhY2Nlc3MtbnNpZXZlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA0LjM2NjMrLTAuMDg2NCAgICAgPyAgICAgIDQuNDcxMCst
MC4yMjc3ICAgICAgICA/IG1pZ2h0IGJlIDEuMDI0MHggc2xvd2VyCiAgIGJpdG9wcy0zYml0LWJp
dHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuNDA0MCstMC4xODEyICAgICAg
ICAgICAgMS4yNzgyKy0wLjA0MjUgICAgICAgICAgbWlnaHQgYmUgMS4wOTg0eCBmYXN0ZXIKICAg
Yml0b3BzLWJpdHMtaW4tYnl0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi45OTky
Ky0wLjA3NzYgICAgID8gICAgICAzLjAxODYrLTAuMDcxNSAgICAgICAgPwogICBiaXRvcHMtYml0
d2lzZS1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjI5MzMrLTAuMTAwMCAg
ICAgPyAgICAgIDIuMzA4NystMC4xMTY3ICAgICAgICA/CiAgIGJpdG9wcy1uc2lldmUtYml0cyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNzI4MCstMC4wMzQxICAgICA/ICAgICAg
My43NTkwKy0wLjA2ODEgICAgICAgID8KICAgY29udHJvbGZsb3ctcmVjdXJzaXZlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMi45NjA5Ky0wLjA3NzUgICAgID8gICAgICAyLjk3MDkrLTAu
MDc2MyAgICAgICAgPwogICBjcnlwdG8tYWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA1Ljc4MjMrLTAuMTA4OSAgICAgPyAgICAgIDUuNzk3OSstMC4wODAxICAgICAg
ICA/CiAgIGNyeXB0by1tZDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDMuMTU3NistMC4xMzA1ICAgICAgICAgICAgMy4wNjkwKy0wLjA3MjYgICAgICAgICAgbWlnaHQg
YmUgMS4wMjg5eCBmYXN0ZXIKICAgY3J5cHRvLXNoYTEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMi45OTQzKy0wLjA2NDkgICAgID8gICAgICAzLjExODgrLTAuMTEwMCAg
ICAgICAgPyBtaWdodCBiZSAxLjA0MTZ4IHNsb3dlcgogICBkYXRlLWZvcm1hdC10b2Z0ZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLjA1ODYrLTAuMzYxMSAgICAgPyAgICAgMTMu
Mjc5NistMC40NDY5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE2OXggc2xvd2VyCiAgIGRhdGUtZm9y
bWF0LXhwYXJiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMDY4MistMC4xODg0
ICAgICAgICAgICAgNy44MzQwKy0wLjE3MjkgICAgICAgICAgbWlnaHQgYmUgMS4wMjk5eCBmYXN0
ZXIKICAgbWF0aC1jb3JkaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
My4zNzgyKy0wLjEyMjQgICAgICAgICAgICAzLjMzODMrLTAuMDE2OSAgICAgICAgICBtaWdodCBi
ZSAxLjAxMTl4IGZhc3RlcgogICBtYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA1LjMxMTkrLTAuMDkxMiAgICAgPyAgICAgIDUuNDY5MCstMC4yMTAxICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDI5Nnggc2xvd2VyCiAgIG1hdGgtc3BlY3RyYWwtbm9ybSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNDEwMystMC4wODg1ICAgICAgICAgICAgMi4z
OTA3Ky0wLjA2MzIgICAgICAgIAogICByZWdleHAtZG5hICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA5LjQ1OTErLTAuMTQxNCAgICAgICAgICAgIDkuMzY0NCstMC4xMjE1
ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEwMXggZmFzdGVyCiAgIHN0cmluZy1iYXNlNjQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMDgzNSstMC4wNzkwICAgICAgICAgICAg
Ni45MzM3Ky0wLjE1NTIgICAgICAgICAgbWlnaHQgYmUgMS4wMjE2eCBmYXN0ZXIKICAgc3RyaW5n
LWZhc3RhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy44OTkzKy0wLjEw
NTMgICAgICAgICAgICA3Ljc1NjErLTAuMTk2MyAgICAgICAgICBtaWdodCBiZSAxLjAxODV4IGZh
c3RlcgogICBzdHJpbmctdGFnY2xvdWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDExLjY4NTMrLTAuMjc0OCAgICAgPyAgICAgMTEuODEwOCstMC4xMzgyICAgICAgICA/IG1pZ2h0
IGJlIDEuMDEwN3ggc2xvd2VyCiAgIHN0cmluZy11bnBhY2stY29kZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMjYuNjgwMSstMC44NDQwICAgICAgICAgICAyNS41MjQ4Ky0wLjMxOTAg
ICAgICAgICAgbWlnaHQgYmUgMS4wNDUzeCBmYXN0ZXIKICAgc3RyaW5nLXZhbGlkYXRlLWlucHV0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy40MDQwKy0wLjI5OTIgICAgICAgICAgICA3
LjMzMzcrLTAuMTczNyAgICAgICAgCgogICA8YXJpdGhtZXRpYz4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA2LjM4ODYrLTAuMDcwMSAgICAgICAgICAgIDYuMzMwOSstMC4w
MzE3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDA5MXggZmFzdGVyCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgICAgICAgICAgICAg
ICAgICAgICAgbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApMb25n
U3BpZGVyOgogICAzZC1jdWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxMTE0LjcyMzMrLTE0LjA0MDMgICAgICAgIDExMDIuNTcxOSstMTMuMDY2MyAgICAgICAgIG1p
Z2h0IGJlIDEuMDExMHggZmFzdGVyCiAgIDNkLW1vcnBoICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA3MjUuMTc3NCstMTIuMTcwMyAgICA/ICAgIDcyNi45NTIwKy0xMi40
NDU1ICAgICAgID8KICAgM2QtcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDYxNy43NTcyKy03LjAwNDAgICAgICAgICAgNjE2LjQyNzkrLTMuMzk1OCAgICAgICAg
CiAgIGFjY2Vzcy1iaW5hcnktdHJlZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMzUu
NzYzOSstNC4zMjk2ICAgICA/ICAgMTA0MS4xMTIyKy00LjA2NDggICAgICAgID8KICAgYWNjZXNz
LWZhbm5rdWNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNS45NzIwKy0xNS43
ODI5ICAgICAgICAgMzEyLjczMTgrLTYuOTc0NyAgICAgICAgICBtaWdodCBiZSAxLjA0MjN4IGZh
c3RlcgogICBhY2Nlc3MtbmJvZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NjQ4LjI3NjErLTE1LjAwODkgICAgPyAgICA2NjAuNTcxNystNC41MzUwICAgICAgICA/IG1pZ2h0
IGJlIDEuMDE5MHggc2xvd2VyCiAgIGFjY2Vzcy1uc2lldmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAzODcuNTM3NCstMy41OTE5ICAgICA/ICAgIDM4Ny43NTU3Ky0zLjEzNjgg
ICAgICAgID8KICAgYml0b3BzLTNiaXQtYml0cy1pbi1ieXRlICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNy41MzQ2Ky0wLjQzNzUgICAgICAgICAgIDM3LjQxNjIrLTAuNzQwMCAgICAgICAgCiAg
IGJpdG9wcy1iaXRzLWluLWJ5dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDIuOTU5
OSstMS44MTYyICAgICA/ICAgIDE0My4wNDgzKy0xLjg2NDAgICAgICAgID8KICAgYml0b3BzLW5z
aWV2ZS1iaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0Ni40NTM2Ky0zLjU5NzQg
ICAgID8gICAgNDQ3LjEwMzErLTIuNTQ4NSAgICAgICAgPwogICBjb250cm9sZmxvdy1yZWN1cnNp
dmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTUwLjc0OTMrLTguNDQ1NSAgICAgICAgICA1
NDguMjYyNSstMi44ODc0ICAgICAgICAKICAgY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDczNy43NDcwKy0xNC4wNjU5ICAgICAgICAgNzM0LjUyODcrLTku
Njc2NiAgICAgICAgCiAgIGNyeXB0by1tZDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA1NzYuODg5NistOS4zMzg1ICAgICA/ICAgIDU4My43MzE5Ky0xNi4xMTc0ICAgICAg
ID8gbWlnaHQgYmUgMS4wMTE5eCBzbG93ZXIKICAgY3J5cHRvLXNoYTEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDc3MC4zNDY4Ky01LjQ3NzIgICAgID8gICAgNzcyLjk5MzYr
LTUuMTc3NSAgICAgICAgPwogICBkYXRlLWZvcm1hdC10b2Z0ZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNTI4LjM1MTgrLTguNTMwNSAgICAgPyAgICA1MzUuNjEwMystMTAuMzA5OSAg
ICAgICA/IG1pZ2h0IGJlIDEuMDEzN3ggc2xvd2VyCiAgIGRhdGUtZm9ybWF0LXhwYXJiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA3NjUuNTk2NistMTIuMTI5MyAgICAgICAgIDc2MS44
MzEyKy0xOC45NTUyICAgICAgIAogICBoYXNoLW1hcCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMTc5LjE1MjYrLTAuOTAxNyAgICAgISAgICAxOTAuMzIwNSstNi4wNzU0
ICAgICAgICAhIGRlZmluaXRlbHkgMS4wNjIzeCBzbG93ZXIKICAgbWF0aC1jb3JkaWMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3My4xNDEwKy0xMy4zMDY3ICAgID8gICAg
NTc4LjY0MTQrLTExLjIwMDAgICAgICAgPwogICBtYXRoLXBhcnRpYWwtc3VtcyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNDA3LjQ1NTMrLTUuNzc2NCAgICAgICAgICAzOTkuODkxNyst
Mi4zNDU1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4OXggZmFzdGVyCiAgIG1hdGgtc3BlY3RyYWwt
bm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTcuNjM2MystMy4wNDg4ICAgICAg
ICAgIDU5Ni40NjUxKy0xLjMwNzkgICAgICAgIAogICBzdHJpbmctYmFzZTY0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgNTAzLjk2NjErLTAuOTE1OCAgICAgICAgICA1MDMuOTE5
NistMi41NTM5ICAgICAgICAKICAgc3RyaW5nLWZhc3RhICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQyMy44MzI3Ky00LjY2ODUgICAgICAgICAgNDIxLjU5OTkrLTQuMzM3NCAg
ICAgICAgCiAgIHN0cmluZy10YWdjbG91ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyMTAuNjY3NistMi4zODkxICAgICAgICAgIDIwOS45OTQxKy00LjI5NDkgICAgICAgIAoKICAg
PGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0NS4zNDg2
Ky0xLjE5NjYgICAgID8gICAgNDQ1Ljg3OTArLTEuNDE3MiAgICAgICAgPyBtaWdodCBiZSAxLjAw
MTJ4IHNsb3dlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAgIG5ldyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKVjhTcGlkZXI6CiAgIGNyeXB0byAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUuNTQwOSstMC40MDkxICAgICAgICAg
ICA0NS40NzA5Ky0wLjgwNTkgICAgICAgIAogICBkZWx0YWJsdWUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDczLjExNjArLTMuMjcwOCAgICAgPyAgICAgNzMuNzc5Nyst
NC4yMjg0ICAgICAgICA/CiAgIGVhcmxleS1ib3llciAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNDcuMzQyNistMS4wNDMzICAgICA/ICAgICA0Ny42MjI1Ky0xLjE1NDcgICAg
ICAgID8KICAgcmF5dHJhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA1MC43MTI2Ky0xLjcyOTkgICAgID8gICAgIDUxLjA1OTIrLTAuODk1MCAgICAgICAgPwogICBy
ZWdleHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcxLjEwOTEr
LTEuMjMyNiAgICAgICAgICAgNzAuMDI0NCstMC42Nzk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE1
NXggZmFzdGVyCiAgIHJpY2hhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNTQuMTIwNistMS41NDY0ICAgICA/ICAgICA1NC4zNjA4Ky0xLjUyMjggICAgICAgID8K
ICAgc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NC4x
NjY5Ky0wLjU2MjcgICAgICAgICAgIDUzLjU2MDkrLTAuNzEyNSAgICAgICAgICBtaWdodCBiZSAx
LjAxMTN4IGZhc3RlcgoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA1NS43MDE2Ky0wLjQ3NjEgICAgICAgICAgIDU1LjY4NTErLTAuNTkzMyAgICAg
ICAgICBtaWdodCBiZSAxLjAwMDN4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAgICAgICAg
IG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKT2N0YW5lOgogICBl
bmNyeXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjA1OTcr
LTAuMDAzMTAgICAgICAgICAgMC4yMDMyMistMC4wMDE4MSAgICAgICAgIG1pZ2h0IGJlIDEuMDEz
NXggZmFzdGVyCiAgIGRlY3J5cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMy41MjA2MSstMC4wNzgzNyAgICA/ICAgICAzLjUyOTI5Ky0wLjA5MTM0ICAgICAgID8K
ICAgZGVsdGFibHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MiAgICAgICAwLjE4
OTk3Ky0wLjAxNjk3ICAgID8gICAgIDAuMTk1NDQrLTAuMDI1OTQgICAgICAgPyBtaWdodCBiZSAx
LjAyODh4IHNsb3dlcgogICBlYXJsZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMzg3MzMrLTAuMDA4MzIgICAgICAgICAgMC4zODY3NystMC4wMDQ1MSAgICAg
ICAKICAgYm95ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
LjA3MjM0Ky0wLjE1MzEyICAgID8gICAgIDYuMDgzNDMrLTAuMTA0NjIgICAgICAgPwogICBuYXZp
ZXItc3Rva2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAgIDUuNTkxODMrLTAu
MDI2MDMgICAgPyAgICAgNS41OTcxOCstMC4wMTY3MSAgICAgICA/CiAgIHJheXRyYWNlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAgMS4yMzIyNystMC4wMjM1OSAgICA/
ICAgICAxLjIzNjY4Ky0wLjAzMzU4ICAgICAgID8KICAgcmljaGFyZHMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4MiAgICAgICAwLjExMDg5Ky0wLjAwMjQ0ICAgID8gICAgIDAuMTEw
OTQrLTAuMDAxODUgICAgICAgPwogICBzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHgyICAgICAgIDAuNDA4NDUrLTAuMDAzMzYgICAgPyAgICAgMC40MTAxOCstMC4wMDU1
MiAgICAgICA/CiAgIHJlZ2V4cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIg
ICAgICAyNS4yODI2OSstMC4wNzU2MyAgICBeICAgIDI1LjExMTc5Ky0wLjA5MDIzICAgICAgIF4g
ZGVmaW5pdGVseSAxLjAwNjh4IGZhc3RlcgogICBwZGZqcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHgyICAgICAgNDguNDYyNDErLTAuMjE2OTAgICAgPyAgICA0OC41NDUxOCst
MC42MjEwOCAgICAgICA/CiAgIG1hbmRyZWVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeDIgICAgICA1Mi42ODA2MistMS4yOTM0MyAgICAgICAgIDUyLjM0NjU3Ky0wLjY5NTUyICAg
ICAgIAogICBnYmVtdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICAg
NDAuNDg1ODYrLTAuMTg1MTkgICAgPyAgICA0MC42MzcwNSstMC45MDE5MCAgICAgICA/CiAgIGNs
b3N1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zODI4MSst
MC4wMDE5MSAgICA/ICAgICAwLjM4Njk2Ky0wLjAwNTU1ICAgICAgID8gbWlnaHQgYmUgMS4wMTA4
eCBzbG93ZXIKICAganF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0Ljk2ODM2Ky0wLjAyMTUzICAgICAgICAgIDQuOTQ1NTMrLTAuMDE2ODcgICAgICAgCiAg
IGJveDJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgICAxMi4xNDg1
NCstMC4yMzMxMCAgICAgICAgIDEyLjEwODEyKy0wLjE3MjkwICAgICAgIAogICB6bGliICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyICAgICA0MDcuNDY4MDIrLTguOTc5MTIg
ICAgICAgIDM5My4xNTEwNCstMTYuODUyMzUgICAgICAgIG1pZ2h0IGJlIDEuMDM2NHggZmFzdGVy
CiAgIHR5cGVzY3JpcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIgICAgIDgzMy43
ODk0NystMTkuNTg0NDMgICA/ICAgODM4Ljc0NDk1Ky0yNi4xMTg5MSAgICAgID8KCiAgIDxnZW9t
ZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4zNjc1MSstMC4w
Mjc4MiAgICAgICAgICA2LjM2MzYzKy0wLjA3MjczICAgICAgICAgbWlnaHQgYmUgMS4wMDA2eCBm
YXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZSAgICAgICAgICAgICAgICAgICAgICBuZXcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCktyYWtlbjoKICAgYWktYXN0YXIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQuNTM3Ky0yLjA2MSAgICAgICAgICAgIDExMy4z
NTIrLTEuNjA1ICAgICAgICAgICBtaWdodCBiZSAxLjAxMDR4IGZhc3RlcgogICBhdWRpby1iZWF0
LWRldGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Ni40NzUrLTEuNjI4ICAg
ICAgICAgICAgIDc1LjYzOCstMC4zMzcgICAgICAgICAgIG1pZ2h0IGJlIDEuMDExMXggZmFzdGVy
CiAgIGF1ZGlvLWRmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0
LjIwOCstMC41ODYgICAgICA/ICAgICAxMTUuMzQ2Ky0yLjA1OSAgICAgICAgID8KICAgYXVkaW8t
ZmZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAuNzUyKy0wLjQw
NSAgICAgID8gICAgICA1MS43MzcrLTIuMDM4ICAgICAgICAgPyBtaWdodCBiZSAxLjAxOTR4IHNs
b3dlcgogICBhdWRpby1vc2NpbGxhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2OC4zNDArLTAuNzkwICAgICAgICAgICAgIDY3LjgzNSstMS4wNDIgICAgICAgICAKICAgaW1h
Z2luZy1kYXJrcm9vbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTIuMTM0Ky0x
LjA1MiAgICAgID8gICAgICA5Mi42NTIrLTIuNDE4ICAgICAgICAgPwogICBpbWFnaW5nLWRlc2F0
dXJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NS41MTgrLTAuNDczICAgICAg
ICAgICAgIDY1LjAzNSstMC45OTYgICAgICAgICAKICAgaW1hZ2luZy1nYXVzc2lhbi1ibHVyICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTMuMzcwKy01LjQwMyAgICAgICAgICAgICA5MC4w
MzUrLTguNDUyICAgICAgICAgICBtaWdodCBiZSAxLjAzNzB4IGZhc3RlcgogICBqc29uLXBhcnNl
LWZpbmFuY2lhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ny4zNzIrLTEuMjA0ICAg
ICAgPyAgICAgIDQ5LjM2MCstMS45MDMgICAgICAgICA/IG1pZ2h0IGJlIDEuMDQyMHggc2xvd2Vy
CiAgIGpzb24tc3RyaW5naWZ5LXRpbmRlcmJveCAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2
Ljc4MSstMS4zOTQgICAgICAgICAgICAgMzUuMTE5Ky0wLjUwNyAgICAgICAgICAgbWlnaHQgYmUg
MS4wNDczeCBmYXN0ZXIKICAgc3RhbmZvcmQtY3J5cHRvLWFlcyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNjAuMjI4Ky0xLjQwOSAgICAgIF4gICAgICA1OC4yNzArLTAuNDUwICAgICAg
ICAgXiBkZWZpbml0ZWx5IDEuMDMzNnggZmFzdGVyCiAgIHN0YW5mb3JkLWNyeXB0by1jY20gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2Ljk3OCstMS43MjQgICAgICA/ICAgICAgNjcu
MzAzKy0xLjM1NCAgICAgICAgID8KICAgc3RhbmZvcmQtY3J5cHRvLXBia2RmMiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMjAuMDg3Ky0yLjM3NyAgICAgICAgICAgIDExOS42MzYrLTEuMTg5
ICAgICAgICAgCiAgIHN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZlICAgICAgICAgICAg
ICAgICAgIDUwLjI0MCstMS41MDAgICAgICAgICAgICAgNDkuNTk3Ky0xLjA1OSAgICAgICAgICAg
bWlnaHQgYmUgMS4wMTMweCBmYXN0ZXIKCiAgIDxhcml0aG1ldGljPiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDc1LjUwMSstMC41MjEgICAgICAgICAgICAgNzUuMDY1Ky0w
LjY0OCAgICAgICAgICAgbWlnaHQgYmUgMS4wMDU4eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAgICAg
ICAgICAgICAgICBuZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkpT
QmVuY2g6CiAgIGFtYXpvbi1jaHJvbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQuMjQ3NistMC4xMTYzICAgICAgICAgICAgNC4yMzA5Ky0wLjE5ODUgICAgICAgIAogICBh
bWF6b24tY2hyb21lLXdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjQ0MTEr
LTAuMjMzMiAgICAgICAgICAgIDQuMzUwMSstMC4xOTUxICAgICAgICAgIG1pZ2h0IGJlIDEuMDIw
OXggZmFzdGVyCiAgIGFtYXpvbi1maXJlZm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDMuNDk1OCstMC4xNjA1ICAgICA/ICAgICAgMy41MDAwKy0wLjE5MzggICAgICAgID8K
ICAgYW1hem9uLWZpcmVmb3gtd2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy41
MjA4Ky0wLjIwOTUgICAgICAgICAgICAzLjI5NDYrLTAuMTkxNSAgICAgICAgICBtaWdodCBiZSAx
LjA2ODd4IGZhc3RlcgogICBhbWF6b24tc2FmYXJpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0Ljc0MTErLTAuMTcxMyAgICAgICAgICAgIDQuNzI3MCstMC4yMjE5ICAgICAg
ICAKICAgZmFjZWJvb2stY2hyb21lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1
My4yOTQ4Ky0wLjM2MzQgICAgICAgICAgIDUyLjYxNDQrLTAuNjY1NiAgICAgICAgICBtaWdodCBi
ZSAxLjAxMjl4IGZhc3RlcgogICBmYWNlYm9vay1jaHJvbWUtd2luICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTExLjI2ODArLTEuODUxMSAgICAgICAgICAxMTAuMTQyNistMS4yOTU3ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDEwMnggZmFzdGVyCiAgIGZhY2Vib29rLWZpcmVmb3ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEuMTUwMSstMC40MDUwICAgICA/ICAgICAzMS44
MTcxKy0wLjM0NTcgICAgICAgID8gbWlnaHQgYmUgMS4wMjE0eCBzbG93ZXIKICAgZmFjZWJvb2st
ZmlyZWZveC13aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC40MjQwKy0wLjMyOTIg
ICAgID8gICAgIDIwLjU5NjgrLTAuMzU2MyAgICAgICAgPwogICBmYWNlYm9vay1zYWZhcmkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzLjgyMzIrLTIuMzM2NCAgICAgICAgICAx
MTMuNTcwNystMC41NjA3ICAgICAgICAKICAgZ29vZ2xlLWNocm9tZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA0NS43NTk4Ky0xLjAxMjUgICAgICAgICAgIDQ1LjY2MjkrLTAu
OTEyMSAgICAgICAgCiAgIGdvb2dsZS1jaHJvbWUtd2luICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgNDQuMjcwMCstMC41MzE4ICAgICAgICAgICA0My45NzkyKy0wLjM3MTAgICAgICAg
IAogICBnb29nbGUtZmlyZWZveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIy
LjgyOTArLTAuNDQxMSAgICAgPyAgICAgMjMuMzA4NistMC41NjEwICAgICAgICA/IG1pZ2h0IGJl
IDEuMDIxMHggc2xvd2VyCiAgIGdvb2dsZS1maXJlZm94LXdpbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMjYuODM3NSstMC4zNzQ1ICAgICA/ICAgICAyNi45MDA4Ky0wLjQwMDIgICAg
ICAgID8KICAgZ29vZ2xlLXNhZmFyaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0Ni45MzAzKy0wLjQxMDUgICAgICAgICAgIDQ2LjkwMTErLTAuMzI0OSAgICAgICAgCiAgIHR3
aXR0ZXItY2hyb21lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNjE4MSst
MC4yOTY4ICAgICA/ICAgICAgNy43MzYxKy0wLjMwMTggICAgICAgID8gbWlnaHQgYmUgMS4wMTU1
eCBzbG93ZXIKICAgdHdpdHRlci1jaHJvbWUtd2luICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNy43MDI5Ky0wLjI5MzggICAgID8gICAgICA3Ljc4NTIrLTAuNDkzMSAgICAgICAgPyBt
aWdodCBiZSAxLjAxMDd4IHNsb3dlcgogICB0d2l0dGVyLWZpcmVmb3ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLjE2NDkrLTAuMTU5MyAgICAgICAgICAgIDEuMTUyNCstMC4w
MzgxICAgICAgICAgIG1pZ2h0IGJlIDEuMDEwOHggZmFzdGVyCiAgIHR3aXR0ZXItZmlyZWZveC13
aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMTUyNistMC4wNjk0ICAgICAgICAg
ICAgMS4xMzM1Ky0wLjA1NTIgICAgICAgICAgbWlnaHQgYmUgMS4wMTY4eCBmYXN0ZXIKICAgdHdp
dHRlci1zYWZhcmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4zMjY5Ky0w
LjEzODIgICAgID8gICAgICA3LjUzMjgrLTAuMjY2MiAgICAgICAgPyBtaWdodCBiZSAxLjAyODF4
IHNsb3dlcgogICB5YWhvby1jaHJvbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQ0Ljc2OTkrLTEuMzcwNiAgICAgPyAgICAgNDUuMDI5NCstMC41MTQzICAgICAgICA/CiAg
IHlhaG9vLWNocm9tZS13aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkuNzkw
MCstMC42NDkyICAgICAgICAgICAzOS4zMDQwKy0wLjQ1NDAgICAgICAgICAgbWlnaHQgYmUgMS4w
MTI0eCBmYXN0ZXIKICAgeWFob28tZmlyZWZveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA0NS41NjA4Ky0xLjAzNzMgICAgICAgICAgIDQ0LjgwOTQrLTEuMDgyNiAgICAgICAg
ICBtaWdodCBiZSAxLjAxNjh4IGZhc3RlcgogICB5YWhvby1maXJlZm94LXdpbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMxLjE4MTYrLTAuOTY1OCAgICAgICAgICAgMzAuODM4Nyst
MC43NjM0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDExMXggZmFzdGVyCiAgIHlhaG9vLXNhZmFyaSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUuNzIwMistMS4xNDc4ICAgICA/
ICAgICA0NS45NjAwKy0xLjUwNTQgICAgICAgID8KCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYuMjI5OCstMC4xMzYwICAgICAgICAgICAxNi4x
ODM0Ky0wLjEyMjEgICAgICAgICAgbWlnaHQgYmUgMS4wMDI5eCBmYXN0ZXIKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAg
ICAgICAgICAgICAgICAgICBuZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCk1pY3JvYmVuY2htYXJrczoKICAgYWJjLWZvcndhcmQtbG9vcC1lcXVhbCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4yMjA1Ky0wLjAxNTkgICAgID8gICAgICAwLjIyMTgrLTAuMDE0
MCAgICAgICAgPwogICBhYmMtcG9zdGZpeC1iYWNrd2FyZC1sb29wICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjI0MDArLTAuMDIxOSAgICAgICAgICAgIDAuMjIzNistMC4wMTU3ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDczM3ggZmFzdGVyCiAgIGFiYy1zaW1wbGUtYmFja3dhcmQtbG9vcCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMjE2MystMC4wMDg2ICAgICA/ICAgICAgMC4yMjY3Ky0w
LjAyMzAgICAgICAgID8gbWlnaHQgYmUgMS4wNDg0eCBzbG93ZXIKICAgYWJjLXNpbXBsZS1mb3J3
YXJkLWxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMzU3Ky0wLjAxODkgICAgICAg
ICAgICAwLjIyMTIrLTAuMDA5OCAgICAgICAgICBtaWdodCBiZSAxLjA2NTd4IGZhc3RlcgogICBh
YmMtc2tpcHB5LWxvb3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzMzIr
LTAuMDE1OCAgICAgXiAgICAgIDAuMjA5NCstMC4wMDY4ICAgICAgICBeIGRlZmluaXRlbHkgMS4x
MTM3eCBmYXN0ZXIKICAgYWJzLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMi45NDk1Ky0wLjE2NTkgICAgICAgICAgICAyLjg1MzErLTAuMDg0NiAgICAgICAg
ICBtaWdodCBiZSAxLjAzMzh4IGZhc3RlcgogICBhZGFwdC10by1kb3VibGUtZGl2aWRlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDE2Ljk2NDkrLTAuMzQwNSAgICAgICAgICAgMTYuOTQxMyst
MC4xMzQzICAgICAgICAKICAgYWxpYXNlZC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAgICAgICAg
ICAgICAgICAgICAgMS42MDkyKy0wLjE4MDMgICAgICAgICAgICAxLjU1NTYrLTAuMTAyMiAgICAg
ICAgICBtaWdodCBiZSAxLjAzNDR4IGZhc3RlcgogICBhbGxvY2F0ZS1iaWctb2JqZWN0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA2LjE1MTgrLTAuMjU5NyAgICAgPyAgICAgIDYuMTcz
OSstMC4yMTEyICAgICAgICA/CiAgIGFwcGx5LW5vdC1hcHBseSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMjQxNCstMC4wMTQ1ICAgICAgICAgICAgMC4yMjA2Ky0wLjAxMjIg
ICAgICAgICAgbWlnaHQgYmUgMS4wOTQxeCBmYXN0ZXIKICAgYXJndW1lbnRzLW5hbWVkLWFuZC1y
ZWZsZWN0aXZlICAgICAgICAgICAgICAgICAgICAgMC4yMTE2Ky0wLjAwNDkgICAgID8gICAgICAw
LjIxNTArLTAuMDE4NiAgICAgICAgPyBtaWdodCBiZSAxLjAxNjJ4IHNsb3dlcgogICBhcmd1bWVu
dHMtb3V0LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI0MzMrLTAuMDE1
NiAgICAgICAgICAgIDAuMjMyNSstMC4wMzIxICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ2N3ggZmFz
dGVyCiAgIGFyZ3VtZW50cy1zdHJpY3QtbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuMjE5OCstMC4wMTY2ICAgICAgICAgICAgMC4yMTIwKy0wLjAxOTAgICAgICAgICAgbWlnaHQg
YmUgMS4wMzcweCBmYXN0ZXIKICAgYXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4yMjkzKy0wLjAxODcgICAgICAgICAgICAwLjIxOTkrLTAuMDI1NiAg
ICAgICAgICBtaWdodCBiZSAxLjA0Mjl4IGZhc3RlcgogICBhcml0eS1taXNtYXRjaC1pbmxpbmlu
ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAxMTQrLTAuMDkwNiAgICAgICAgICAgIDAu
OTU3MistMC4wNDczICAgICAgICAgIG1pZ2h0IGJlIDEuMDU2NnggZmFzdGVyCiAgIGFycmF5LWFj
Y2Vzcy1wb2x5bW9ycGhpYy1zdHJ1Y3R1cmUgICAgICAgICAgICAgICAgIDkuMzgzOSstMC4yNTIz
ICAgICA/ICAgICAgOS41NDcxKy0wLjI1NDUgICAgICAgID8gbWlnaHQgYmUgMS4wMTc0eCBzbG93
ZXIKICAgYXJyYXktbm9uYXJyYXktcG9seW1vcmhwaWMtYWNjZXNzICAgICAgICAgICAgICAgICAy
OS45NzMzKy0wLjI0NzcgICAgID8gICAgIDMwLjA2MjYrLTAuMzgzNyAgICAgICAgPwogICBhcnJh
eS1wcm90b3R5cGUtZXZlcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2LjI4NzkrLTAu
MzAwMCAgICAgISAgICAgODcuNDEzNCstMC4zNzc1ICAgICAgICAhIGRlZmluaXRlbHkgMS4wMTMw
eCBzbG93ZXIKICAgYXJyYXktcHJvdG90eXBlLWZvckVhY2ggICAgICAgICAgICAgICAgICAgICAg
ICAgICA4NS40Nzg2Ky0wLjc0NDIgICAgID8gICAgIDg3LjE4ODUrLTIuMDU4MCAgICAgICAgPyBt
aWdodCBiZSAxLjAyMDB4IHNsb3dlcgogICBhcnJheS1wcm90b3R5cGUtbWFwICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDk1LjA4ODYrLTMuNDcyMSAgICAgICAgICAgOTMuODU0MCstMi41
NzI2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEzMnggZmFzdGVyCiAgIGFycmF5LXByb3RvdHlwZS1y
ZWR1Y2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgODMuNTE2OSstMi4zNDI5ICAgICA/ICAg
ICA4My42Mjc4Ky0yLjE5MDggICAgICAgID8KICAgYXJyYXktcHJvdG90eXBlLXJlZHVjZVJpZ2h0
ICAgICAgICAgICAgICAgICAgICAgIDEyOS40NTE3Ky01LjU0OTUgICAgID8gICAgMTM3LjkxODkr
LTMxLjE1MjMgICAgICAgPyBtaWdodCBiZSAxLjA2NTR4IHNsb3dlcgogICBhcnJheS1wcm90b3R5
cGUtc29tZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2LjIwOTkrLTAuNTQ0OCAgICAg
ISAgICAgODcuMzE4NCstMC41MDU1ICAgICAgICAhIGRlZmluaXRlbHkgMS4wMTI5eCBzbG93ZXIK
ICAgYXJyYXktc3BsaWNlLWNvbnRpZ3VvdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAyOS44
MzU2Ky0wLjQ5NzEgICAgID8gICAgIDMxLjA4NjUrLTAuODQ3MiAgICAgICAgPyBtaWdodCBiZSAx
LjA0MTl4IHNsb3dlcgogICBhcnJheS13aXRoLWRvdWJsZS1hZGQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA0LjI3NzkrLTAuMTE3MiAgICAgPyAgICAgIDQuMzAzMistMC4wODc0ICAgICAg
ICA/CiAgIGFycmF5LXdpdGgtZG91YmxlLWluY3JlbWVudCAgICAgICAgICAgICAgICAgICAgICAg
IDMuNTgwMCstMC4xMTQ1ICAgICAgICAgICAgMy40MjA0Ky0wLjA3MzMgICAgICAgICAgbWlnaHQg
YmUgMS4wNDY3eCBmYXN0ZXIKICAgYXJyYXktd2l0aC1kb3VibGUtbXVsLWFkZCAgICAgICAgICAg
ICAgICAgICAgICAgICAgNC45NTUyKy0wLjA4OTQgICAgICAgICAgICA0Ljk0NDMrLTAuMTEzOSAg
ICAgICAgCiAgIGFycmF5LXdpdGgtZG91YmxlLXN1bSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDMuMzQxNistMC4xNDMxICAgICAgICAgICAgMy4zMjU1Ky0wLjA2MDQgICAgICAgIAogICBh
cnJheS13aXRoLWludDMyLWFkZC1zdWIgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjUxNjEr
LTAuMTM4MyAgICAgPyAgICAgIDYuNTU3MCstMC4xMzUyICAgICAgICA/CiAgIGFycmF5LXdpdGgt
aW50MzItb3ItZG91YmxlLXN1bSAgICAgICAgICAgICAgICAgICAgIDMuNTExMSstMC4xMDEzICAg
ICAgICAgICAgMy40NTY4Ky0wLjA1NzAgICAgICAgICAgbWlnaHQgYmUgMS4wMTU3eCBmYXN0ZXIK
ICAgQXJyYXlCdWZmZXItRGF0YVZpZXctYWxsb2MtbGFyZ2UtbG9uZy1saXZlZCAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkzLjUzODkrLTEu
MzIxNSAgICAgICAgICAgOTMuMzY4OCstMC40NzEwICAgICAgICAKICAgQXJyYXlCdWZmZXItRGF0
YVZpZXctYWxsb2MtbG9uZy1saXZlZCAgICAgICAgICAgICAzNS4zNjQxKy0wLjU0NTQgICAgID8g
ICAgIDM1Ljk2NzMrLTEuMDIxOCAgICAgICAgPyBtaWdodCBiZSAxLjAxNzF4IHNsb3dlcgogICBB
cnJheUJ1ZmZlci1JbnQzMkFycmF5LWJ5dGVPZmZzZXQgICAgICAgICAgICAgICAgICA0LjEwODMr
LTAuMTUzMSAgICAgICAgICAgIDQuMDAzMCstMC4wNTk1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI2
M3ggZmFzdGVyCiAgIEFycmF5QnVmZmVyLUludDhBcnJheS1hbGxvYy1sYXJnZS1sb25nLWxpdmVk
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OTguNjc0MistMi4xMDAwICAgICAgICAgICA5OC4yNzIwKy0wLjQ2MzUgICAgICAgIAogICBBcnJh
eUJ1ZmZlci1JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1idWZmZXIgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NS4xMzcwKy0wLjg5Mzgg
ICAgICAgICAgIDU0Ljc4NTArLTAuNzAzOCAgICAgICAgCiAgIEFycmF5QnVmZmVyLUludDhBcnJh
eS1hbGxvYy1sb25nLWxpdmVkICAgICAgICAgICAgMzYuMTYwMCstMi42NzEyICAgICA/ICAgICAz
Ni4zOTYzKy0zLjg5MjMgICAgICAgID8KICAgQXJyYXlCdWZmZXItSW50OEFycmF5LWFsbG9jICAg
ICAgICAgICAgICAgICAgICAgICAzMi45MjkxKy0wLjg4MzggICAgID8gICAgIDMzLjIwOTgrLTAu
NjQ5OCAgICAgICAgPwogICBhcnJvd2Z1bmN0aW9uLWNhbGwtaW4tY2xhc3MtY29uc3RydWN0b3Ig
ICAgICAgICAgICAwLjI3NDkrLTAuMDMyOSAgICAgICAgICAgIDAuMjcxMistMC4wNDgxICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDEzN3ggZmFzdGVyCiAgIGFycm93ZnVuY3Rpb24tY2FsbC1pbi1jbGFz
cy1tZXRob2QgICAgICAgICAgICAgICAgMjQuNjU2NSstMC40MTE0ICAgICAgICAgICAyNC42Mzk0
Ky0wLjc1MDEgICAgICAgIAogICBhcnJvd2Z1bmN0aW9uLWNhbGwtaW4tZnVuY3Rpb24gICAgICAg
ICAgICAgICAgICAgICAwLjIxNDYrLTAuMDE0NiAgICAgPyAgICAgIDAuMjE4OCstMC4wMjA1ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDE5N3ggc2xvd2VyCiAgIGFycm93ZnVuY3Rpb24tY2FsbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjMzNSstMC4wMTI4ICAgICAgICAgICAgMC4y
MjAzKy0wLjAyNDcgICAgICAgICAgbWlnaHQgYmUgMS4wNTk4eCBmYXN0ZXIKICAgYXNtanNfYm9v
bF9idWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC44NzcxKy0wLjA3ODcg
ICAgID8gICAgICA4LjkyMDMrLTAuMTM5NiAgICAgICAgPwogICBhc3NpZ24tY3VzdG9tLXNldHRl
ci1wb2x5bW9ycGhpYyAgICAgICAgICAgICAgICAgICAzLjU1MzMrLTAuMTMwNiAgICAgICAgICAg
IDMuNTUzMSstMC4wNzgxICAgICAgICAKICAgYXNzaWduLWN1c3RvbS1zZXR0ZXIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgNS4zODU3Ky0wLjEyNzcgICAgID8gICAgICA1LjUwMDcrLTAu
MTAyMiAgICAgICAgPyBtaWdodCBiZSAxLjAyMTR4IHNsb3dlcgogICBiYXNpYy1zZXQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjc0NjUrLTAuMTc3NiAgICAgPyAg
ICAgMTAuODAwNistMC4zMDAwICAgICAgICA/CiAgIGJpZy1pbnQtbXVsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMuNzkwNSstMC4wNTA3ICAgICA/ICAgICAgMy43OTIx
Ky0wLjA4NTggICAgICAgID8KICAgYmlnc3dpdGNoLWluZGlyZWN0LXN5bWJvbC1vci11bmRlZmlu
ZWQgICAgICAgICAgICA4MC42MzgzKy0wLjY5NDAgICAgICAgICAgIDc5LjQ1MjcrLTAuNTE3MSAg
ICAgICAgICBtaWdodCBiZSAxLjAxNDl4IGZhc3RlcgogICBiaWdzd2l0Y2gtaW5kaXJlY3Qtc3lt
Ym9sICAgICAgICAgICAgICAgICAgICAgICAgIDg2LjM3NjUrLTEuMzE1MiAgICAgPyAgICAgODYu
ODk5MystMC45MjMzICAgICAgICA/CiAgIGJpZ3N3aXRjaC1pbmRpcmVjdCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNTQuNTg3MCstMC4zNTQzICAgICA/ICAgICA1NS41NzcxKy0yLjI5
NDcgICAgICAgID8gbWlnaHQgYmUgMS4wMTgxeCBzbG93ZXIKICAgYmlnc3dpdGNoICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Mi4zOTk3Ky0xLjExMzYgICAgICAgICAg
IDQyLjE1ODIrLTAuNTM0MSAgICAgICAgCiAgIGJvb2xlYW4tdGVzdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMuNDA3OCstMC4wNTY4ICAgICA/ICAgICAgMy40NDQwKy0w
LjEwMzAgICAgICAgID8gbWlnaHQgYmUgMS4wMTA2eCBzbG93ZXIKICAgYm91bmQtZnVuY3Rpb24t
Y2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC45NjAyKy0wLjEzMjUgICAgICAg
ICAgIDEwLjgxNjQrLTAuMTM1MyAgICAgICAgICBtaWdodCBiZSAxLjAxMzN4IGZhc3RlcgogICBi
b3VuZC1mdW5jdGlvbi1jb25zdHJ1Y3Rpb24tcGVyZm9ybWFuY2UgICAgICAgICAgICAwLjIzMTgr
LTAuMDIzMSAgICAgICAgICAgIDAuMjE5OCstMC4wMjc0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0
NnggZmFzdGVyCiAgIGJyYW5jaC1mb2xkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQuNTkxNistMC4wNjMxICAgICA/ICAgICAgNC42MDMxKy0wLjA4NzQgICAgICAgID8K
ICAgYnJhbmNoLW9uLXN0cmluZy1hcy1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAyMC44
NzE0Ky0wLjM1MTYgICAgID8gICAgIDIxLjAzNTQrLTAuMjAwOCAgICAgICAgPwogICBidWctMTUz
NDMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyNTkrLTAuMDE5
MiAgICAgICAgICAgIDAuMjE2MSstMC4wMTc3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ1MHggZmFz
dGVyCiAgIGJ1aWxkLWxhcmdlLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NDEuMDc1MystMC41NTkyICAgICAgICAgICA0MC42Mjg4Ky0wLjQzOTkgICAgICAgICAgbWlnaHQg
YmUgMS4wMTEweCBmYXN0ZXIKICAgYnktdmFsLWdlbmVyaWMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4yMjc4Ky0wLjAxODYgICAgICAgICAgICAwLjIwODQrLTAuMDE1MyAg
ICAgICAgICBtaWdodCBiZSAxLjA5MzF4IGZhc3RlcgogICBjYWxsLW9yLW5vdC1jYWxsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzODkrLTAuMDI5MCAgICAgICAgICAgIDAu
MjE2MSstMC4wMTE2ICAgICAgICAgIG1pZ2h0IGJlIDEuMTA1NXggZmFzdGVyCiAgIGNhbGwtc3By
ZWFkLWFwcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQuODY2NystMC43NDMx
ICAgICA/ICAgICAzNS4xNjgwKy0wLjc0MTcgICAgICAgID8KICAgY2FsbC1zcHJlYWQtY2FsbCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMy45ODQ1Ky0wLjU2NjQgICAgID8gICAg
IDM0LjE4NjcrLTAuNTE4MyAgICAgICAgPwogICBjYXB0dXJlZC1hc3NpZ25tZW50cyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjQ0ODArLTAuMDUwNCAgICAgICAgICAgIDAuNDI3NCst
MC4wMjI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ4M3ggZmFzdGVyCiAgIGNhc3QtaW50LXRvLWRv
dWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNzQ4NistMC4wNjg3ICAgICA/
ICAgICAgNS44MTQxKy0wLjE0OTAgICAgICAgID8gbWlnaHQgYmUgMS4wMTE0eCBzbG93ZXIKICAg
Y2VsbC1hcmd1bWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC43OTMz
Ky0wLjEzMjYgICAgICAgICAgICA0LjY5OTIrLTAuMTAwNSAgICAgICAgICBtaWdodCBiZSAxLjAy
MDB4IGZhc3RlcgogICBjZmctc2ltcGxpZnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjMwNDIrLTAuMDkzNCAgICAgPyAgICAgIDMuMzI3NCstMC4xMTYxICAgICAgICA/
CiAgIGNoYWluLWdldHRlci1hY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAu
MjM4MCstMC4wMTQ4ICAgICA/ICAgICAgMC4yNDEzKy0wLjAyNjMgICAgICAgID8gbWlnaHQgYmUg
MS4wMTM3eCBzbG93ZXIKICAgY21wZXEtb2JqLXRvLW9iai1vdGhlciAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxMS4xMTI5Ky0wLjE0OTUgICAgIF4gICAgIDEwLjY4NzcrLTAuMTE1OSAgICAg
ICAgXiBkZWZpbml0ZWx5IDEuMDM5OHggZmFzdGVyCiAgIGNvbmNhdC1hcHBlbmQtb25lICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjIzNSstMC4wMjcyICAgICAgICAgICAgMC4y
MDQ1Ky0wLjAxMTYgICAgICAgICAgbWlnaHQgYmUgMS4wOTI5eCBmYXN0ZXIKICAgY29uc3RhbnQt
dGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNS40NDE0Ky0wLjE2NjYg
ICAgICAgICAgICA1LjM5MjMrLTAuMDYxNyAgICAgICAgCiAgIGNyZWF0ZS1sb3RzLW9mLWZ1bmN0
aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIuMDM3NCstMC4yMDY5ICAgICA/ICAgICAx
Mi4wNzYxKy0wLjI0MTIgICAgICAgID8KICAgY3NlLW5ldy1hcnJheS1idWZmZXIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC4yMTgwKy0wLjAwOTYgICAgICAgICAgICAwLjIwNDArLTAu
MDEyNyAgICAgICAgICBtaWdodCBiZSAxLjA2ODh4IGZhc3RlcgogICBjc2UtbmV3LWFycmF5ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyNzcrLTAuMDIyMyAgICAgICAg
ICAgIDAuMjA4MistMC4wMjA1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDkzOHggZmFzdGVyCiAgIGN1
c3RvbS1zZXR0ZXItZ2V0dGVyLWFzLXB1dC1nZXQtYnktaWQgICAgICAgICAgICAgIDAuMjI1NCst
MC4wMTYzICAgICAgICAgICAgMC4yMTgzKy0wLjAxMDMgICAgICAgICAgbWlnaHQgYmUgMS4wMzIy
eCBmYXN0ZXIKICAgRGF0YVZpZXctY3VzdG9tLXByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAg
ICAgICA5OC44MDQwKy0xLjU3ODMgICAgID8gICAgIDk5Ljk2NTkrLTIuNzYyOCAgICAgICAgPyBt
aWdodCBiZSAxLjAxMTh4IHNsb3dlcgogICBkZWxheS10ZWFyLW9mZi1hcmd1bWVudHMtc3RyaWN0
bW9kZSAgICAgICAgICAgICAgICA5LjY2MjgrLTAuMjgwOCAgICAgPyAgICAgMTAuMDg4OSstMC42
NjY5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDQ0MXggc2xvd2VyCiAgIGRlbHRhYmx1ZS1mb3Itb2Yg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYuMDQ4NistMS4xMzk4ICAgICAgICAg
ICA0NS4yMDg3Ky0wLjY5MTMgICAgICAgICAgbWlnaHQgYmUgMS4wMTg2eCBmYXN0ZXIKICAgZGVs
dGFibHVlLXZhcmFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOS45MzA3Ky0w
LjgzNTYgICAgICAgICAgIDM5LjkwMzQrLTAuOTY4NCAgICAgICAgCiAgIGRlc3RydWN0dXJpbmct
YXJndW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgNjkuMTg4MistMS42OTQ3ICAgICA/
ICAgICA3MC42NDYxKy0wLjk2OTQgICAgICAgID8gbWlnaHQgYmUgMS4wMjExeCBzbG93ZXIKICAg
ZGVzdHJ1Y3R1cmluZy1wYXJhbWV0ZXJzLW92ZXJyaWRkZW4tYnktZnVuY3Rpb24gICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMTcxKy0w
LjAwODYgICAgICAgICAgICAwLjIxNDIrLTAuMDE5MyAgICAgICAgICBtaWdodCBiZSAxLjAxMzV4
IGZhc3RlcgogICBkZXN0cnVjdHVyaW5nLXN3YXAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA1LjUxMDIrLTAuMTA1NSAgICAgPyAgICAgIDUuNTkwMistMC4xODk3ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDE0NXggc2xvd2VyCiAgIGRpcmVjdC1hcmd1bWVudHMtZ2V0Ynl2YWwgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEuNTg3MCstMC4yMjM5ICAgICA/ICAgICAgMS42MDM0Ky0wLjEy
NjkgICAgICAgID8gbWlnaHQgYmUgMS4wMTAzeCBzbG93ZXIKICAgZGlyZWN0LWFyZ3VtZW50cy1s
ZW5ndGggICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4zOTg4Ky0wLjM2NTYgICAgICAgICAg
ICA4LjE5MDYrLTAuMzA2OCAgICAgICAgICBtaWdodCBiZSAxLjAyNTR4IGZhc3RlcgogICBkaXJl
Y3QtYXJndW1lbnRzLW92ZXJyaWRkZW4tbGVuZ3RoICAgICAgICAgICAgICAgICA4LjQ4MjIrLTAu
NDkxNiAgICAgICAgICAgIDguMTg4MSstMC40MjczICAgICAgICAgIG1pZ2h0IGJlIDEuMDM1OXgg
ZmFzdGVyCiAgIGRpcmVjdC1hcmd1bWVudHMtcG9zc2libHktb3ZlcnJpZGRlbi1sZW5ndGggICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC42
NTI4Ky0wLjIxODkgICAgICAgICAgICA4LjY1MDYrLTAuMDgxOCAgICAgICAgCiAgIGRpdi1ib29s
ZWFuLWRvdWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNzczMistMC4xNTMz
ICAgICAgICAgICAgNC43NDMwKy0wLjEwOTUgICAgICAgIAogICBkaXYtYm9vbGVhbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjkzMTQrLTAuMTU4NiAgICAgPyAgICAg
IDcuOTM2OSstMC4yMDEwICAgICAgICA/CiAgIGRvdWJsZS1nZXQtYnktdmFsLW91dC1vZi1ib3Vu
ZHMgICAgICAgICAgICAgICAgICAgIDAuMjM0OSstMC4wNDI0ICAgICAgICAgICAgMC4yMTY0Ky0w
LjAxNjkgICAgICAgICAgbWlnaHQgYmUgMS4wODU3eCBmYXN0ZXIKICAgZG91YmxlLXBvbGx1dGlv
bi1nZXRieXZhbCAgICAgICAgICAgICAgICAgICAgICAgICAgOC4yMTQ4Ky0wLjE1NjkgICAgICAg
ICAgICA4LjA1ODYrLTAuMTA2MiAgICAgICAgICBtaWdodCBiZSAxLjAxOTR4IGZhc3RlcgogICBk
b3VibGUtcG9sbHV0aW9uLXB1dGJ5b2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICA1Ljg2MTcr
LTAuMTE0NCAgICAgPyAgICAgIDUuODY2OCstMC4xNzgyICAgICAgICA/CiAgIGRvdWJsZS1yZWFs
LXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjMzNistMC4wMTc5ICAg
ICAgICAgICAgMC4yMjkwKy0wLjAxNjcgICAgICAgICAgbWlnaHQgYmUgMS4wMjA0eCBmYXN0ZXIK
ICAgZG91YmxlLXRvLWludDMyLXR5cGVkLWFycmF5LW5vLWlubGluZSAgICAgICAgICAgICAgMC4y
NzE0Ky0wLjAxNjQgICAgID8gICAgICAwLjI3ODcrLTAuMDMyMCAgICAgICAgPyBtaWdodCBiZSAx
LjAyNzB4IHNsb3dlcgogICBkb3VibGUtdG8taW50MzItdHlwZWQtYXJyYXkgICAgICAgICAgICAg
ICAgICAgICAgICAyLjQzNTgrLTAuMDcxMSAgICAgICAgICAgIDIuMzk2MCstMC4wODMxICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDE2NnggZmFzdGVyCiAgIGRvdWJsZS10by11aW50MzItdHlwZWQtYXJy
YXktbm8taW5saW5lICAgICAgICAgICAgIDAuMjg2NistMC4wMjgxICAgICAgICAgICAgMC4yNzcw
Ky0wLjAxOTAgICAgICAgICAgbWlnaHQgYmUgMS4wMzQ3eCBmYXN0ZXIKICAgZG91YmxlLXRvLXVp
bnQzMi10eXBlZC1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgMi40OTgyKy0wLjA2MTkgICAg
ID8gICAgICAyLjUzNjgrLTAuMTE0OCAgICAgICAgPyBtaWdodCBiZSAxLjAxNTV4IHNsb3dlcgog
ICBlbGlkYWJsZS1uZXctb2JqZWN0LWRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Ljg0
NDArLTAuNjQyOCAgICAgPyAgICAgMjUuOTIyMCstMC4yNTIyICAgICAgICA/CiAgIGVsaWRhYmxl
LW5ldy1vYmplY3Qtcm9mbGNvcHRlciAgICAgICAgICAgICAgICAgICAgMzIuMjE0NystNy43MzY4
ICAgICAgICAgICAyOS43MTYxKy02LjU3NjAgICAgICAgICAgbWlnaHQgYmUgMS4wODQxeCBmYXN0
ZXIKICAgZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwgICAgICAgICAgICAgICAgICAgICAy
Ny4xMDgzKy0wLjIzNzIgICAgID8gICAgIDI3LjIxOTUrLTAuMjYwMyAgICAgICAgPwogICBlbGlk
YWJsZS1uZXctb2JqZWN0LXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgIDI4LjM4MjQrLTAu
MjQ1NiAgICAgPyAgICAgMjguMzgzNSstMC40ODM3ICAgICAgICA/CiAgIGVtcHR5LXN0cmluZy1w
bHVzLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNTE3NistMC4yNzU3ICAgICAg
ICAgICAgOS40Mzc3Ky0wLjIxMjUgICAgICAgIAogICBlbXNjcmlwdGVuLWN1YmUyaGFzaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDQxLjI3NzQrLTAuODYzNiAgICAgPyAgICAgNDEuMzA1
OCstMC43MTU5ICAgICAgICA/CiAgIGV2YWwtY29tcHV0ZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMjI4MCstMC4wMTk3ICAgICAgICAgICAgMC4yMTczKy0wLjAyODEg
ICAgICAgICAgbWlnaHQgYmUgMS4wNDkxeCBmYXN0ZXIKICAgZXZhbC1ub3QtZXZhbC1jb21wdXRl
LWFyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMjc3Ky0wLjAxNzggICAgICAgICAgICAw
LjIxNTkrLTAuMDA5NiAgICAgICAgICBtaWdodCBiZSAxLjA1NTB4IGZhc3RlcgogICBldmFsLW5v
dC1ldmFsLWNvbXB1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyMzYrLTAuMDI3
NiAgICAgICAgICAgIDAuMjA4NystMC4wMTQxICAgICAgICAgIG1pZ2h0IGJlIDEuMDcxM3ggZmFz
dGVyCiAgIGV4aXQtbGVuZ3RoLW9uLXBsYWluLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAg
IDAuMjI2NistMC4wMTg0ICAgICA/ICAgICAgMC4yMzQwKy0wLjAxNDkgICAgICAgID8gbWlnaHQg
YmUgMS4wMzI5eCBzbG93ZXIKICAgZXh0ZXJuYWwtYXJndW1lbnRzLWdldGJ5dmFsICAgICAgICAg
ICAgICAgICAgICAgICAgMS43OTM5Ky0wLjE1NDUgICAgID8gICAgICAxLjgxODIrLTAuMjEzMSAg
ICAgICAgPyBtaWdodCBiZSAxLjAxMzV4IHNsb3dlcgogICBleHRlcm5hbC1hcmd1bWVudHMtcHV0
Ynl2YWwgICAgICAgICAgICAgICAgICAgICAgICAzLjI0MDYrLTAuMTQxNiAgICAgPyAgICAgIDMu
MjgyMSstMC4xNzIyICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyOHggc2xvd2VyCiAgIGZpeGVkLXR5
cGVkLWFycmF5LXN0b3JhZ2UtdmFyLWluZGV4ICAgICAgICAgICAgICAgIDEuNDM0MCstMC4wNjQx
ICAgICAgICAgICAgMS40MDk1Ky0wLjAzNzcgICAgICAgICAgbWlnaHQgYmUgMS4wMTc0eCBmYXN0
ZXIKICAgZml4ZWQtdHlwZWQtYXJyYXktc3RvcmFnZSAgICAgICAgICAgICAgICAgICAgICAgICAg
MS4wNzE0Ky0wLjAzMzkgICAgICAgICAgICAxLjA3MTMrLTAuMDM4MyAgICAgICAgCiAgIEZsb2F0
MzJBcnJheS1tYXRyaXgtbXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYuMTk4NCstMC40
MjQ2ICAgICAgICAgICAgNS44OTQyKy0wLjIzMjUgICAgICAgICAgbWlnaHQgYmUgMS4wNTE2eCBm
YXN0ZXIKICAgRmxvYXQzMkFycmF5LXRvLUZsb2F0NjRBcnJheS1zZXQgICAgICAgICAgICAgICAg
ICA1NC40OTgzKy0xLjIwMjQgICAgICAgICAgIDUzLjY3NzArLTEuMDE5MyAgICAgICAgICBtaWdo
dCBiZSAxLjAxNTN4IGZhc3RlcgogICBGbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZCAgICAg
ICAgICAgICAgICAgICAgIDg3LjIxODErLTAuNjc4NyAgICAgICAgICAgODYuNzc4MCstMC43MzU1
ICAgICAgICAKICAgRmxvYXQ2NEFycmF5LXRvLUludDE2QXJyYXktc2V0ICAgICAgICAgICAgICAg
ICAgICA2OC42NzE2Ky0wLjc1NjYgICAgICAgICAgIDY3LjM1NTcrLTEuMzgzMSAgICAgICAgICBt
aWdodCBiZSAxLjAxOTV4IGZhc3RlcgogICBmb2xkLWRvdWJsZS10by1pbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDE1Ljk4MjErLTAuMTkxNCAgICAgICAgICAgMTUuOTM3MSstMC4x
NzA0ICAgICAgICAKICAgZm9sZC1nZXQtYnktaWQtdG8tbXVsdGktZ2V0LWJ5LW9mZnNldC1yYXJl
LWludCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEwLjM1MTErLTEuMjM4NCAgICAgPyAgICAgMTEuMjUzNCstMi41MjIxICAgICAgICA/IG1p
Z2h0IGJlIDEuMDg3Mnggc2xvd2VyCiAgIGZvbGQtZ2V0LWJ5LWlkLXRvLW11bHRpLWdldC1ieS1v
ZmZzZXQgICAgICAgICAgICAgIDkuMzQ3MSstMS44ODYyICAgICAgICAgICAgOC42ODMxKy0wLjMx
NjggICAgICAgICAgbWlnaHQgYmUgMS4wNzY1eCBmYXN0ZXIKICAgZm9sZC1tdWx0aS1nZXQtYnkt
b2Zmc2V0LXRvLWdldC1ieS1vZmZzZXQgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOC4yMDMxKy0yLjI1NDAgICAgID8gICAgICA5LjQwODQr
LTEuNzk2MyAgICAgICAgPyBtaWdodCBiZSAxLjE0Njl4IHNsb3dlcgogICBmb2xkLW11bHRpLWdl
dC1ieS1vZmZzZXQtdG8tcG9seS1nZXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuMzIyOCstMS44NzIwICAgICAgICAg
ICAgNy42MzU5Ky0yLjE4MjkgICAgICAgICAgbWlnaHQgYmUgMS4yMjA5eCBmYXN0ZXIKICAgZm9s
ZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXBvbHktcHV0LWJ5LW9mZnNldCAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwLjg2ODYrLTAuMTI4
OSAgICAgICAgICAgIDguMjUwMystMi45NzU4ICAgICAgICAgIG1pZ2h0IGJlIDEuMzE3NHggZmFz
dGVyCiAgIGZvbGQtbXVsdGktcHV0LWJ5LW9mZnNldC10by1wdXQtYnktb2Zmc2V0ICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuODI4OSst
Mi4wNjIxICAgICAgICAgICAgNy4xODA1Ky0yLjMwMTMgICAgICAgICAgbWlnaHQgYmUgMS4wOTAz
eCBmYXN0ZXIKICAgZm9sZC1tdWx0aS1wdXQtYnktb2Zmc2V0LXRvLXJlcGxhY2Utb3ItdHJhbnNp
dGlvbi1wdXQtYnktb2Zmc2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTkuMTE1MCstMi4xOTYzICAgICA/ICAgICAxOS41OTMzKy0yLjE3
NjMgICAgICAgID8gbWlnaHQgYmUgMS4wMjUweCBzbG93ZXIKICAgZm9sZC1wdXQtYnktaWQtdG8t
bXVsdGktcHV0LWJ5LW9mZnNldCAgICAgICAgICAgICAxMC4zMDQyKy0yLjI5NjMgICAgID8gICAg
IDExLjA1NjYrLTIuNzM3MSAgICAgICAgPyBtaWdodCBiZSAxLjA3MzB4IHNsb3dlcgogICBmb2xk
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldCAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5Ljk5MjArLTAu
MTE5OSAgICAgPyAgICAgMTIuMDI3NSstMi4zNzg1ICAgICAgICA/IG1pZ2h0IGJlIDEuMjAzN3gg
c2xvd2VyCiAgIGZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zm
c2V0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTIuNDgzMistMi43NTM3ICAgICAgICAgICAxMS4zMzU0Ky0yLjY1NTcgICAgICAgICAgbWln
aHQgYmUgMS4xMDEzeCBmYXN0ZXIKICAgZm9sZC1wdXQtc3RydWN0dXJlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNC41OTQ4Ky0wLjM1NjMgICAgID8gICAgICA1LjA5NTErLTEuNjM1
MyAgICAgICAgPyBtaWdodCBiZSAxLjEwODl4IHNsb3dlcgogICBmb3Itb2YtaXRlcmF0ZS1hcnJh
eS1lbnRyaWVzICAgICAgICAgICAgICAgICAgICAgIDE3Ljc5NzUrLTAuNjczMCAgICAgICAgICAg
MTYuNzE5NistMC44NDExICAgICAgICAgIG1pZ2h0IGJlIDEuMDY0NXggZmFzdGVyCiAgIGZvci1v
Zi1pdGVyYXRlLWFycmF5LWtleXMgICAgICAgICAgICAgICAgICAgICAgICAgIDYuNTc3NistMC4x
NjE1ICAgICA/ICAgICAgNi42MjgyKy0wLjI0NDkgICAgICAgID8KICAgZm9yLW9mLWl0ZXJhdGUt
YXJyYXktdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgNi4zMzg3Ky0wLjEzMzggICAgID8g
ICAgICA2LjQwNzArLTAuMDYzNSAgICAgICAgPyBtaWdodCBiZSAxLjAxMDh4IHNsb3dlcgogICBm
cmVlemUtYW5kLWRvLXdvcmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LjUzODAr
LTAuMTcxNiAgICAgPyAgICAgMTYuNjg2NystMC4xNDM4ICAgICAgICA/CiAgIGZyb3VuZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuNzkzNSstMC4xNTg4ICAg
ICA/ICAgICAxMS44MjU3Ky0wLjIwNDYgICAgICAgID8KICAgZnRsLWxpYnJhcnktaW5saW5pbmct
ZGF0YXZpZXcgICAgICAgICAgICAgICAgICAgICA4My42NDgyKy0yLjE1NDEgICAgIF4gICAgIDc1
Ljk0ODQrLTEuMjIyMiAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTAxNHggZmFzdGVyCiAgIGZ0bC1s
aWJyYXJ5LWlubGluaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuMzM1MCstMC4x
NTczICAgICA/ICAgICAyNy41OTI5Ky0wLjE5NTAgICAgICAgID8KICAgZnRsLXBvbHltb3JwaGlj
LWJpdGFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNDIwKy0wLjAxNTAgICAgICAg
ICAgICAwLjIzMTUrLTAuMDA5NyAgICAgICAgICBtaWdodCBiZSAxLjA0NTJ4IGZhc3RlcgogICBm
dGwtcG9seW1vcnBoaWMtYml0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI0ODIr
LTAuMDE5NiAgICAgICAgICAgIDAuMjM1MystMC4wMTU3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0
OHggZmFzdGVyCiAgIGZ0bC1wb2x5bW9ycGhpYy1iaXR4b3IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuMjY0MSstMC4wMjUzICAgICAgICAgICAgMC4yMzYyKy0wLjAxNjkgICAgICAgICAg
bWlnaHQgYmUgMS4xMTgweCBmYXN0ZXIKICAgZnRsLXBvbHltb3JwaGljLWRpdiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC4yNDE1Ky0wLjAxNjcgICAgICAgICAgICAwLjIzMjArLTAu
MDE2NiAgICAgICAgICBtaWdodCBiZSAxLjA0MTB4IGZhc3RlcgogICBmdGwtcG9seW1vcnBoaWMt
bHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI0ODcrLTAuMDE4NSAgICAgICAg
ICAgIDAuMjMzOCstMC4wMTk5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDYzOXggZmFzdGVyCiAgIGZ0
bC1wb2x5bW9ycGhpYy1tdWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjQwMCst
MC4wMTYyICAgICAgICAgICAgMC4yMjY2Ky0wLjAxMTAgICAgICAgICAgbWlnaHQgYmUgMS4wNTkx
eCBmYXN0ZXIKICAgZnRsLXBvbHltb3JwaGljLXJzaGlmdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC4yNDQ4Ky0wLjAwNzkgICAgICAgICAgICAwLjIzNjUrLTAuMDE2NyAgICAgICAgICBt
aWdodCBiZSAxLjAzNDl4IGZhc3RlcgogICBmdGwtcG9seW1vcnBoaWMtU3RyaW5nRnJvbUNoYXJD
b2RlICAgICAgICAgICAgICAgICAwLjI0MTgrLTAuMDE2MiAgICAgPyAgICAgIDAuMjQ0OSstMC4w
MjIxICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyOHggc2xvd2VyCiAgIGZ0bC1wb2x5bW9ycGhpYy1z
dWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjM5MSstMC4wMTg2ICAgICAgICAg
ICAgMC4yMzM1Ky0wLjAxMDcgICAgICAgICAgbWlnaHQgYmUgMS4wMjQyeCBmYXN0ZXIKICAgZnRs
LXBvbHltb3JwaGljLXVyc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMzA1Ky0w
LjAwOTYgICAgID8gICAgICAwLjIzOTgrLTAuMDIxNCAgICAgICAgPyBtaWdodCBiZSAxLjA0MDR4
IHNsb3dlcgogICBmdW5jdGlvbi1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjIyNTYrLTAuMDE1OSAgICAgICAgICAgIDAuMjE0MistMC4wMTc1ICAgICAgICAgIG1p
Z2h0IGJlIDEuMDUzNnggZmFzdGVyCiAgIGZ1bmN0aW9uLWRvdC1hcHBseSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIuNTQyMystMC4wNjQ2ICAgICA/ICAgICAgMi42MDcwKy0wLjA3
NzAgICAgICAgID8gbWlnaHQgYmUgMS4wMjU0eCBzbG93ZXIKICAgZnVuY3Rpb24tdGVzdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4xMDYwKy0wLjA3ODcgICAgID8gICAg
ICAzLjEzNjIrLTAuMDM4MyAgICAgICAgPwogICBmdW5jdGlvbi13aXRoLWV2YWwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjIyOTYrLTAuMDE0NyAgICAgICAgICAgIDAuMjIxNist
MC4wMjgxICAgICAgICAgIG1pZ2h0IGJlIDEuMDM2MHggZmFzdGVyCiAgIGdjc2UtcG9seS1nZXQt
bGVzcy1vYnZpb3VzICAgICAgICAgICAgICAgICAgICAgICAgMjIuNTk5MCstMC4zODQ3ICAgICAg
ICAgICAyMi41NTQ1Ky0wLjEyMTAgICAgICAgIAogICBnY3NlLXBvbHktZ2V0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIyLjQ0MDIrLTAuMTcyNiAgICAgPyAgICAgMjIuNjQ2
NCstMC4xMjM0ICAgICAgICA/CiAgIGdjc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQuNTE4MSstMC4wNTUwICAgICA/ICAgICAgNC41NDczKy0wLjA4NDkg
ICAgICAgID8KICAgZ2VuZXJhdG9yLWNyZWF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC4yMTY2Ky0wLjAxNDcgICAgICAgICAgICAwLjIwNjUrLTAuMDEzMyAgICAgICAgICBt
aWdodCBiZSAxLjA0ODl4IGZhc3RlcgogICBnZW5lcmF0b3ItZmliICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDQwLjc4ODErLTAuNTI3MyAgICAgPyAgICAgNDEuMDMzNSstMC40
MjQ5ICAgICAgICA/CiAgIGdlbmVyYXRvci1mdW5jdGlvbi1jcmVhdGUgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMjI5OSstMC4wMTkzICAgICAgICAgICAgMC4yMTkwKy0wLjAyMzMgICAgICAg
ICAgbWlnaHQgYmUgMS4wNDk4eCBmYXN0ZXIKICAgZ2VuZXJhdG9yLXN1bnNwaWRlci1hY2Nlc3Mt
bnNpZXZlICAgICAgICAgICAgICAgICAgNi44MzgxKy0wLjMzNzUgICAgICAgICAgICA2Ljc1MjYr
LTAuMTAwNSAgICAgICAgICBtaWdodCBiZSAxLjAxMjd4IGZhc3RlcgogICBnZW5lcmF0b3Itd2l0
aC1zZXZlcmFsLXR5cGVzICAgICAgICAgICAgICAgICAgICAgMTQ3Ljc2MzQrLTguMjk3MSAgICAg
ICAgICAxNDUuNzA4NystMTAuOTA0NiAgICAgICAgIG1pZ2h0IGJlIDEuMDE0MXggZmFzdGVyCiAg
IGdldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZSAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAy
Ljg1NTkrLTAuMDc4NyAgICAgICAgICAgIDIuODA3OSstMC4wNjYxICAgICAgICAgIG1pZ2h0IGJl
IDEuMDE3MXggZmFzdGVyCiAgIGdldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDUuNTg0MSstMC4xMzQxICAgICA/ICAgICAgNS42MTEzKy0wLjA4OTEgICAgICAg
ID8KICAgZ2V0LWJ5LWlkLWNoYWluLWZyb20tdHJ5LWJsb2NrICAgICAgICAgICAgICAgICAgICAg
Mi42NTk4Ky0wLjExMTEgICAgICAgICAgICAyLjU4NDUrLTAuMDc4MiAgICAgICAgICBtaWdodCBi
ZSAxLjAyOTJ4IGZhc3RlcgogICBnZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
ICAgICAgICAgICAgICAzLjk3MDcrLTAuMDcxOCAgICAgPyAgICAgIDMuOTg5MystMC4wNTM1ICAg
ICAgICA/CiAgIGdldC1ieS1pZC1wcm90by1vci1zZWxmICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTMuOTUxNSstMS4xMTgwICAgICA/ICAgICAxNC4xMDgwKy0xLjQxMDAgICAgICAgID8gbWln
aHQgYmUgMS4wMTEyeCBzbG93ZXIKICAgZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1zaW1wbGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMy40MDU0Ky0wLjEwNjUgICAgICAgICAgICAzLjM3MzMr
LTAuMDk0NCAgICAgICAgCiAgIGdldC1ieS1pZC1zZWxmLW9yLXByb3RvICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMTQuNTU0NCstMS4xNTUwICAgICAgICAgICAxNC4yMDEwKy0xLjMxOTYgICAg
ICAgICAgbWlnaHQgYmUgMS4wMjQ5eCBmYXN0ZXIKICAgZ2V0LWJ5LXZhbC1vdXQtb2YtYm91bmRz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMzcxKy0wLjAyMjQgICAgICAgICAgICAwLjIx
NTcrLTAuMDEyMSAgICAgICAgICBtaWdodCBiZSAxLjA5OTR4IGZhc3RlcgogICBnZXQtYnktdmFs
LXdpdGgtc3RyaW5nLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxl
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDMuODE3MystMC4xMzE3ICAgICA/ICAgICAgMy44NDY1Ky0wLjEyMzggICAgICAgID8KICAgZ2V0
LWJ5LXZhbC13aXRoLXN0cmluZy1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDcuNzgyNCstMC4wOTY0ICAgICAgICAgICAgNy43NzQ3Ky0wLjEwODcgICAgICAgIAogICBnZXQt
YnktdmFsLXdpdGgtc3RyaW5nLWNoYWluLWZyb20tdHJ5LWJsb2NrICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzQxMSstMC4xMDU1ICAg
ICAgICAgICAgMi42NjExKy0wLjEyOTkgICAgICAgICAgbWlnaHQgYmUgMS4wMzAweCBmYXN0ZXIK
ICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24gICAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi43
MDExKy0wLjEzMTggICAgID8gICAgICA2LjgxOTkrLTAuMDg3OCAgICAgICAgPyBtaWdodCBiZSAx
LjAxNzd4IHNsb3dlcgogICBnZXQtYnktdmFsLXdpdGgtc3RyaW5nLXByb3RvLW9yLXNlbGYgICAg
ICAgICAgICAgIDE0LjA4MzIrLTAuNDQzMCAgICAgPyAgICAgMTQuMTYxOCstMC4zMzYyICAgICAg
ICA/CiAgIGdldC1ieS12YWwtd2l0aC1zdHJpbmctcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA1LjMxODQrLTAuMTA3NyAgICAgICAgICAgIDUuMjg1NSstMC4w
NTQwICAgICAgICAKICAgZ2V0LWJ5LXZhbC13aXRoLXN0cmluZy1zZWxmLW9yLXByb3RvICAgICAg
ICAgICAgICAxMy45NzIwKy0wLjI0NDYgICAgID8gICAgIDEzLjk3OTErLTAuMzE5OCAgICAgICAg
PwogICBnZXQtYnktdmFsLXdpdGgtc3ltYm9sLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tc2ltcGxlICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDMuMzM3MystMC4xMzM3ICAgICAgICAgICAgMy4yNDY3Ky0wLjEwNjgg
ICAgICAgICAgbWlnaHQgYmUgMS4wMjc5eCBmYXN0ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJv
bC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuMDc4NistMC4xNjA3ICAg
ICA/ICAgICAxMS4xNjQxKy0wLjE0NTMgICAgICAgID8KICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJv
bC1jaGFpbi1mcm9tLXRyeS1ibG9jayAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyLjcxNTkrLTAuMTIwNCAgICAgICAgICAgIDIuNzA4Nist
MC4wNTkyICAgICAgICAKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOC40ODQ5Ky0wLjA4MTAgICAgICAgICAgICA4LjQ4NDMrLTAuMTgzMyAgICAg
ICAgCiAgIGdldC1ieS12YWwtd2l0aC1zeW1ib2wtcHJvdG8tb3Itc2VsZiAgICAgICAgICAgICAg
MTQuMDk2NCstMC41MDk4ICAgICAgICAgICAxMy45MjU1Ky0wLjQyMjcgICAgICAgICAgbWlnaHQg
YmUgMS4wMTIzeCBmYXN0ZXIKICAgZ2V0LWJ5LXZhbC13aXRoLXN5bWJvbC1xdWFkbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNTM3OSstMC4wODU5ICAgICAgICAg
ICAgNC41MTQxKy0wLjE5MzYgICAgICAgIAogICBnZXQtYnktdmFsLXdpdGgtc3ltYm9sLXNlbGYt
b3ItcHJvdG8gICAgICAgICAgICAgIDE0LjE3OTYrLTAuMTg4NCAgICAgICAgICAgMTMuODg0MSst
MC4yNDIzICAgICAgICAgIG1pZ2h0IGJlIDEuMDIxM3ggZmFzdGVyCiAgIGdldF9ieV92YWwtSW50
MzJBcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMTE2MystMC4wNTI1ICAgICA/
ICAgICAgMS4xMzU3Ky0wLjA4NzIgICAgICAgID8gbWlnaHQgYmUgMS4wMTc1eCBzbG93ZXIKICAg
Z2V0X2NhbGxlZV9tb25vbW9ycGhpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4yNDg0
Ky0wLjIyMDEgICAgID8gICAgICA2LjMyOTMrLTAuMTk0NSAgICAgICAgPyBtaWdodCBiZSAxLjAx
MzB4IHNsb3dlcgogICBnZXRfY2FsbGVlX3BvbHltb3JwaGljICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA2LjMwMDArLTAuMTU3NiAgICAgICAgICAgIDYuMjUzNSstMC4yMTA1ICAgICAgICAK
ICAgZ2V0dGVyLW5vLWFjdGl2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4w
NjM1Ky0wLjA2NjYgICAgICAgICAgICA0LjA0ODMrLTAuMDcwNyAgICAgICAgCiAgIGdldHRlci1w
cm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjM3MistMC4wMTQ5
ICAgICAgICAgICAgMC4yMjkyKy0wLjAxODYgICAgICAgICAgbWlnaHQgYmUgMS4wMzQ4eCBmYXN0
ZXIKICAgZ2V0dGVyLXJpY2hhcmRzLXRyeS1jYXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4zMjIxKy0wLjAyODUgICAgICAgICAgICAwLjMxOTIrLTAuMDM1OCAgICAgICAgCiAgIGdldHRl
ci1yaWNoYXJkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzYuNjQzNSstNS43
NDczICAgICAgICAgICA3My4zNzY5Ky01LjA1OTMgICAgICAgICAgbWlnaHQgYmUgMS4wNDQ1eCBm
YXN0ZXIKICAgZ2V0dGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNC41MTkzKy0wLjA1MjQgICAgID8gICAgICA0LjU4MDArLTAuMTQ4NiAgICAgICAgPyBtaWdo
dCBiZSAxLjAxMzR4IHNsb3dlcgogICBnbG9iYWwtaXNOYU4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDE3LjE3OTQrLTAuMjg4NiAgICAgICAgICAgMTcuMTI1NSstMC4xNjg2
ICAgICAgICAKICAgZ2xvYmFsLW9iamVjdC1hY2Nlc3Mtd2l0aC1tdXRhdGluZy1zdHJ1Y3R1cmUg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4yMjk3Ky0wLjAxNDYgICAgICAgICAgICAwLjIyMjkrLTAuMDIzNyAgICAgICAgICBtaWdodCBi
ZSAxLjAzMDV4IGZhc3RlcgogICBnbG9iYWwtdmFyLWNvbnN0LWluZmVyLWZpcmUtZnJvbS1vcHQg
ICAgICAgICAgICAgICAwLjIyMTArLTAuMDA2MSAgICAgPyAgICAgIDAuMjQ0MistMC4wMjM3ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMTA1MXggc2xvd2VyCiAgIGdsb2JhbC12YXItY29uc3QtaW5mZXIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjMzMistMC4wMTE4ICAgICA/ICAgICAgMC4y
MzUyKy0wLjAyNTEgICAgICAgID8KICAgaGFyZC1vdmVyZmxvdy1jaGVjay1lcXVhbCAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4yMTkyKy0wLjAxMzUgICAgID8gICAgICAwLjIyMjIrLTAuMDIw
OCAgICAgICAgPyBtaWdodCBiZSAxLjAxMzZ4IHNsb3dlcgogICBoYXJkLW92ZXJmbG93LWNoZWNr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzMjYrLTAuMDE1MCAgICAgICAgICAg
IDAuMjEwMistMC4wMDk2ICAgICAgICAgIG1pZ2h0IGJlIDEuMTA2N3ggZmFzdGVyCiAgIEhhc2hN
YXAtcHV0LWdldC1pdGVyYXRlLWtleXMgICAgICAgICAgICAgICAgICAgICAgMjkuOTU1OSstMC4z
OTUyICAgICAgICAgICAyOS45MTUxKy0wLjQ1OTAgICAgICAgIAogICBIYXNoTWFwLXB1dC1nZXQt
aXRlcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5Ljc2MzMrLTAuMzA2NiAgICAgPyAg
ICAgMjkuODMyMystMC4xMjcxICAgICAgICA/CiAgIEhhc2hNYXAtc3RyaW5nLXB1dC1nZXQtaXRl
cmF0ZSAgICAgICAgICAgICAgICAgICAgNDAuMzIzNystMS4xNTEzICAgICAgICAgICAzOS41NDEx
Ky0wLjU1MDEgICAgICAgICAgbWlnaHQgYmUgMS4wMTk4eCBmYXN0ZXIKICAgaG9pc3QtbWFrZS1y
b3BlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNDI2Ky0wLjAyMjggICAg
ICAgICAgICAwLjIxNDQrLTAuMDEzOSAgICAgICAgICBtaWdodCBiZSAxLjEzMTV4IGZhc3Rlcgog
ICBob2lzdC1wb2x5LWNoZWNrLXN0cnVjdHVyZS1lZmZlY3RmdWwtbG9vcCAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI0MTYrLTAuMDIz
NiAgICAgICAgICAgIDAuMjEzOSstMC4wMTI0ICAgICAgICAgIG1pZ2h0IGJlIDEuMTI5M3ggZmFz
dGVyCiAgIGhvaXN0LXBvbHktY2hlY2stc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAg
IDAuMjQzNSstMC4wMjU2ICAgICAgICAgICAgMC4yMjM4Ky0wLjAxNzggICAgICAgICAgbWlnaHQg
YmUgMS4wODg0eCBmYXN0ZXIKICAgaW1wbGljaXQtYmlnc3dpdGNoLWluZGlyZWN0LXN5bWJvbCAg
ICAgICAgICAgICAgICA2Mi44ODIwKy0wLjY0NjQgICAgID8gICAgIDYzLjQ0MDkrLTAuOTY4NyAg
ICAgICAgPwogICBpbXVsLWRvdWJsZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA0LjAwMjQrLTAuMTEwNCAgICAgICAgICAgIDMuOTk1OCstMC4xMDA1ICAgICAgICAKICAg
aW11bC1pbnQtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4xNjAy
Ky0wLjIwMDAgICAgID8gICAgICA2LjM2NDMrLTAuMjAzNyAgICAgICAgPyBtaWdodCBiZSAxLjAz
MzF4IHNsb3dlcgogICBpbXVsLW1peGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAzLjk3NTYrLTAuMTAxNiAgICAgICAgICAgIDMuOTU0MSstMC4xMTEwICAgICAgICAK
ICAgaW4tZm91ci1jYXNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMi4x
NDE4Ky0xLjg4ODIgICAgID8gICAgIDIzLjEwMzgrLTAuMzA3NSAgICAgICAgPyBtaWdodCBiZSAx
LjA0MzR4IHNsb3dlcgogICBpbi1vbmUtY2FzZS1mYWxzZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEwLjE3NzgrLTAuMjE0MiAgICAgICAgICAgMTAuMDUxOSstMC4xMjEwICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDEyNXggZmFzdGVyCiAgIGluLW9uZS1jYXNlLXRydWUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTAuMDczMCstMC4xMDAwICAgICAgICAgICAxMC4wNzE5
Ky0wLjExMzkgICAgICAgIAogICBpbi10d28tY2FzZXMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEwLjM5NjcrLTAuMTAwNSAgICAgPyAgICAgMTAuNDg2MystMC4wNzQ5ICAg
ICAgICA/CiAgIGluZGV4ZWQtcHJvcGVydGllcy1pbi1vYmplY3RzICAgICAgICAgICAgICAgICAg
ICAgIDMuMzgxMystMC4wNTA1ICAgICAgICAgICAgMy4zMjQyKy0wLjA3OTIgICAgICAgICAgbWln
aHQgYmUgMS4wMTcyeCBmYXN0ZXIKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1p
bmxpbmUgICAgICAgICAgICAgMC4yMjQ1Ky0wLjAxNDYgICAgICAgICAgICAwLjIxNTMrLTAuMDA5
OSAgICAgICAgICBtaWdodCBiZSAxLjA0Mjl4IGZhc3RlcgogICBpbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tbW92ICAgICAgICAgICAgICAgICAgICAgIDExLjk4ODMrLTAuMzEyOSAgICAgICAgICAg
MTEuOTE2MistMC4yNTc3ICAgICAgICAKICAgaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10
by1zY29wZS1uby1pbmxpbmUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4yMzY5Ky0wLjAyNjkgICAgICAgICAgICAwLjIyNTMrLTAuMDIz
MiAgICAgICAgICBtaWdodCBiZSAxLjA1MTF4IGZhc3RlcgogICBpbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tcHV0LXRvLXNjb3BlICAgICAgICAgICAgIDI0LjQxMTgrLTAuMTQwOSAgICAgPyAgICAg
MjQuNTAwOCstMC4zOTA1ICAgICAgICA/CiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVu
dGVyLW5vLWlubGluZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjIzNDYrLTAuMDE3NyAgICAgICAgICAgIDAuMjMwMystMC4wMTAxICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDE4NXggZmFzdGVyCiAgIGluZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1yZWVudGVyICAgICAgICAgICAgICAgICAgMjQuNTk2MCstMC4yOTE1ICAgICA/ICAgICAyNC42
MTI5Ky0wLjQzMjMgICAgICAgID8KICAgaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5ICAg
ICAgICAgICAgICAgICAgICAgMy4zNTczKy0wLjEwMDggICAgICAgICAgICAzLjI5ODgrLTAuMDk5
OSAgICAgICAgICBtaWdodCBiZSAxLjAxNzd4IGZhc3RlcgogICBpbmZlci1jb25zdGFudC1wcm9w
ZXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjcwMzMrLTAuMTAxMiAgICAgPyAgICAg
IDIuNzEyMystMC4xMzQ2ICAgICAgICA/CiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZh
cnMgICAgICAgICAgICAgICAgICAgIDAuMjM2NystMC4wMjQyICAgICAgICAgICAgMC4yMzY0Ky0w
LjAyMzUgICAgICAgIAogICBpbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzICAgICAgICAg
ICAgICAgICAgICAwLjI0MTkrLTAuMDE5NCAgICAgICAgICAgIDAuMjM3NSstMC4wMTkwICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDE4M3ggZmFzdGVyCiAgIGluZmVyLW9uZS10aW1lLWNsb3N1cmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjM2NSstMC4wMTY5ICAgICAgICAgICAgMC4yMzYw
Ky0wLjAyMTkgICAgICAgIAogICBpbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUgICAgICAgICAg
ICAgICAgICAgICAgICAwLjI4MzErLTAuMDI3NSAgICAgICAgICAgIDAuMjY3OSstMC4wMjI3ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDU2OHggZmFzdGVyCiAgIGlubGluZS1hcmd1bWVudHMtYWNjZXNz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAuMjIzNystMC4zMzU3ICAgICAgICAgICAxMC4y
MTA3Ky0wLjQyOTQgICAgICAgIAogICBpbmxpbmUtYXJndW1lbnRzLWFsaWFzZWQtYWNjZXNzICAg
ICAgICAgICAgICAgICAgICA5LjkwNTkrLTAuMTAwNyAgICAgPyAgICAgIDkuOTQ4MystMC4yMTM2
ICAgICAgICA/CiAgIGlubGluZS1hcmd1bWVudHMtbG9jYWwtZXNjYXBlICAgICAgICAgICAgICAg
ICAgICAgIDkuOTI2MSstMC4xODY1ICAgICA/ICAgICAgOS45MzIzKy0wLjI2MDEgICAgICAgID8K
ICAgaW5saW5lLWdldC1zY29wZWQtdmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4y
NjIwKy0wLjA2NTAgICAgID8gICAgICAzLjI3MzUrLTAuMDc0NiAgICAgICAgPwogICBpbmxpbmVk
LXB1dC1ieS1pZC10cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgICAgIDExLjM5NjUrLTAuMjM0
NCAgICAgICAgICAgMTEuMzE4NistMC4yMzI1ICAgICAgICAKICAgaW5saW5lZC1wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXRyYW5zaXRpb24gICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA1MC4yMDAyKy0wLjM5MDUgICAgICAgICAgIDQ5Ljg5OTkr
LTAuNTM4NSAgICAgICAgCiAgIGlubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0
aW9uICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNTAuMTUyNystMC44NTEyICAgICA/ICAgICA1MC41MDY4Ky0xLjE2MjcgICAgICAgID8KICAg
aW5zdGFuY2VvZi1ib3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNjI3
Ky0wLjAxMjIgICAgID8gICAgICAwLjI2NjQrLTAuMDE1MyAgICAgICAgPyBtaWdodCBiZSAxLjAx
NDN4IHNsb3dlcgogICBpbnQtb3Itb3RoZXItYWJzLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAg
ICAgICAgICA5LjU5MzgrLTAuMTM0OCAgICAgXiAgICAgIDkuMzYyMSstMC4wODc1ICAgICAgICBe
IGRlZmluaXRlbHkgMS4wMjQ4eCBmYXN0ZXIKICAgaW50LW9yLW90aGVyLWFicy16ZXJvLXRoZW4t
Z2V0LWJ5LXZhbCAgICAgICAgICAgICAxOS42NjkxKy0wLjE3NDYgICAgICAgICAgIDE5LjQ3ODYr
LTAuMTE1MSAgICAgICAgCiAgIGludC1vci1vdGhlci1hZGQtdGhlbi1nZXQtYnktdmFsICAgICAg
ICAgICAgICAgICAgIDQuNzQwNistMC4wODkxICAgICA/ICAgICAgNC43NzAxKy0wLjA2MTggICAg
ICAgID8KICAgaW50LW9yLW90aGVyLWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNS44NTM4Ky0wLjExNTAgICAgID8gICAgICA1Ljg3OTcrLTAuMTYyNiAgICAgICAgPwogICBp
bnQtb3Itb3RoZXItZGl2LXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA0LjI4MjMr
LTAuMTE5MCAgICAgPyAgICAgIDQuMzcwNCstMC4xMDU4ICAgICAgICA/IG1pZ2h0IGJlIDEuMDIw
Nnggc2xvd2VyCiAgIGludC1vci1vdGhlci1tYXgtdGhlbi1nZXQtYnktdmFsICAgICAgICAgICAg
ICAgICAgIDQuNDY3NistMC4xNDA1ICAgICA/ICAgICAgNC41MDA3Ky0wLjEyMTMgICAgICAgID8K
ICAgaW50LW9yLW90aGVyLW1pbi10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAgICAgNC4y
NjQyKy0wLjEwOTkgICAgID8gICAgICA0LjI4NTErLTAuMTE5NSAgICAgICAgPwogICBpbnQtb3It
b3RoZXItbW9kLXRoZW4tZ2V0LWJ5LXZhbCAgICAgICAgICAgICAgICAgICA0LjM1ODgrLTAuMTYw
MyAgICAgPyAgICAgIDQuMzY0NystMC4xNDAxICAgICAgICA/CiAgIGludC1vci1vdGhlci1tdWwt
dGhlbi1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgIDcuMjI1NCstMC4xMzY5ICAgICA/ICAg
ICAgNy4yNTk4Ky0wLjE1NDQgICAgICAgID8KICAgaW50LW9yLW90aGVyLW5lZy10aGVuLWdldC1i
eS12YWwgICAgICAgICAgICAgICAgICAgNC44ODQ5Ky0wLjA1ODYgICAgID8gICAgICA0LjkzMTkr
LTAuMDk4NiAgICAgICAgPwogICBpbnQtb3Itb3RoZXItbmVnLXplcm8tdGhlbi1nZXQtYnktdmFs
ICAgICAgICAgICAgIDE5LjU3OTgrLTAuMzM5MiAgICAgICAgICAgMTkuNDgyNSstMC4yMDIyICAg
ICAgICAKICAgaW50LW9yLW90aGVyLXN1Yi10aGVuLWdldC1ieS12YWwgICAgICAgICAgICAgICAg
ICAgNS45MjM3Ky0wLjA4MjkgICAgICAgICAgICA1LjkxOTIrLTAuMTg0MCAgICAgICAgCiAgIGlu
dC1vci1vdGhlci1zdWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuODk3Myst
MC4wNjcyICAgICA/ICAgICAgNC45MTEwKy0wLjExODUgICAgICAgID8KICAgaW50LW92ZXJmbG93
LWxvY2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC45ODU0Ky0wLjM4MjIgICAg
ICAgICAgICA0Ljc4MzArLTAuMTM4MyAgICAgICAgICBtaWdodCBiZSAxLjA0MjN4IGZhc3Rlcgog
ICBJbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICAgIDYyLjUx
NjkrLTAuNzI0NiAgICAgPyAgICAgNjMuMzk3MystMC43ODUwICAgICAgICA/IG1pZ2h0IGJlIDEu
MDE0MXggc2xvd2VyCiAgIEludDE2QXJyYXktYnViYmxlLXNvcnQtd2l0aC1ieXRlTGVuZ3RoICAg
ICAgICAgICAgMjIuNjI5NSstMC45ODY2ICAgICAgICAgICAyMS44OTkwKy0wLjQ5MjcgICAgICAg
ICAgbWlnaHQgYmUgMS4wMzM0eCBmYXN0ZXIKICAgSW50MTZBcnJheS1idWJibGUtc29ydCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAyMi41NTQ0Ky0wLjIwMjkgICAgICAgICAgIDIyLjQ1MzAr
LTAuNDg1OSAgICAgICAgCiAgIEludDE2QXJyYXktbG9hZC1pbnQtbXVsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEuODY1NystMC4wOTU2ICAgICAgICAgICAgMS43OTgxKy0wLjA2NzcgICAg
ICAgICAgbWlnaHQgYmUgMS4wMzc2eCBmYXN0ZXIKICAgSW50MTZBcnJheS10by1JbnQzMkFycmF5
LXNldCAgICAgICAgICAgICAgICAgICAgICA1NC43Nzc4Ky0xLjE4NzEgICAgICAgICAgIDUzLjk5
NzMrLTAuMjcwMCAgICAgICAgICBtaWdodCBiZSAxLjAxNDV4IGZhc3RlcgogICBJbnQzMkFycmF5
LWFsbG9jLWxhcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LjI3OTUrLTAuMjIyNyAg
ICAgICAgICAgMjQuMTc4MCstMC4yMzU1ICAgICAgICAKICAgSW50MzJBcnJheS1hbGxvYy1sb25n
LWxpdmVkICAgICAgICAgICAgICAgICAgICAgICA3My41NTQ3Ky0xLjE0NDEgICAgICAgICAgIDcy
LjQyNzArLTAuNzgxMSAgICAgICAgICBtaWdodCBiZSAxLjAxNTZ4IGZhc3RlcgogICBJbnQzMkFy
cmF5LWFsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LjIwODErLTAuMjc1
MSAgICAgICAgICAgIDkuMTg4NystMC4xNzQ1ICAgICAgICAKICAgSW50MzJBcnJheS1JbnQ4QXJy
YXktdmlldy1hbGxvYyAgICAgICAgICAgICAgICAgICAxOC4zODE0Ky0wLjMwMjAgICAgICAgICAg
IDE4LjI4MTgrLTAuODA3NyAgICAgICAgCiAgIGludDUyLXNwaWxsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMjMxMCstMC4wMTczICAgICAgICAgICAgMC4yMTM4Ky0w
LjAwODkgICAgICAgICAgbWlnaHQgYmUgMS4wODA3eCBmYXN0ZXIKICAgSW50OEFycmF5LWFsbG9j
LWxvbmctbGl2ZWQgICAgICAgICAgICAgICAgICAgICAgICA1OS4zMzAxKy0wLjkxOTUgICAgICAg
ICAgIDU4LjQ2MDArLTEuMzc3OSAgICAgICAgICBtaWdodCBiZSAxLjAxNDl4IGZhc3RlcgogICBJ
bnQ4QXJyYXktbG9hZC13aXRoLWJ5dGVMZW5ndGggICAgICAgICAgICAgICAgICAgICAzLjc5NjEr
LTAuMTQ0MSAgICAgPyAgICAgIDMuODE2NystMC4xMDY1ICAgICAgICA/CiAgIEludDhBcnJheS1s
b2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuNzc4MCstMC4wODA0ICAg
ICA/ICAgICAgMy43ODczKy0wLjEwMTAgICAgICAgID8KICAgaW50ZWdlci1kaXZpZGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMi42NTEzKy0wLjI1MDYgICAgICAgICAgIDEy
LjQ3OTMrLTAuMjIxMCAgICAgICAgICBtaWdodCBiZSAxLjAxMzh4IGZhc3RlcgogICBpbnRlZ2Vy
LW1vZHVsbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjMwNjErLTAuMTAx
MSAgICAgICAgICAgIDIuMjkzNCstMC4wOTM3ICAgICAgICAKICAgaXMtYm9vbGVhbi1mb2xkLXRy
aWNreSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy43NTIzKy0wLjA3NjkgICAgICAgICAg
ICAzLjY4OTcrLTAuMDQ4NiAgICAgICAgICBtaWdodCBiZSAxLjAxNzB4IGZhc3RlcgogICBpcy1i
b29sZWFuLWZvbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjgwMTErLTAu
MjIyOSAgICAgICAgICAgIDIuNjU2OSstMC4wMjkyICAgICAgICAgIG1pZ2h0IGJlIDEuMDU0M3gg
ZmFzdGVyCiAgIGlzLWZ1bmN0aW9uLWZvbGQtdHJpY2t5LWludGVybmFsLWZ1bmN0aW9uICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuMDg1
MCstMC4xODAzICAgICBeICAgICAxMi41ODA3Ky0wLjE1ODkgICAgICAgIF4gZGVmaW5pdGVseSAx
LjA0MDF4IGZhc3RlcgogICBpcy1mdW5jdGlvbi1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzLjg4MTgrLTAuMTAwMSAgICAgPyAgICAgIDMuOTg1MistMC4wOTc1ICAgICAg
ICA/IG1pZ2h0IGJlIDEuMDI2Nnggc2xvd2VyCiAgIGlzLWZ1bmN0aW9uLWZvbGQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzkwMistMC4xMTUzICAgICAgICAgICAgMi43OTAw
Ky0wLjA5NTcgICAgICAgIAogICBpcy1udW1iZXItZm9sZC10cmlja3kgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAzLjgzMzIrLTAuMTI2OCAgICAgICAgICAgIDMuNzg2NSstMC4wNjM5ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDEyM3ggZmFzdGVyCiAgIGlzLW51bWJlci1mb2xkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNzk1NCstMC4wOTQ5ICAgICAgICAgICAgMi43
MzE0Ky0wLjA4NjggICAgICAgICAgbWlnaHQgYmUgMS4wMjM0eCBmYXN0ZXIKICAgaXMtb2JqZWN0
LW9yLW51bGwtZm9sZC1mdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgMi44MzI1Ky0wLjA5NjMg
ICAgICAgICAgICAyLjgyMzIrLTAuMDU3NyAgICAgICAgCiAgIGlzLW9iamVjdC1vci1udWxsLWZv
bGQtbGVzcy10cmlja3kgICAgICAgICAgICAgICAgIDMuOTA5NystMC4wODM4ICAgICA/ICAgICAg
My45MTk4Ky0wLjEwMDQgICAgICAgID8KICAgaXMtb2JqZWN0LW9yLW51bGwtZm9sZC10cmlja3kg
ICAgICAgICAgICAgICAgICAgICAgNC40MDQ3Ky0wLjE4MTIgICAgID8gICAgICA0LjQxNDcrLTAu
MTc0OSAgICAgICAgPwogICBpcy1vYmplY3Qtb3ItbnVsbC1mb2xkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyLjgzMTArLTAuMDc4OCAgICAgICAgICAgIDIuNzM2NCstMC4xMTg0ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDM0NnggZmFzdGVyCiAgIGlzLW9iamVjdC1vci1udWxsLXRyaWNraWVy
LWZ1bmN0aW9uICAgICAgICAgICAgICAgIDQuMDU3NSstMC4yMTk0ICAgICAgICAgICAgNC4wMDQ1
Ky0wLjE3MzkgICAgICAgICAgbWlnaHQgYmUgMS4wMTMyeCBmYXN0ZXIKICAgaXMtb2JqZWN0LW9y
LW51bGwtdHJpY2tpZXItaW50ZXJuYWwtZnVuY3Rpb24gICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNC40NDUxKy0wLjYzODMgICAgICAgICAg
IDI0LjEzMjIrLTAuODQ4NSAgICAgICAgICBtaWdodCBiZSAxLjAxMzB4IGZhc3RlcgogICBpcy1v
YmplY3Qtb3ItbnVsbC10cmlja3ktZnVuY3Rpb24gICAgICAgICAgICAgICAgICA0LjAzNTgrLTAu
MDk0OCAgICAgICAgICAgIDMuOTQyOCstMC4xMTY1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIzNngg
ZmFzdGVyCiAgIGlzLW9iamVjdC1vci1udWxsLXRyaWNreS1pbnRlcm5hbC1mdW5jdGlvbiAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LjY2
MjArLTAuMTI1MiAgICAgICAgICAgIDguNDc5NSstMC4yNzA3ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDIxNXggZmFzdGVyCiAgIGlzLXN0cmluZy1mb2xkLXRyaWNreSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMuODMxMystMC4xMDE3ICAgICA/ICAgICAgMy44ODc3Ky0wLjA3MjcgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTQ3eCBzbG93ZXIKICAgaXMtc3RyaW5nLWZvbGQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMi43NTAyKy0wLjEwODYgICAgICAgICAgICAyLjcyNzAr
LTAuMDc4MiAgICAgICAgCiAgIGlzLXVuZGVmaW5lZC1mb2xkLXRyaWNreSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDMuMzcyNistMC4wMzYxICAgICAgICAgICAgMy4yNjE4Ky0wLjA4MjMgICAg
ICAgICAgbWlnaHQgYmUgMS4wMzM5eCBmYXN0ZXIKICAgaXMtdW5kZWZpbmVkLWZvbGQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi43MjM1Ky0wLjA4OTMgICAgID8gICAgICAyLjc2
NzQrLTAuMDg3NCAgICAgICAgPyBtaWdodCBiZSAxLjAxNjF4IHNsb3dlcgogICBKU09OUC1uZWdh
dGl2ZS0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjE1NTUrLTAuMDEwMCAg
ICAgICAgICAgIDAuMTU0MystMC4wMTIzICAgICAgICAKICAgbGFyZ2UtaW50LWNhcHR1cmVkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4yNDM4Ky0wLjEzNDcgICAgID8gICAgICA4
LjI1NzYrLTAuMzAwMyAgICAgICAgPwogICBsYXJnZS1pbnQtbmVnICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEwLjkxMDQrLTAuMzY0OCAgICAgICAgICAgMTAuNzE3MCstMC4x
MDM5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDE4MHggZmFzdGVyCiAgIGxhcmdlLWludCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkuNTAyMistMC4xMjIxICAgICA/ICAg
ICAgOS42OTIzKy0wLjMyNTUgICAgICAgID8gbWlnaHQgYmUgMS4wMjAweCBzbG93ZXIKICAgbGF6
eS1hcnJheS1zcGVjaWVzLXdhdGNocG9pbnRzICAgICAgICAgICAgICAgICAgICAgMC4yMzQyKy0w
LjAyNTMgICAgID8gICAgICAwLjI0OTErLTAuMDQyNCAgICAgICAgPyBtaWdodCBiZSAxLjA2Mzh4
IHNsb3dlcgogICBsaWNtLWRyYWdvbnMtb3V0LW9mLWJvdW5kcyAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjI0MjcrLTAuMDI4NyAgICAgPyAgICAgIDAuMjYwMystMC4wNTQ1ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDcyNHggc2xvd2VyCiAgIGxpY20tZHJhZ29ucy1vdmVyZmxvdyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMjM1MCstMC4wMTYzICAgICAgICAgICAgMC4yMjgxKy0wLjAz
NDAgICAgICAgICAgbWlnaHQgYmUgMS4wMzAweCBmYXN0ZXIKICAgbGljbS1kcmFnb25zICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNDM3Ky0wLjAxOTYgICAgICAgICAg
ICAwLjIyMzMrLTAuMDE1OCAgICAgICAgICBtaWdodCBiZSAxLjA5MTN4IGZhc3RlcgogICBsb2Fk
LXZhcmFyZ3MtZWxpbWluYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzNzArLTAu
MDIxNiAgICAgICAgICAgIDAuMjIzMCstMC4wMjMxICAgICAgICAgIG1pZ2h0IGJlIDEuMDYyOHgg
ZmFzdGVyCiAgIGxvY2FsZS1jb21wYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMzAuNDI3NystMS4yMTcyICAgICA/ICAgICAzMS41OTYwKy0yLjE1ODYgICAgICAgID8gbWln
aHQgYmUgMS4wMzg0eCBzbG93ZXIKICAgbG9naWNhbC1ub3Qtd2VpcmQtdHlwZXMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4yNDI1Ky0wLjAyOTMgICAgICAgICAgICAwLjIyNDErLTAuMDE5
MCAgICAgICAgICBtaWdodCBiZSAxLjA4MTl4IGZhc3RlcgogICBsb2dpY2FsLW5vdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzMTMrLTAuMDIzNSAgICAgICAgICAg
IDAuMjEzMSstMC4wMTI4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDg1M3ggZmFzdGVyCiAgIGxvdHMt
b2YtZmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcuNjUxMystMC4z
NzA4ICAgICAgICAgICAxNy40MTU0Ky0wLjM4MDggICAgICAgICAgbWlnaHQgYmUgMS4wMTM1eCBm
YXN0ZXIKICAgbWFrZS1pbmRleGVkLXN0b3JhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgNC42ODYzKy0wLjI1MDYgICAgID8gICAgICA0Ljc2NTQrLTAuMTg4NiAgICAgICAgPyBtaWdo
dCBiZSAxLjAxNjl4IHNsb3dlcgogICBtYWtlLXJvcGUtY3NlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDE5LjI3OTQrLTAuMjk4MiAgICAgPyAgICAgMTkuNjQ5MCstMC4yMjc1
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDE5Mnggc2xvd2VyCiAgIG1hbnktZm9yZWFjaC1jYWxscyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuMDk2OCstMC4xMzMxICAgICAgICAgICAg
NC4wMDIzKy0wLjA3OTIgICAgICAgICAgbWlnaHQgYmUgMS4wMjM2eCBmYXN0ZXIKICAgbWFueS1y
ZXBlYXQtc3RvcmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMC4yODcyKy0wLjMw
OTkgICAgID8gICAgIDIwLjU0MDMrLTAuMzA2OCAgICAgICAgPyBtaWdodCBiZSAxLjAxMjV4IHNs
b3dlcgogICBtYXAtZm9yLWVhY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2LjA5MDErLTAuMTM4OCAgICAgICAgICAgIDYuMDYzNystMC4xMzc3ICAgICAgICAKICAgbWFw
LWZvci1vZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNi43NDQwKy0w
LjI5OTMgICAgID8gICAgIDI2Ljg2MjUrLTAuMjQ3NyAgICAgICAgPwogICBtYXJzYWdsaWEtbGFy
Z2VyLWludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3LjA1NjgrLTAuNzQzNCAgICAg
ICAgICAgNzYuODQ2NystMC42NzU0ICAgICAgICAKICAgbWFyc2FnbGlhLW9zci1lbnRyeSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyMC44NTg0Ky0wLjQzODUgICAgICAgICAgIDIwLjcy
NjYrLTAuMzExOCAgICAgICAgCiAgIG1hdGgtcmFuZG9tICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMjE5MystMC4wMTQ3ICAgICA/ICAgICAgMC4yMjIwKy0wLjAyMjAg
ICAgICAgID8gbWlnaHQgYmUgMS4wMTI0eCBzbG93ZXIKICAgbWF0aC10cnVuYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMzk5Ky0wLjAzMDAgICAgICAgICAgICAw
LjIyNzYrLTAuMDE0NyAgICAgICAgICBtaWdodCBiZSAxLjA1NDB4IGZhc3RlcgogICBtYXRoLXdp
dGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMgICAgICAgICAgICAgICAwLjIyMDErLTAuMDEx
NiAgICAgICAgICAgIDAuMjE1MCstMC4wMjQ0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIzOHggZmFz
dGVyCiAgIG1heC1ib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDIuODcwMistMC4wNDU5ICAgICAgICAgICAgMi44Mjg1Ky0wLjA3ODIgICAgICAgICAgbWlnaHQg
YmUgMS4wMTQ3eCBmYXN0ZXIKICAgbWVnYW1vcnBoaWMtbG9hZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAzNi4xMDcwKy0wLjQ1ODYgICAgICAgICAgIDM1LjA0OTUrLTAuNjMxMCAg
ICAgICAgICBtaWdodCBiZSAxLjAzMDJ4IGZhc3RlcgogICBtZXRob2Qtb24tbnVtYmVyICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5LjI3NTIrLTAuMzMwMSAgICAgICAgICAgMTku
MjczMystMC4xNTUyICAgICAgICAKICAgbWluLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMi43ODA0Ky0wLjA5OTQgICAgID8gICAgICAyLjg0MjcrLTAuMDQ3
NiAgICAgICAgPyBtaWdodCBiZSAxLjAyMjR4IHNsb3dlcgogICBtaW51cy1ib29sZWFuLWRvdWJs
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjcyMzIrLTAuMDY2NSAgICAgPyAgICAg
IDIuODA3MCstMC4wMjc1ICAgICAgICA/IG1pZ2h0IGJlIDEuMDMwOHggc2xvd2VyCiAgIG1pbnVz
LWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuNjEyNystMC4x
MDMzICAgICAgICAgICAgMi41MjUyKy0wLjEwMzUgICAgICAgICAgbWlnaHQgYmUgMS4wMzQ2eCBm
YXN0ZXIKICAgbWlzYy1idWdzLTg0NzM4OS1qcGVnMjAwMCAgICAgICAgICAgICAgICAgICAgICAg
NTQ3MC40NDc2Ky0xMTUuMjczNiAgICAgICA1NDUwLjE0OTQrLTQ0LjU0MjAgICAgICAgCiAgIG1p
c2Mtc3RyaWN0LWVxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYuNzQ3NCst
MC45OTMzICAgICA/ICAgICAyNy4wMDQ5Ky0wLjcxNTMgICAgICAgID8KICAgbW9kLWJvb2xlYW4t
ZG91YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMC4xNzkzKy0wLjEwNjggICAg
ID8gICAgIDEwLjI2NTUrLTAuMTQ4NCAgICAgICAgPwogICBtb2QtYm9vbGVhbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3LjY0NTYrLTAuMTIzNSAgICAgICAgICAgIDcu
NjIyMystMC4xMzc1ICAgICAgICAKICAgbXVsLWJvb2xlYW4tZG91YmxlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMy4yNTE2Ky0wLjA2MTkgICAgICAgICAgICAzLjIxNjkrLTAuMDg0
NSAgICAgICAgICBtaWdodCBiZSAxLjAxMDh4IGZhc3RlcgogICBtdWwtYm9vbGVhbiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk3NDErLTAuMDczMiAgICAgPyAgICAg
IDIuOTgyOCstMC4wNzUyICAgICAgICA/CiAgIG5lZy1ib29sZWFuICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDIuOTU5NistMC4wNTM0ICAgICAgICAgICAgMi45MzA3Ky0w
LjA5MTggICAgICAgIAogICBuZWdhdGl2ZS16ZXJvLWRpdmlkZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLjI5MTIrLTAuMDIyOCAgICAgICAgICAgIDAuMjgzMystMC4wMTYxICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDI3OXggZmFzdGVyCiAgIG5lZ2F0aXZlLXplcm8tbW9kdWxvICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjg5NCstMC4wMTkxICAgICA/ICAgICAgMC4zMDg2
Ky0wLjAyNTcgICAgICAgID8gbWlnaHQgYmUgMS4wNjYyeCBzbG93ZXIKICAgbmVnYXRpdmUtemVy
by1uZWdhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNzM0Ky0wLjAxNzggICAg
ICAgICAgICAwLjI2NTUrLTAuMDA4NiAgICAgICAgICBtaWdodCBiZSAxLjAyOTR4IGZhc3Rlcgog
ICBuZXN0ZWQtZnVuY3Rpb24tcGFyc2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4Ljkx
MTYrLTAuMzU0NSAgICAgPyAgICAgNDkuNzcxMCstMS4yNjg3ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDE3Nnggc2xvd2VyCiAgIG5ldy1hcnJheS1idWZmZXItZGVhZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOTkuMDI5MSstMS4yNzY0ICAgICAgICAgICA5OC43NDg4Ky0wLjkyNzQgICAgICAg
IAogICBuZXctYXJyYXktYnVmZmVyLXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEy
LjQ0OTgrLTAuNDA1NSAgICAgPyAgICAgMTIuNDkwNCstMC4yMTY4ICAgICAgICA/CiAgIG5ldy1h
cnJheS1kZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNDI3NSstMC4y
NjY3ICAgICA/ICAgICAxNS40NDQ3Ky0wLjM1MzAgICAgICAgID8KICAgbmV3LWFycmF5LXB1c2gg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNy4yOTk0Ky0wLjMxMjEgICAgICAg
ICAgICA3LjIwMTArLTAuMTQ5MSAgICAgICAgICBtaWdodCBiZSAxLjAxMzd4IGZhc3RlcgogICBu
by1pbmxpbmUtY29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyMzIr
LTAuMDEyMyAgICAgICAgICAgIDAuMjE2MSstMC4wMjQ0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMy
OHggZmFzdGVyCiAgIE51bWJlci1pc05hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTcuMDkzMSstMC4xOTM2ICAgICAgICAgICAxNi45MjQyKy0wLjE4MjIgICAgICAgIAog
ICBudW1iZXItdGVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjM0
NjIrLTAuMDU1NSAgICAgPyAgICAgIDMuNDYxMCstMC4wODAzICAgICAgICA/IG1pZ2h0IGJlIDEu
MDM0M3ggc2xvd2VyCiAgIG9iamVjdC1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDUuODQzOSstMC4xNTA0ICAgICA/ICAgICAgNS44NDc3Ky0wLjA2OTkgICAgICAg
ID8KICAgb2JqZWN0LWNsb3N1cmUtY2FsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ni4xNDU1Ky0wLjEyNzcgICAgID8gICAgICA2LjE2MDUrLTAuMTcyMSAgICAgICAgPwogICBvYmpl
Y3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLW9uLWxhcmdlLWFycmF5ICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuNjU0MystMC4yMzE0
ICAgICAgICAgICAgNS41MTQ0Ky0wLjE3MTQgICAgICAgICAgbWlnaHQgYmUgMS4wMjU0eCBmYXN0
ZXIKICAgb2JqZWN0LWludC1hZGQtYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
NS45NTM3Ky0wLjI2NDkgICAgID8gICAgIDE1Ljk4MjUrLTAuMjUyMyAgICAgICAgPwogICBvYmpl
Y3QtaW50LWFkZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LjU4OTgrLTAu
MTgzOCAgICAgICAgICAgMTguNDcwMCstMC4xOTU5ICAgICAgICAKICAgb2JqZWN0LWludC1hbmQt
YXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNi4xMDgyKy0wLjIzNjUgICAgICAg
ICAgIDE1LjkzMjMrLTAuMTk2NyAgICAgICAgICBtaWdodCBiZSAxLjAxMTB4IGZhc3RlcgogICBv
YmplY3QtaW50LW11bC1hcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1Ljk1ODcr
LTAuMTY0MSAgICAgPyAgICAgMTUuOTkxOSstMC4xODgzICAgICAgICA/CiAgIG9iamVjdC1pbnQt
c3ViLWFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuMDg1NistMC4xMzYwICAg
ICAgICAgICAxMy4wMjIxKy0wLjMwOTIgICAgICAgIAogICBvYmplY3QtaW50LXN1YiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LjU1MDYrLTAuMTY1NyAgICAgICAgICAgMTgu
NDMzOSstMC4zMDE0ICAgICAgICAKICAgb2JqZWN0LWxzaGlmdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNS44Nzk4Ky0wLjEwNDggICAgICAgICAgICA1Ljc1NzkrLTAuMDgy
NSAgICAgICAgICBtaWdodCBiZSAxLjAyMTJ4IGZhc3RlcgogICBvYmplY3Qtb3IgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ljc5MzkrLTAuMDU3NiAgICAgPyAgICAg
IDUuODY4OSstMC4xMzAwICAgICAgICA/IG1pZ2h0IGJlIDEuMDEyOXggc2xvd2VyCiAgIG9iamVj
dC1yc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUuODYyNystMC4x
MDA1ICAgICAgICAgICAgNS43NTIxKy0wLjA0NzEgICAgICAgICAgbWlnaHQgYmUgMS4wMTkyeCBm
YXN0ZXIKICAgb2JqZWN0LXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMy4xNjcyKy0wLjAzMjMgICAgICAgICAgICAzLjExNjQrLTAuMDQ4NyAgICAgICAgICBtaWdo
dCBiZSAxLjAxNjN4IGZhc3RlcgogICBvYmplY3QtdXJzaGlmdCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA1Ljg4ODYrLTAuMDk5OSAgICAgICAgICAgIDUuODcwMistMC4wNzg4
ICAgICAgICAKICAgb2JqZWN0LXhvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgNS44NzA0Ky0wLjE3MDAgICAgICAgICAgICA1Ljc4ODUrLTAuMDkyMSAgICAgICAgICBt
aWdodCBiZSAxLjAxNDJ4IGZhc3RlcgogICBvYnZpb3VzLXNpbmstcGF0aG9sb2d5LXRha2VuICAg
ICAgICAgICAgICAgICAgICAgICAwLjIzNjArLTAuMDI2OSAgICAgICAgICAgIDAuMjMxMystMC4w
NDM3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDIwNHggZmFzdGVyCiAgIG9idmlvdXMtc2luay1wYXRo
b2xvZ3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjQ1OSstMC4wMTcxICAgICAgICAg
ICAgMC4yMjIxKy0wLjAxNDkgICAgICAgICAgbWlnaHQgYmUgMS4xMDc0eCBmYXN0ZXIKICAgb2J2
aW91c2x5LWVsaWRhYmxlLW5ldy1vYmplY3QgICAgICAgICAgICAgICAgICAgICAyNi42MjgyKy0w
LjM4NTMgICAgID8gICAgIDI3LjAyMDMrLTAuNTA1NSAgICAgICAgPyBtaWdodCBiZSAxLjAxNDd4
IHNsb3dlcgogICBwbHVzLWJvb2xlYW4tYXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAyLjYzNjUrLTAuMTAyNiAgICAgPyAgICAgIDIuNjgyMSstMC4wNjY4ICAgICAgICA/IG1p
Z2h0IGJlIDEuMDE3M3ggc2xvd2VyCiAgIHBsdXMtYm9vbGVhbi1kb3VibGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDIuNzg5OCstMC4xMDIxICAgICAgICAgICAgMi43ODk2Ky0wLjA0
NjIgICAgICAgIAogICBwbHVzLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAyLjYzODIrLTAuMDY0NiAgICAgICAgICAgIDIuNjExMSstMC4xMTYwICAgICAgICAg
IG1pZ2h0IGJlIDEuMDEwNHggZmFzdGVyCiAgIHBvbHktY2hhaW4tYWNjZXNzLWRpZmZlcmVudC1w
cm90b3R5cGVzLXNpbXBsZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAyLjk0MjgrLTAuMDcyNSAgICAgICAgICAgIDIuOTM2MystMC4wNzg1
ICAgICAgICAKICAgcG9seS1jaGFpbi1hY2Nlc3MtZGlmZmVyZW50LXByb3RvdHlwZXMgICAgICAg
ICAgICAgMi45ODU5Ky0wLjEwMTEgICAgID8gICAgICAyLjk5MDgrLTAuMDk1OCAgICAgICAgPwog
ICBwb2x5LWNoYWluLWFjY2Vzcy1zaW1wbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAyLjk0
NzErLTAuMDc4NiAgICAgPyAgICAgIDIuOTY2MSstMC4wODE0ICAgICAgICA/CiAgIHBvbHktY2hh
aW4tYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMuMDIyMistMC4wMTgz
ICAgICAgICAgICAgMi45NTY5Ky0wLjA1MzIgICAgICAgICAgbWlnaHQgYmUgMS4wMjIxeCBmYXN0
ZXIKICAgcG9seS1zdHJpY3RlcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
Ni4yMDc2Ky0xLjk3NDggICAgICAgICAgIDY1LjAwMzIrLTAuMjg3NSAgICAgICAgICBtaWdodCBi
ZSAxLjAxODV4IGZhc3RlcgogICBwb2x5bW9ycGhpYy1hcnJheS1jYWxsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyLjA0MTkrLTAuMDkxMyAgICAgPyAgICAgIDIuMTE2MCstMC4xMjA3ICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDM2M3ggc2xvd2VyCiAgIHBvbHltb3JwaGljLWdldC1ieS1pZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjI1MSstMC4wMTEzICAgICAgICAgICAgMC4y
MTk0Ky0wLjAyMjEgICAgICAgICAgbWlnaHQgYmUgMS4wMjU2eCBmYXN0ZXIKICAgcG9seW1vcnBo
aWMtcHV0LWJ5LWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMzE4Ky0wLjAwNTgg
ICAgICAgICAgICAwLjIyMDcrLTAuMDIwMCAgICAgICAgICBtaWdodCBiZSAxLjA1MDV4IGZhc3Rl
cgogICBwb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nICAgICAgICAgICAgICAgICAw
LjIzNDArLTAuMDE5MiAgICAgICAgICAgIDAuMjE2MCstMC4wMTQwICAgICAgICAgIG1pZ2h0IGJl
IDEuMDgzNnggZmFzdGVyCiAgIHBvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wgICAg
ICAgICAgICAgICAgIDAuMjYyMystMC4wMTM3ICAgICA/ICAgICAgMC4yNjMxKy0wLjAxNzAgICAg
ICAgID8KICAgcG9seW1vcnBoaWMtc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxNS42NjUzKy0wLjIwNTkgICAgICAgICAgIDE1LjUzODkrLTAuMjg3NSAgICAgICAgCiAgIHBv
bHl2YXJpYW50LW1vbm9tb3JwaGljLWdldC1ieS1pZCAgICAgICAgICAgICAgICAgIDUuMDg2NSst
MC4wOTU1ICAgICA/ICAgICAgNS4wODkwKy0wLjI0ODcgICAgICAgID8KICAgcHJldmVudC1leHRl
bnNpb25zLWFuZC1kby13b3JrICAgICAgICAgICAgICAgICAgICAxNi42OTg4Ky0wLjMwODcgICAg
ICAgICAgIDE2LjY4NzArLTAuMDYxOCAgICAgICAgCiAgIHByb3RvLWdldHRlci1hY2Nlc3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjUxNSstMC4wMjkzICAgICAgICAgICAgMC4y
MzA1Ky0wLjAyMzggICAgICAgICAgbWlnaHQgYmUgMS4wOTEzeCBmYXN0ZXIKICAgcHJvdG90eXBl
LWFjY2Vzcy13aXRoLW11dGF0aW5nLXByb3RvdHlwZSAgICAgICAgICAgMC4yMTg2Ky0wLjAxMDMg
ICAgICAgICAgICAwLjIxNzgrLTAuMDEzOSAgICAgICAgCiAgIHB1dC1ieS1pZC1yZXBsYWNlLWFu
ZC10cmFuc2l0aW9uICAgICAgICAgICAgICAgICAgMTAuMjE3NistMC4xNTY4ICAgICAgICAgICAx
MC4wMDQ0Ky0wLjE4MDIgICAgICAgICAgbWlnaHQgYmUgMS4wMjEzeCBmYXN0ZXIKICAgcHV0LWJ5
LWlkLXNsaWdodGx5LXBvbHltb3JwaGljICAgICAgICAgICAgICAgICAgICAgMi45NTMwKy0wLjE5
ODAgICAgICAgICAgICAyLjkxMjkrLTAuMDc4NiAgICAgICAgICBtaWdodCBiZSAxLjAxMzh4IGZh
c3RlcgogICBwdXQtYnktaWQtdHJhbnNpdGlvbi13aXRoLWluZGV4aW5nLWhlYWRlciAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3LjA2NTEr
LTAuMTUxNiAgICAgICAgICAgMTYuOTY1NSstMC40MDcwICAgICAgICAKICAgcHV0LWJ5LWlkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMy43MDM3Ky0wLjMwMDEgICAg
ID8gICAgIDE0LjA0ODkrLTAuMzYyNSAgICAgICAgPyBtaWdodCBiZSAxLjAyNTJ4IHNsb3dlcgog
ICBwdXQtYnktdmFsLWRpcmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI5
NzYrLTAuMDE1NiAgICAgPyAgICAgIDAuMzAwNCstMC4wMjU3ICAgICAgICA/CiAgIHB1dC1ieS12
YWwtbGFyZ2UtaW5kZXgtYmxhbmstaW5kZXhpbmctdHlwZSAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LjAzODQrLTAuMzkyMCAgICAgPyAg
ICAgMTQuMTAwOSstMC4zNTY3ICAgICAgICA/CiAgIHB1dC1ieS12YWwtbWFjaGluZS1pbnQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjcxMystMC4wMTk1ICAgICAgICAgICAgMC4yNjUz
Ky0wLjAyNTEgICAgICAgICAgbWlnaHQgYmUgMS4wMjI3eCBmYXN0ZXIKICAgcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQuNzIyMCstMC4xOTIxICAgICA/ICAg
ICAxNC43MzI5Ky0wLjU1MTkgICAgICAgID8KICAgcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzLjkwODQrLTAuMDg4MiAgICAgPyAgICAgIDMuOTE0MistMC4xMTM4
ICAgICAgICA/CiAgIHB1dC1ieS12YWwtd2l0aC1zdHJpbmcgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTQuMTYwNystMC4zMzg0ICAgICA/ICAgICAxNC4yNzMyKy0wLjMwNjIgICAgICAgID8K
ICAgcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQuMTM5MSst
MC4yMDk5ICAgICA/ICAgICAxNC4xNTc4Ky0wLjE3MzIgICAgICAgID8KICAgcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYyAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjE3NDQrLTAuMDY5OCAgICAgPyAgICAg
IDMuMTc3MistMC4wNDU2ICAgICAgICA/CiAgIHB1dC1ieS12YWwtd2l0aC1zeW1ib2wgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTQuNDc2NistMC4xODU5ICAgICAgICAgICAxNC4yMTE0Ky0w
LjQ1OTYgICAgICAgICAgbWlnaHQgYmUgMS4wMTg3eCBmYXN0ZXIKICAgcmFyZS1vc3ItZXhpdC1v
bi1sb2NhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC41Mjc5Ky0wLjE4MTEgICAgICAg
ICAgIDE0LjQ0NzArLTAuMjMyOCAgICAgICAgCiAgIHJheXRyYWNlLXdpdGgtZW1wdHktdHJ5LWNh
dGNoICAgICAgICAgICAgICAgICAgICAgIDcuMTkwMSstMC4zMDM1ICAgICAgICAgICAgNy4xMDUw
Ky0wLjMwNjUgICAgICAgICAgbWlnaHQgYmUgMS4wMTIweCBmYXN0ZXIKICAgcmF5dHJhY2Utd2l0
aC10cnktY2F0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNjgwKy0wLjAyNjQgICAg
ICAgICAgICAwLjI1MzYrLTAuMDE3MCAgICAgICAgICBtaWdodCBiZSAxLjA1NjZ4IGZhc3Rlcgog
ICByZWdleHAtZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0Ljc5
MjMrLTAuNjUzMCAgICAgICAgICAgNDQuNjAyMystMC40NTgzICAgICAgICAKICAgcmVnZXhwLWxh
c3QtaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNy43NDg2Ky0wLjE0Mzcg
ICAgID8gICAgIDE3LjgzNTUrLTAuMTM3NSAgICAgICAgPwogICByZWdleHAtcHJvdG90eXBlLWlz
LW5vdC1pbnN0YW5jZSAgICAgICAgICAgICAgICAgICAwLjM3NTUrLTAuMDIxMSAgICAgPyAgICAg
IDAuMzc4MystMC4wNDM1ICAgICAgICA/CiAgIHJlZ2V4cC1wcm90b3R5cGUtc2VhcmNoLW9ic2Vy
dmFibGUtc2lkZS1lZmZlY3RzICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEuMDgwNistMC4wNjM2ICAgICAgICAgICAgMS4wNTc0Ky0wLjA0
ODkgICAgICAgICAgbWlnaHQgYmUgMS4wMjE5eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1z
ZWFyY2gtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMyICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjI1NistMC4wMTEzICAgICAgICAgICAg
MC4yMjA2Ky0wLjAyMDcgICAgICAgICAgbWlnaHQgYmUgMS4wMjI5eCBmYXN0ZXIKICAgcmVnZXhw
LXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0cyAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjUyNjkrLTAuMTU4NyAg
ICAgICAgICAgIDIuNDE5MistMC4wNTkwICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ0NXggZmFzdGVy
CiAgIHJlZ2V4cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMyICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjgw
OSstMC4wMTc5ICAgICAgICAgICAgMC4yNzQ0Ky0wLjAyODUgICAgICAgICAgbWlnaHQgYmUgMS4w
MjM2eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZm
ZWN0czMtZmxhZ3MgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC4yOTY5Ky0wLjAzNzQgICAgID8gICAgICAwLjMxMjMrLTAuMDM3OCAgICAg
ICAgPyBtaWdodCBiZSAxLjA1MTh4IHNsb3dlcgogICByZWdleHAtcHJvdG90eXBlLXNwbGl0LW9i
c2VydmFibGUtc2lkZS1lZmZlY3RzMy1nbG9iYWwgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zMTExKy0wLjAxOTQgICAgICAgICAgICAw
LjI5ODQrLTAuMDIwNCAgICAgICAgICBtaWdodCBiZSAxLjA0Mjd4IGZhc3RlcgogICByZWdleHAt
cHJvdG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMy1pZ25vcmVDYXNlICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjk5
MCstMC4wMjA4ICAgICA/ICAgICAgMC4zMDQxKy0wLjAxMzYgICAgICAgID8gbWlnaHQgYmUgMS4w
MTcxeCBzbG93ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZm
ZWN0czMtbXVsdGlsaW5lICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMzE2OCstMC4wNDc1ICAgICAgICAgICAgMC4zMDE1Ky0wLjAyNTUg
ICAgICAgICAgbWlnaHQgYmUgMS4wNTA3eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS1zcGxp
dC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czMtc3RpY2t5ICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjk2OCstMC4wMTY2ICAgICA/ICAg
ICAgMC4zMDg4Ky0wLjAzMTIgICAgICAgID8gbWlnaHQgYmUgMS4wNDAyeCBzbG93ZXIKICAgcmVn
ZXhwLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czMtdW5pY29kZSAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI5
MjIrLTAuMDE1NyAgICAgPyAgICAgIDAuMzA4NistMC4wNDE5ICAgICAgICA/IG1pZ2h0IGJlIDEu
MDU2MXggc2xvd2VyCiAgIHJlZ2V4cC1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVm
ZmVjdHM0ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuMzMzOCstMC4wMjE4ICAgICAgICAgICAgMC4zMTQzKy0wLjAyMzEgICAgICAgICAg
bWlnaHQgYmUgMS4wNjE5eCBmYXN0ZXIKICAgcmVnZXhwLXByb3RvdHlwZS10ZXN0LW9ic2VydmFi
bGUtc2lkZS1lZmZlY3RzICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuOTY1NSstMC4wNTE1ICAgICA/ICAgICAgMS4wMTQ5Ky0wLjAzNTUg
ICAgICAgID8gbWlnaHQgYmUgMS4wNTEyeCBzbG93ZXIKICAgcmVnZXhwLXByb3RvdHlwZS10ZXN0
LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyOTkrLTAuMDEyNSAgICAgPyAgICAgIDAuMjM5
NSstMC4wMTAyICAgICAgICA/IG1pZ2h0IGJlIDEuMDQxOXggc2xvd2VyCiAgIHJlZ2V4cC1zZXQt
bGFzdC1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcuMzcwNystMC4wODQzICAg
ICA/ICAgICAxNy40MTgzKy0wLjE1MzggICAgICAgID8KICAgcmVnaXN0ZXItcHJlc3N1cmUtZnJv
bS1vc3IgICAgICAgICAgICAgICAgICAgICAgICAyMi41MDA0Ky0wLjMyMTIgICAgICAgICAgIDIy
LjQ5NzgrLTAuMTY1OCAgICAgICAgCiAgIHJlcGVhdC1tdWx0aS1nZXQtYnktb2Zmc2V0ICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMjMyNCstMC4wMTgwICAgICA/ICAgICAgMC4yMzI2Ky0wLjAx
NDggICAgICAgID8KICAgcmVzdC1wYXJhbWV0ZXItY29uc3RydWN0aW9uLXBlcmZvcm1hbmNlICAg
ICAgICAgICAgMC4yMjg2Ky0wLjAxMjMgICAgICAgICAgICAwLjIyMzkrLTAuMDE3NCAgICAgICAg
ICBtaWdodCBiZSAxLjAyMTF4IGZhc3RlcgogICByaWNoYXJkcy1lbXB0eS10cnktY2F0Y2ggICAg
ICAgICAgICAgICAgICAgICAgICAgIDY2LjU5MDUrLTEuMjMzMiAgICAgICAgICAgNjUuODEyOCst
MC41ODQ5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDExOHggZmFzdGVyCiAgIHJpY2hhcmRzLXRyeS1j
YXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjg1MistMC4wMjg2ICAgICA/
ICAgICAgMC4yODcwKy0wLjAyNDkgICAgICAgID8KICAgc2NvcGVkLWFyZ3VtZW50cy1sZW5ndGgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOC4yMTUyKy0wLjEyNTEgICAgICAgICAgICA4LjIw
OTErLTAuMTkwNiAgICAgICAgCiAgIHNjb3BlZC1hcmd1bWVudHMtb3ZlcnJpZGRlbi1sZW5ndGgg
ICAgICAgICAgICAgICAgIDguMDA5MystMC4xMTgzICAgICAgICAgICAgNy45NjkxKy0wLjExMDIg
ICAgICAgIAogICBzY29wZWQtYXJndW1lbnRzLXBvc3NpYmx5LW92ZXJyaWRkZW4tbGVuZ3RoICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgu
ODMzMistMC4xODA1ICAgICA/ICAgICAgOC44OTc3Ky0wLjE0MzQgICAgICAgID8KICAgc2VhbC1h
bmQtZG8td29yayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNi41Mzc0Ky0wLjIx
MDMgICAgID8gICAgIDE2LjYzMzIrLTAuMjUwNCAgICAgICAgPwogICBzZXQtZm9yLWVhY2ggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LjkzNzUrLTAuMTI1NyAgICAgICAg
ICAgIDQuODc3NystMC4xNjc4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyM3ggZmFzdGVyCiAgIHNl
dC1mb3Itb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuMzA3Nyst
MC4zNjU1ICAgICA/ICAgICAxNS41MTc5Ky0wLjIxNDIgICAgICAgID8gbWlnaHQgYmUgMS4wMTM3
eCBzbG93ZXIKICAgc2V0dGVyLXByb3RvdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC4yMzI1Ky0wLjAxNDUgICAgID8gICAgICAwLjIzNDErLTAuMDI2OSAgICAgICAgPwog
ICBzZXR0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjk1
NDYrLTAuMTE3OSAgICAgICAgICAgIDMuODk3NystMC4wNzA5ICAgICAgICAgIG1pZ2h0IGJlIDEu
MDE0NnggZmFzdGVyCiAgIHNpbXBsZS1hY3RpdmF0aW9uLWRlbW8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMjcuMDc3MistMC4yNjkyICAgICA/ICAgICAyNy41MTExKy0wLjM3ODcgICAgICAg
ID8gbWlnaHQgYmUgMS4wMTYweCBzbG93ZXIKICAgc2ltcGxlLWdldHRlci1hY2Nlc3MgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMC4yMjk5Ky0wLjAxMDIgICAgID8gICAgICAwLjI0MTUr
LTAuMDIwOSAgICAgICAgPyBtaWdodCBiZSAxLjA1MDZ4IHNsb3dlcgogICBzaW1wbGUtcG9seS1j
YWxsLW5lc3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Ljk0NDQrLTAuMDUwNSAgICAg
PyAgICAgIDQuOTc1MystMC4xMDAwICAgICAgICA/CiAgIHNpbXBsZS1wb2x5LWNhbGwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuNTQ1MystMC4wMzk2ICAgICA/ICAgICAgMS41
NTgzKy0wLjA0NjUgICAgICAgID8KICAgc2ltcGxlLXJlZ2V4cC1leGVjLWZvbGRpbmctZmFpbCAg
ICAgICAgICAgICAgICAgICAgNi4zMDIzKy0wLjE1OTcgICAgID8gICAgICA2LjM0OTYrLTAuMTQ3
NiAgICAgICAgPwogICBzaW1wbGUtcmVnZXhwLWV4ZWMtZm9sZGluZyAgICAgICAgICAgICAgICAg
ICAgICAgIDIzLjMzNDUrLTAuNDE4MCAgICAgICAgICAgMjMuMDQ4NSstMC44ODY2ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDEyNHggZmFzdGVyCiAgIHNpbXBsZS1yZWdleHAtdGVzdC1mb2xkaW5nLWZh
aWwtd2l0aC1ob2lzdGVkLXJlZ2V4cCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDEyLjM3NjgrLTAuMzU1MCAgICAgICAgICAgMTIuMDMwNCst
MC4xODg3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI4OHggZmFzdGVyCiAgIHNpbXBsZS1yZWdleHAt
dGVzdC1mb2xkaW5nLWZhaWwgICAgICAgICAgICAgICAgICAgMTkuNzUwOSstMC4xNTYyICAgICA/
ICAgICAxOS45NTU1Ky0wLjEyMjkgICAgICAgID8gbWlnaHQgYmUgMS4wMTA0eCBzbG93ZXIKICAg
c2ltcGxlLXJlZ2V4cC10ZXN0LWZvbGRpbmctd2l0aC1ob2lzdGVkLXJlZ2V4cCAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLjU3MDYrLTAu
MjI4MCAgICAgICAgICAgMTIuMzc3MistMC4yOTAyICAgICAgICAgIG1pZ2h0IGJlIDEuMDE1Nngg
ZmFzdGVyCiAgIHNpbXBsZS1yZWdleHAtdGVzdC1mb2xkaW5nICAgICAgICAgICAgICAgICAgICAg
ICAgMjEuMDQ4NystMC4yNDI1ICAgICAgICAgICAyMC43MDQzKy0wLjMyODMgICAgICAgICAgbWln
aHQgYmUgMS4wMTY2eCBmYXN0ZXIKICAgc2luLWJvb2xlYW4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNy45NTc1Ky0wLjE4NDIgICAgICAgICAgICA3Ljg3MTMrLTAuMDk5
OSAgICAgICAgICBtaWdodCBiZSAxLjAxMTB4IGZhc3RlcgogICBzaW5nbGV0b24tc2NvcGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzNjErLTAuMDIxNSAgICAgICAgICAg
IDAuMjE5OCstMC4wMjI2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDc0NHggZmFzdGVyCiAgIHNpbmst
ZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjE0NSstMC4w
MDY1ICAgICA/ICAgICAgMC4yMjIzKy0wLjAxNzcgICAgICAgID8gbWlnaHQgYmUgMS4wMzYyeCBz
bG93ZXIKICAgc2luay1odWdlLWFjdGl2YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMC4yMjUyKy0wLjAxNjYgICAgICAgICAgICAwLjIyNDkrLTAuMDI4OSAgICAgICAgCiAgIHNp
bmthYmxlLW5ldy1vYmplY3QtZGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjE4Nyst
MC4wMDg3ICAgICA/ICAgICAgMC4yMjA5Ky0wLjAyMDEgICAgICAgID8gbWlnaHQgYmUgMS4wMTAw
eCBzbG93ZXIKICAgc2lua2FibGUtbmV3LW9iamVjdC10YWtlbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC4yMzkwKy0wLjAxNjEgICAgICAgICAgICAwLjIyNzIrLTAuMDI4MyAgICAgICAgICBt
aWdodCBiZSAxLjA1MTl4IGZhc3RlcgogICBzaW5rYWJsZS1uZXctb2JqZWN0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLjI0MDcrLTAuMDE0OCAgICAgXiAgICAgIDAuMjE3NCstMC4w
MDY5ICAgICAgICBeIGRlZmluaXRlbHkgMS4xMDY4eCBmYXN0ZXIKICAgc2xvdy1hcnJheS1wcm9m
aWxlLWNvbnZlcmdlbmNlICAgICAgICAgICAgICAgICAgICAgMy44MzIyKy0wLjExNTQgICAgICAg
ICAgICAzLjc5NjgrLTAuMTM4NSAgICAgICAgCiAgIHNsb3ctY29udmVyZ2VuY2UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMuMjI3MSstMC4xMzkwICAgICA/ICAgICAgMy4zMDIw
Ky0wLjEzNjAgICAgICAgID8gbWlnaHQgYmUgMS4wMjMyeCBzbG93ZXIKICAgc2xvdy10ZXJuYXJp
ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMS44ODk1Ky0wLjQ0NzkgICAg
ID8gICAgIDIxLjk4NTArLTAuMDk0NyAgICAgICAgPwogICBzb3J0aW5nLWJlbmNobWFyayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0LjYzNzUrLTAuNjY2NSAgICAgICAgICAgMjQu
NDAwNistMC40MzQ5ICAgICAgICAKICAgc3BhcnNlLWNvbmRpdGlvbmFsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4zNjQzKy0wLjA2MTYgICAgICAgICAgICAxLjM1NzQrLTAuMDc1
OCAgICAgICAgCiAgIHNwbGljZS10by1yZW1vdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMjEuNzI2MystMC4xOTY1ICAgICA/ICAgICAyMi4xMDIyKy0wLjYzMDIgICAgICAgID8g
bWlnaHQgYmUgMS4wMTczeCBzbG93ZXIKICAgc3RyY2F0LWNvbnN0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC4yNDIxKy0wLjAyMDEgICAgICAgICAgICAwLjIxNDQrLTAu
MDE5OCAgICAgICAgICBtaWdodCBiZSAxLjEyOTR4IGZhc3RlcgogICBzdHJjYXQtbGVuZ3RoLWNv
bnN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIzMDQrLTAuMDIyNyAgICAgICAg
ICAgIDAuMjE5MSstMC4wMTg0ICAgICAgICAgIG1pZ2h0IGJlIDEuMDUxOHggZmFzdGVyCiAgIHN0
cmljdC1vc3ItZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQuNDA1Nist
MC4xNTc3ICAgICA/ICAgICAxNC40ODE2Ky0wLjQzMTMgICAgICAgID8KICAgc3RyaW5nLWNoYXIt
Y29kZS1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNy42NjU0Ky0wLjE0NzkgICAg
ID8gICAgIDE3Ljg1NjQrLTAuMTkzNSAgICAgICAgPyBtaWdodCBiZSAxLjAxMDh4IHNsb3dlcgog
ICBzdHJpbmctY29uY2F0LW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjE5
NDkrLTAuMTk3MSAgICAgICAgICAgIDYuMTY4MCstMC4xOTM0ICAgICAgICAKICAgc3RyaW5nLWNv
bmNhdC1wYWlyLW9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgNi4wNjU3Ky0wLjE0OTcg
ICAgID8gICAgICA2LjEyNDUrLTAuMjU2MyAgICAgICAgPwogICBzdHJpbmctY29uY2F0LXBhaXIt
c2ltcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAzLjg2MDArLTAuMTU0NyAgICAgICAgICAg
IDMuNzY1NSstMC4wOTczICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1MXggZmFzdGVyCiAgIHN0cmlu
Zy1jb25jYXQtc2ltcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMuNTU3OSstMC40
NzM5ICAgICA/ICAgICAxMy42NDY5Ky0wLjE5MTcgICAgICAgID8KICAgc3RyaW5nLWNvbnMtcmVw
ZWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMS4zNzkzKy0wLjE0NDEgICAgICAg
ICAgIDExLjM0MzcrLTAuMTM1OSAgICAgICAgCiAgIHN0cmluZy1jb25zLXRvd2VyICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMTEuNzI1NistMC4xNTQyICAgICAgICAgICAxMS42NTQz
Ky0wLjI2MjkgICAgICAgIAogICBzdHJpbmctZXF1YWxpdHkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDIwLjQwMzArLTAuMjgzMiAgICAgICAgICAgMjAuMjE4OCstMC4yNjY5ICAg
ICAgICAKICAgc3RyaW5nLWZyb20tY2hhci1jb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxMC42MjMwKy0wLjE3ODYgICAgID8gICAgIDEwLjY1ODcrLTAuMTMyNCAgICAgICAgPwogICBz
dHJpbmctZ2V0LWJ5LXZhbC1iaWctY2hhciAgICAgICAgICAgICAgICAgICAgICAgICA2LjQyNTcr
LTAuMjA0MyAgICAgICAgICAgIDYuMjU4OSstMC4yMTA1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI2
NnggZmFzdGVyCiAgIHN0cmluZy1nZXQtYnktdmFsLW91dC1vZi1ib3VuZHMtaW5zYW5lICAgICAg
ICAgICAgIDQuNjkxNystMC4xMjgxICAgICAgICAgICAgNC42MjU3Ky0wLjE2NDEgICAgICAgICAg
bWlnaHQgYmUgMS4wMTQzeCBmYXN0ZXIKICAgc3RyaW5nLWdldC1ieS12YWwtb3V0LW9mLWJvdW5k
cyAgICAgICAgICAgICAgICAgICAgNS42NjYwKy0wLjE1MTYgICAgICAgICAgICA1LjYzMDArLTAu
MTE4MSAgICAgICAgCiAgIHN0cmluZy1nZXQtYnktdmFsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDIuNjY0OCstMC4wOTA3ICAgICA/ICAgICAgMi43MTgyKy0wLjA5MzAgICAgICAg
ID8gbWlnaHQgYmUgMS4wMjAxeCBzbG93ZXIKICAgc3RyaW5nLWhhc2ggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMi4yOTI3Ky0wLjA2OTEgICAgID8gICAgICAyLjMxNTkr
LTAuMDg0OSAgICAgICAgPyBtaWdodCBiZSAxLjAxMDF4IHNsb3dlcgogICBzdHJpbmctbG9uZy1p
ZGVudC1lcXVhbGl0eSAgICAgICAgICAgICAgICAgICAgICAgIDE2LjgyNjMrLTAuMjgwMCAgICAg
ICAgICAgMTYuNzg0NistMC4yOTU0ICAgICAgICAKICAgc3RyaW5nLW91dC1vZi1ib3VuZHMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yMjQyKy0wLjAyMzAgICAgICAgICAgICAwLjIw
MDErLTAuMDA3MSAgICAgICAgICBtaWdodCBiZSAxLjEyMDJ4IGZhc3RlcgogICBzdHJpbmctcHJv
dG90eXBlLXNlYXJjaC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0cyAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjQwNDIrLTAuMDcwMiAgICAg
PyAgICAgIDEuNDUxMCstMC4wNjcxICAgICAgICA/IG1pZ2h0IGJlIDEuMDMzM3ggc2xvd2VyCiAg
IHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI2MzIr
LTAuMDE0MSAgICAgICAgICAgIDAuMjU0MSstMC4wMzM1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM1
OXggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFibGUtc2lkZS1lZmZl
Y3RzMyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjIyNzErLTAuMDExNyAgICAgPyAgICAgIDAuMjU3MCstMC4wMzY5ICAgICAgICA/IG1p
Z2h0IGJlIDEuMTMxOXggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc2VhcmNoLW9ic2VydmFi
bGUtc2lkZS1lZmZlY3RzNCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLjIyMzkrLTAuMDEzMyAgICAgPyAgICAgIDAuMjQzMCstMC4wMDkw
ICAgICAgICA/IG1pZ2h0IGJlIDEuMDg1Mnggc2xvd2VyCiAgIHN0cmluZy1wcm90b3R5cGUtc3Bs
aXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMi44OTU1Ky0wLjE1NjUgICAgICAgICAgICAyLjgz
MjQrLTAuMTE1NSAgICAgICAgICBtaWdodCBiZSAxLjAyMjN4IGZhc3RlcgogICBzdHJpbmctcHJv
dG90eXBlLXNwbGl0LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzMiAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjI4MTUrLTAuMDI1MiAgICAg
PyAgICAgIDAuMzA2MystMC4wMzczICAgICAgICA/IG1pZ2h0IGJlIDEuMDg4M3ggc2xvd2VyCiAg
IHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLWZsYWdzICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAu
MzE0NSstMC4wMTcwICAgICA/ICAgICAgMC4zMTUyKy0wLjAxNjAgICAgICAgID8KICAgc3RyaW5n
LXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0czMtZ2xvYmFsICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMzA3OCst
MC4wMTAxICAgICA/ICAgICAgMC4zNDEwKy0wLjA1MDggICAgICAgID8gbWlnaHQgYmUgMS4xMDc3
eCBzbG93ZXIKICAgc3RyaW5nLXByb3RvdHlwZS1zcGxpdC1vYnNlcnZhYmxlLXNpZGUtZWZmZWN0
czMtaWdub3JlQ2FzZSAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjMwOTkrLTAuMDM3OCAgICAgICAgICAgIDAuMzAwMystMC4wMTA5ICAg
ICAgICAgIG1pZ2h0IGJlIDEuMDMxOHggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQt
b2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLW11bHRpbGluZSAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMyMjkrLTAuMDMzOSAgICAgICAg
ICAgIDAuMzA1OCstMC4wMjUwICAgICAgICAgIG1pZ2h0IGJlIDEuMDU2MHggZmFzdGVyCiAgIHN0
cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVmZmVjdHMzLXN0aWNreSAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMy
NTMrLTAuMDMxMCAgICAgICAgICAgIDAuMzAzMCstMC4wMTMxICAgICAgICAgIG1pZ2h0IGJlIDEu
MDczN3ggZmFzdGVyCiAgIHN0cmluZy1wcm90b3R5cGUtc3BsaXQtb2JzZXJ2YWJsZS1zaWRlLWVm
ZmVjdHMzLXVuaWNvZGUgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4zMDU4Ky0wLjAxMjYgICAgICAgICAgICAwLjMwMjQrLTAuMDIzNCAg
ICAgICAgICBtaWdodCBiZSAxLjAxMTR4IGZhc3RlcgogICBzdHJpbmctcHJvdG90eXBlLXNwbGl0
LW9ic2VydmFibGUtc2lkZS1lZmZlY3RzNCAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjMzMzkrLTAuMDIxOSAgICAgICAgICAgIDAuMzI0
MSstMC4wMjU5ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMwM3ggZmFzdGVyCiAgIHN0cmluZy1yZXBl
YXQtYXJpdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcuMzgxMSstMC42OTAxICAg
ICA/ICAgICAyNy41NTUxKy0wLjQxNTggICAgICAgID8KICAgc3RyaW5nLXJlcGVhdC1ub3QtcmVz
b2x2aW5nLWZpeGVkICAgICAgICAgICAgICAgICAgNS45MDg4Ky0wLjIzMzcgICAgICAgICAgICA1
Ljc5MDYrLTAuMTcxMSAgICAgICAgICBtaWdodCBiZSAxLjAyMDR4IGZhc3RlcgogICBzdHJpbmct
cmVwZWF0LW5vdC1yZXNvbHZpbmctbm8taW5saW5lICAgICAgICAgICAgICAwLjIyOTUrLTAuMDEz
OSAgICAgICAgICAgIDAuMjI0MCstMC4wMTA4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDI0OXggZmFz
dGVyCiAgIHN0cmluZy1yZXBlYXQtbm90LXJlc29sdmluZyAgICAgICAgICAgICAgICAgICAgICAg
IDkuMDI0MSstMC4xMjEwICAgICAgICAgICAgOC44NzM4Ky0wLjEwMTIgICAgICAgICAgbWlnaHQg
YmUgMS4wMTY5eCBmYXN0ZXIKICAgc3RyaW5nLXJlcGVhdC1yZXNvbHZpbmctZml4ZWQgICAgICAg
ICAgICAgICAgICAgICAzMy4zODc5Ky0wLjQyNTQgICAgICAgICAgIDMzLjI4ODIrLTAuNTQ2MiAg
ICAgICAgCiAgIHN0cmluZy1yZXBlYXQtcmVzb2x2aW5nLW5vLWlubGluZSAgICAgICAgICAgICAg
ICAgIDAuMjM1NCstMC4wMTI4ICAgICAgICAgICAgMC4yMjM4Ky0wLjAxMTEgICAgICAgICAgbWln
aHQgYmUgMS4wNTE2eCBmYXN0ZXIKICAgc3RyaW5nLXJlcGVhdC1yZXNvbHZpbmcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAzOS40NzQ5Ky0wLjI2NDggICAgID8gICAgIDQwLjI2MDQrLTEuOTc5
NCAgICAgICAgPyBtaWdodCBiZSAxLjAxOTl4IHNsb3dlcgogICBzdHJpbmctcmVwZWF0LXNpbmds
ZS1ub3QtcmVzb2x2aW5nICAgICAgICAgICAgICAgICA5LjI2MjArLTAuMjkyNyAgICAgPyAgICAg
IDkuMzQ3MSstMC4xNDIxICAgICAgICA/CiAgIHN0cmluZy1yZXBlYXQtc2luZ2xlLXJlc29sdmlu
ZyAgICAgICAgICAgICAgICAgICAgIDkuNjU0MSstMC4zNzMyICAgICAgICAgICAgOS41OTc1Ky0w
LjI3MDkgICAgICAgIAogICBzdHJpbmctcmVwZWF0LXNtYWxsLW5vdC1yZXNvbHZpbmcgICAgICAg
ICAgICAgICAgICA3LjU1NzArLTAuMjI5MCAgICAgICAgICAgIDcuNDQ4NCstMC4xMTM2ICAgICAg
ICAgIG1pZ2h0IGJlIDEuMDE0NnggZmFzdGVyCiAgIHN0cmluZy1yZXBlYXQtc21hbGwtcmVzb2x2
aW5nICAgICAgICAgICAgICAgICAgICAgNDAuMTQ0NistMC42MzMyICAgICAgICAgICAzOS45MTY3
Ky0wLjUyNjggICAgICAgIAogICBzdHJpbmctcmVwbGFjZS1lbXB0eSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDE5LjA2NzErLTAuMzQwNSAgICAgICAgICAgMTkuMDA4OCstMC4zOTUyICAg
ICAgICAKICAgc3RyaW5nLXJlcGxhY2UtZ2VuZXJpYyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA2Ni4xNTM1Ky0wLjMwMDAgICAgICEgICAgIDY3Ljk4ODcrLTEuNDAzMSAgICAgICAgISBkZWZp
bml0ZWx5IDEuMDI3N3ggc2xvd2VyCiAgIHN0cmluZy1yZXBsYWNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTguODA4MSstMC4xMTI0ICAgICA/ICAgICAxOS4wMDQ1Ky0wLjMx
OTYgICAgICAgID8gbWlnaHQgYmUgMS4wMTA0eCBzbG93ZXIKICAgc3RyaW5nLXJvcGUtd2l0aC1v
YmplY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNTAyKy0wLjAyNjUgICAgICAgICAg
ICAwLjI0NDIrLTAuMDE0NSAgICAgICAgICBtaWdodCBiZSAxLjAyNDd4IGZhc3RlcgogICBzdHJp
bmctc3ViICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0LjE4MjArLTAu
NDMzNSAgICAgISAgICAgNDguNDQ3OSstMC42NDQ4ICAgICAgICAhIGRlZmluaXRlbHkgMS4wOTY2
eCBzbG93ZXIKICAgc3RyaW5nLXRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMy4zMDEzKy0wLjA3NzMgICAgICAgICAgICAzLjIwNzQrLTAuMDYxMiAgICAgICAgICBt
aWdodCBiZSAxLjAyOTN4IGZhc3RlcgogICBzdHJpbmctdHJhbnNjb2RpbmcgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI1LjAxODQrLTAuNDU0NSAgICAgPyAgICAgMjUuMTk0OSstMC41
OTA2ICAgICAgICA/CiAgIHN0cmluZy12YXItZXF1YWxpdHkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMzguNTQ5NCstMC42MDgyICAgICAgICAgICAzOC4zMTYwKy0wLjY2ODUgICAgICAg
IAogICBzdHJ1Y3R1cmUtaG9pc3Qtb3Zlci10cmFuc2l0aW9ucyAgICAgICAgICAgICAgICAgICA0
LjIyODYrLTAuMTkwNiAgICAgICAgICAgIDQuMTQ5NSstMC4wMzQwICAgICAgICAgIG1pZ2h0IGJl
IDEuMDE5MXggZmFzdGVyCiAgIHN1YnN0cmluZy1jb25jYXQtd2VpcmQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNDcuMTAwNystMC40Mjc3ICAgICA/ICAgICA0Ny42NDgyKy0wLjY5NzkgICAg
ICAgID8gbWlnaHQgYmUgMS4wMTE2eCBzbG93ZXIKICAgc3Vic3RyaW5nLWNvbmNhdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0OC40Nzg4Ky0wLjI3ODAgICAgICAgICAgIDQ4LjQ3
ODErLTAuNjgwNyAgICAgICAgCiAgIHN1YnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgNTIuMjMwNistMC44OTgzICAgICA/ICAgICA1Mi4zNTQ2Ky0wLjU4MjIg
ICAgICAgID8KICAgc3VwZXItZ2V0LWJ5LWlkLXdpdGgtdGhpcy1tb25vbW9ycGhpYyAgICAgICAg
ICAgICA0NC43NDM5Ky0xLjM0MzkgICAgID8gICAgIDQ1LjYxNDgrLTEuNDYwOSAgICAgICAgPyBt
aWdodCBiZSAxLjAxOTV4IHNsb3dlcgogICBzdXBlci1nZXQtYnktaWQtd2l0aC10aGlzLXBvbHlt
b3JwaGljICAgICAgICAgICAgIDQ0LjAwNjMrLTAuOTIyNSAgICAgICAgICAgNDMuOTg5NCstMC45
NTk3ICAgICAgICAKICAgc3VwZXItZ2V0LWJ5LXZhbC13aXRoLXRoaXMtbW9ub21vcnBoaWMgICAg
ICAgICAgICAgMC4yNDgzKy0wLjAxMzcgICAgICAgICAgICAwLjIzOTkrLTAuMDE2MCAgICAgICAg
ICBtaWdodCBiZSAxLjAzNDZ4IGZhc3RlcgogICBzdXBlci1nZXQtYnktdmFsLXdpdGgtdGhpcy1w
b2x5bW9ycGhpYyAgICAgICAgICAgICAwLjI1MTQrLTAuMDE5OSAgICAgICAgICAgIDAuMjQ4NSst
MC4wMjcyICAgICAgICAgIG1pZ2h0IGJlIDEuMDEyMHggZmFzdGVyCiAgIHN3aXRjaC1jaGFyLWNv
bnN0YW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIuODA2NystMC4wMzY1ICAgICAg
ICAgICAgMi42MjExKy0wLjE2MjIgICAgICAgICAgbWlnaHQgYmUgMS4wNzA4eCBmYXN0ZXIKICAg
c3dpdGNoLWNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNi4yNzk3
Ky0wLjIyMTUgICAgICAgICAgICA2LjI2ODYrLTAuMDU1NiAgICAgICAgCiAgIHN3aXRjaC1jb25z
dGFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDguMzgzNSstMC4xODc1ICAg
ICAgICAgICAgOC4yNDIxKy0wLjE2NTMgICAgICAgICAgbWlnaHQgYmUgMS4wMTcyeCBmYXN0ZXIK
ICAgc3dpdGNoLXN0cmluZy1iYXNpYy1iaWctdmFyICAgICAgICAgICAgICAgICAgICAgICAxOC41
NDA3Ky0wLjQxMzAgICAgID8gICAgIDE4LjY1NzArLTAuMzcxMyAgICAgICAgPwogICBzd2l0Y2gt
c3RyaW5nLWJhc2ljLWJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LjY0MzYrLTAuMjI4
NyAgICAgICAgICAgMTYuNDgwMistMC4xMDc3ICAgICAgICAKICAgc3dpdGNoLXN0cmluZy1iYXNp
Yy12YXIgICAgICAgICAgICAgICAgICAgICAgICAgICAxOC4wNjkxKy0wLjEzOTEgICAgID8gICAg
IDE4LjM2NzUrLTAuNjE5NyAgICAgICAgPyBtaWdodCBiZSAxLjAxNjV4IHNsb3dlcgogICBzd2l0
Y2gtc3RyaW5nLWJhc2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LjI0NTQrLTAu
MjgwOSAgICAgPyAgICAgMTUuMzc0MistMC4zOTU1ICAgICAgICA/CiAgIHN3aXRjaC1zdHJpbmct
YmlnLWxlbmd0aC10b3dlci12YXIgICAgICAgICAgICAgICAgMjQuMDIyMistMC41Njk3ICAgICAg
ICAgICAyMy43MjYwKy0wLjMwNzkgICAgICAgICAgbWlnaHQgYmUgMS4wMTI1eCBmYXN0ZXIKICAg
c3dpdGNoLXN0cmluZy1sZW5ndGgtdG93ZXItdmFyICAgICAgICAgICAgICAgICAgICAxOC45MzIw
Ky0wLjE5NDAgICAgICAgICAgIDE4Ljg1MDcrLTAuMTg1NyAgICAgICAgCiAgIHN3aXRjaC1zdHJp
bmctbGVuZ3RoLXRvd2VyICAgICAgICAgICAgICAgICAgICAgICAgMTQuNzUzMSstMC4yMTAwICAg
ICAgICAgICAxNC41NTYwKy0wLjI0NDcgICAgICAgICAgbWlnaHQgYmUgMS4wMTM1eCBmYXN0ZXIK
ICAgc3dpdGNoLXN0cmluZy1zaG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNC42
NDY3Ky0wLjIxNjUgICAgICAgICAgIDE0LjYwMjUrLTAuMTkzOSAgICAgICAgCiAgIHN3aXRjaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEuMDQwMSstMC45MzI0
ICAgICA/ICAgICAxMi4wNjgzKy0wLjU3MTcgICAgICAgID8gbWlnaHQgYmUgMS4wOTMxeCBzbG93
ZXIKICAgc3ltYm9sLXRvc3RyaW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4yODAxKy0wLjAyNjUgICAgICAgICAgICAwLjI3NTcrLTAuMDI2NCAgICAgICAgICBtaWdodCBi
ZSAxLjAxNTl4IGZhc3RlcgogICB0ZWFyLW9mZi1hcmd1bWVudHMtc2ltcGxlICAgICAgICAgICAg
ICAgICAgICAgICAgICA1LjY1NTgrLTAuMTI0NyAgICAgPyAgICAgIDUuODk3OSstMC4zMjMxICAg
ICAgICA/IG1pZ2h0IGJlIDEuMDQyOHggc2xvd2VyCiAgIHRlYXItb2ZmLWFyZ3VtZW50cyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuMTAwNistMC4xNjg1ICAgICA/ICAgICAgNy4z
MzEzKy0wLjEzMDAgICAgICAgID8gbWlnaHQgYmUgMS4wMzI1eCBzbG93ZXIKICAgdGVtcG9yYWwt
c3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMy43NjMyKy0wLjYwNDYg
ICAgICAgICAgIDEzLjY0NTcrLTAuNDcyNyAgICAgICAgCiAgIHRvLWludDMyLWJvb2xlYW4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUuNTk4NSstMC4yNjI1ICAgICA/ICAgICAx
NS44MTYyKy0wLjExMDIgICAgICAgID8gbWlnaHQgYmUgMS4wMTQweCBzbG93ZXIKICAgdG8tbnVt
YmVyLWNvbnN0cnVjdG9yLW51bWJlci1zdHJpbmctbnVtYmVyLXN0cmluZyAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1LjE2MzMrLTAuMTYx
MyAgICAgICAgICAgIDUuMTM4OCstMC4xMDk0ICAgICAgICAKICAgdG8tbnVtYmVyLWNvbnN0cnVj
dG9yLW9ubHktbnVtYmVyICAgICAgICAgICAgICAgICAgMC43OTk4Ky0wLjExOTAgICAgID8gICAg
ICAwLjgwMzYrLTAuMTE0MiAgICAgICAgPwogICB0by1udW1iZXItY29uc3RydWN0b3Itb25seS1z
dHJpbmcgICAgICAgICAgICAgICAgICAyLjMxMDArLTAuMDkxNyAgICAgPyAgICAgIDIuMzMyNSst
MC4xMjg5ICAgICAgICA/CiAgIHRvLW51bWJlci1jb25zdHJ1Y3Rvci1zdHJpbmctbnVtYmVyLXN0
cmluZy1udW1iZXIgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNC4zODY4Ky0wLjE0NzIgICAgID8gICAgICA0LjUxNTQrLTAuMTQyNiAgICAg
ICAgPyBtaWdodCBiZSAxLjAyOTN4IHNsb3dlcgogICB0by1udW1iZXItbnVtYmVyLXN0cmluZy1u
dW1iZXItc3RyaW5nICAgICAgICAgICAgICA0LjQ3OTIrLTAuMTQ2MyAgICAgPyAgICAgIDQuNjM1
NistMC4yOTY5ICAgICAgICA/IG1pZ2h0IGJlIDEuMDM0OXggc2xvd2VyCiAgIHRvLW51bWJlci1v
bmx5LW51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNzIwNystMC4xMjg1ICAg
ICAgICAgICAgMC42MzExKy0wLjEzMTEgICAgICAgICAgbWlnaHQgYmUgMS4xNDIweCBmYXN0ZXIK
ICAgdG8tbnVtYmVyLW9ubHktc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4z
MDQyKy0wLjEwODggICAgID8gICAgICAyLjMyNTgrLTAuMTAzNiAgICAgICAgPwogICB0by1udW1i
ZXItc3RyaW5nLW51bWJlci1zdHJpbmctbnVtYmVyICAgICAgICAgICAgICA0LjI4OTgrLTAuMTE5
NSAgICAgPyAgICAgIDQuNDM0NSstMC4wOTQwICAgICAgICA/IG1pZ2h0IGJlIDEuMDMzN3ggc2xv
d2VyCiAgIHRyeS1jYXRjaC1nZXQtYnktdmFsLWNsb25lZC1hcmd1bWVudHMgICAgICAgICAgICAg
IDcuNTY0NystMC41OTM5ICAgICA/ICAgICAgOC4xMzU4Ky0wLjc2NDkgICAgICAgID8gbWlnaHQg
YmUgMS4wNzU1eCBzbG93ZXIKICAgdHJ5LWNhdGNoLWdldC1ieS12YWwtZGlyZWN0LWFyZ3VtZW50
cyAgICAgICAgICAgICAgNC40OTg5Ky0wLjE2NzMgICAgICAgICAgICA0LjE3NTArLTAuMjM1NCAg
ICAgICAgICBtaWdodCBiZSAxLjA3NzZ4IGZhc3RlcgogICB0cnktY2F0Y2gtZ2V0LWJ5LXZhbC1z
Y29wZWQtYXJndW1lbnRzICAgICAgICAgICAgIDEwLjMyMTUrLTAuMjg5MyAgICAgPyAgICAgMTAu
MzI4MistMC4xNDI4ICAgICAgICA/CiAgIHRyeS1nZXQtYnktaWQtYmFzaWMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAuMjcxNCstMC4wMDc1ICAgICAgICAgICAgMC4yNjM4Ky0wLjAy
MDMgICAgICAgICAgbWlnaHQgYmUgMS4wMjg3eCBmYXN0ZXIKICAgdHJ5LWdldC1ieS1pZC1wb2x5
bW9ycGhpYyAgICAgICAgICAgICAgICAgICAgICAgICAgMC4yNzE0Ky0wLjAxODQgICAgICAgICAg
ICAwLjI1NzYrLTAuMDExOSAgICAgICAgICBtaWdodCBiZSAxLjA1Mzl4IGZhc3RlcgogICB0eXBl
ZC1hcnJheS1nZXQtc2V0LWJ5LXZhbC1wcm9maWxpbmcgICAgICAgICAgICAgICAwLjI0NjArLTAu
MDIzMCAgICAgICAgICAgIDAuMjM4NCstMC4wMjI3ICAgICAgICAgIG1pZ2h0IGJlIDEuMDMyMXgg
ZmFzdGVyCiAgIHR5cGVkLWFycmF5LXN1YmFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAuMjc3NSstMC4wMzU3ICAgICAgICAgICAgMC4yMzk4Ky0wLjAwNDIgICAgICAgICAgbWln
aHQgYmUgMS4xNTcxeCBmYXN0ZXIKICAgdW5kZWZpbmVkLXByb3BlcnR5LWFjY2VzcyAgICAgICAg
ICAgICAgICAgICAgICAgIDM2Ny41MzM3Ky00LjY3NTggICAgICAgICAgMzY1LjYxODArLTAuNTk0
NCAgICAgICAgCiAgIHVuZGVmaW5lZC10ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDMuNDMxOCstMC4wOTcwICAgICAgICAgICAgMy40MTE1Ky0wLjA2NzcgICAgICAgIAog
ICB1bnByb2ZpbGVkLWxpY20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLjY4
OTArLTAuMjA1NSAgICAgPyAgICAgMTEuNzEzNystMC4yNDY4ICAgICAgICA/CiAgIHVudHlwZWQt
c3RyaW5nLWZyb20tY2hhci1jb2RlICAgICAgICAgICAgICAgICAgICAgMTEuODkyNystMC4yNjE0
ICAgICA/ICAgICAxMi4xMzU2Ky0wLjExNDYgICAgICAgID8gbWlnaHQgYmUgMS4wMjA0eCBzbG93
ZXIKICAgdjgtcmF5dHJhY2Utd2l0aC1lbXB0eS10cnktY2F0Y2ggICAgICAgICAgICAgICAgICA0
NS4zNzczKy0xLjIzNTAgICAgICAgICAgIDQ0LjgxODArLTAuMjM0OSAgICAgICAgICBtaWdodCBi
ZSAxLjAxMjV4IGZhc3RlcgogICB2OC1yYXl0cmFjZS13aXRoLXRyeS1jYXRjaC1oaWdoLWZyZXF1
ZW5jeS10aHJvd3MgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC4zMTAyKy0wLjAzMDEgICAgICAgICAgICAwLjI5NDErLTAuMDIwNSAgICAg
ICAgICBtaWdodCBiZSAxLjA1NDh4IGZhc3RlcgogICB2OC1yYXl0cmFjZS13aXRoLXRyeS1jYXRj
aCAgICAgICAgICAgICAgICAgICAgICAgICAwLjMxMDYrLTAuMDI4NyAgICAgICAgICAgIDAuMzAz
MSstMC4wMTIwICAgICAgICAgIG1pZ2h0IGJlIDEuMDI1MHggZmFzdGVyCiAgIHY4LXJlZ2V4cC1z
ZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzkuMjA1MistMS44MTYzICAg
ICAgICAgICA3Ni43MTc2Ky0zLjIxODMgICAgICAgICAgbWlnaHQgYmUgMS4wMzI0eCBmYXN0ZXIK
ICAgdmFyYXJncy1jYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4y
MjA4Ky0wLjAxMzEgICAgICAgICAgICAwLjIwODUrLTAuMDExOSAgICAgICAgICBtaWdodCBiZSAx
LjA1OTF4IGZhc3RlcgogICB2YXJhcmdzLWNvbnN0cnVjdC1pbmxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLjIxNzkrLTAuMDA4OSAgICAgPyAgICAgIDAuMjE5MCstMC4wMTcwICAgICAg
ICA/CiAgIHZhcmFyZ3MtY29uc3RydWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuMjM1NistMC4wMTcyICAgICAgICAgICAgMC4yMjI5Ky0wLjAxMzAgICAgICAgICAgbWlnaHQg
YmUgMS4wNTcweCBmYXN0ZXIKICAgdmFyYXJncy1pbmxpbmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4yMjQwKy0wLjAxNDAgICAgICAgICAgICAwLjIxNjMrLTAuMDIzOCAg
ICAgICAgICBtaWdodCBiZSAxLjAzNTV4IGZhc3RlcgogICB2YXJhcmdzLXN0cmljdC1tb2RlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjIyMDcrLTAuMDI4OCAgICAgICAgICAgIDAu
MjEyOCstMC4wMTA4ICAgICAgICAgIG1pZ2h0IGJlIDEuMDM2OXggZmFzdGVyCiAgIHZhcmFyZ3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMjE2MystMC4wMTQ3
ICAgICA/ICAgICAgMC4yMjg1Ky0wLjAxODAgICAgICAgID8gbWlnaHQgYmUgMS4wNTY0eCBzbG93
ZXIKICAgd2VpcmQtaW5saW5pbmctY29uc3QtcHJvcCAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4yNDE0Ky0wLjAyNTcgICAgICAgICAgICAwLjIzNDcrLTAuMDE5MiAgICAgICAgICBtaWdodCBi
ZSAxLjAyODh4IGZhc3RlcgoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMy42MjY0Ky0wLjAwNjcgICAgIF4gICAgICAzLjU4OTkrLTAuMDA5NyAg
ICAgICAgXiBkZWZpbml0ZWx5IDEuMDEwMnggZmFzdGVyCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgICAgICAgICAgICAgICAg
ICAgICAgbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApBc21CZW5j
aDoKICAgYmlnZmliLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0
Ny4xMDY1Ky0xNy42NDY3ICAgICAgICAgNTQzLjIxNTcrLTE1Ljk3MTIgICAgICAgCiAgIGNyYXku
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDYuMjIzMystNC40
NDg2ICAgICA/ICAgIDQ0OC42MjgyKy02LjM0OTMgICAgICAgID8KICAgZHJ5LmMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxOC42NjM5Ky0zNy41NTc5ICAgICAg
ICAgNjA2LjAwNzMrLTYyLjIxOTQgICAgICAgICBtaWdodCBiZSAxLjAyMDl4IGZhc3RlcgogICBG
bG9hdE1NLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODA2LjUwMDgr
LTUuNTk4MiAgICAgICAgICA4MDUuMTY0OCstMy4yMDUwICAgICAgICAKICAgZ2NjLWxvb3BzLmNw
cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUzMi4xMDU0Ky05LjczODkgICAg
ICAgICA0NTI5LjIxMzgrLTYuMTEyOCAgICAgICAgCiAgIG4tYm9keS5jICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMzUuMzgxOCstNi4xMjE1ICAgICA/ICAgMTA0NC44
ODU1Ky04LjU1NTcgICAgICAgID8KICAgUXVpY2tzb3J0LmMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDQ4NC45MjA5Ky0yLjIwODUgICAgID8gICAgNDg3LjM2MTkrLTcuODUz
MiAgICAgICAgPwogICBzdGVwYW5vdl9jb250YWluZXIuY3BwICAgICAgICAgICAgICAgICAgICAg
ICAgICAzNzY3LjI0OTArLTExMC4xOTI5ICAgICAgIDM3MDIuNTA4NCstMTcuNTc0NyAgICAgICAg
IG1pZ2h0IGJlIDEuMDE3NXggZmFzdGVyCiAgIFRvd2Vycy5jICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAyOTUuMDU1MSstMC45MzY0ICAgICA/ICAgIDI5Ny4xNDQ1Ky0z
Ljc0ODMgICAgICAgID8KCiAgIDxnZW9tZXRyaWM+ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA4NzcuMTgyMistNi44MTY4ICAgICAgICAgIDg3NC45MzIzKy0xMC42NDM3ICAg
ICAgICAgbWlnaHQgYmUgMS4wMDI2eCBmYXN0ZXIKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSAgICAgICAgICAgICAgICAgICAg
ICBuZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCkRTUDoKICAgZmls
dHJyLXBvc3Rlcml6ZS10aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOS44Nzg5Ky0w
LjQwMDcgICAgID8gICAgIDMwLjAwNTMrLTAuNzIzNyAgICAgICAgPwogICBmaWx0cnItdGludC1j
b250cmFzdC1zYXQtYnJpZ2h0ICAgICAgICAgICAgICAgICAgIDQzLjMxNjIrLTAuNTcxMSAgICAg
ICAgICAgNDIuOTg3NSstMC4yODgzICAgICAgICAKICAgZmlsdHJyLXRpbnQtc2F0LWFkai1jb250
ci1tdWx0ICAgICAgICAgICAgICAgICAgICA0OS4wODQ5Ky0xLjcxNzQgICAgID8gICAgIDQ5LjIw
OTQrLTAuOTQ2MiAgICAgICAgPwogICBmaWx0cnItYmx1ci1vdmVybGF5LXNhdC1jb250ciAgICAg
ICAgICAgICAgICAgICAgMTA2LjgyMzcrLTMuODc1OCAgICAgICAgICAxMDYuNjAzOSstMi43NDUx
ICAgICAgICAKICAgZmlsdHJyLXNhdC1ibHVyLW11bHQtc2hhcnBlbi1jb250ciAgICAgICAgICAg
ICAgIDExNy42MzQyKy0yLjQzMDggICAgID8gICAgMTIwLjI4MDErLTYuNDY2MyAgICAgICAgPyBt
aWdodCBiZSAxLjAyMjV4IHNsb3dlcgogICBmaWx0cnItc2VwaWEtYmlhcyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDI3LjE2NzgrLTAuNTY1NCAgICAgICAgICAgMjcuMTM2OSstMC41
NzU5ICAgICAgICAKICAgcm91dGU5LXZwOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
NSAgICAgMTU4Mi4zNDY0Ky0zMi42MTQxICAgICAgICAxNTU2LjI1MDkrLTEzLjgyNjkgICAgICAg
ICBtaWdodCBiZSAxLjAxNjh4IGZhc3RlcgogICBzdGFyZmllbGQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHg1ICAgICAxMzQyLjc1MTcrLTI1LjY1MTEgICAgPyAgIDEzNDcuMTAzNist
MjEuMTM0NiAgICAgICA/CiAgIGJlbGxhcmQtanNsaW51eCAgICAgICAgICAgICAgICAgICAgICAg
ICAgeDUgICAgIDM3MDYuNjY2NystMTYuMTE3MiAgICAgICAgMzY1NC44MzMzKy02My44MTg5ICAg
ICAgICAgbWlnaHQgYmUgMS4wMTQyeCBmYXN0ZXIKICAgenluYXBzLXF1YWtlMyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4NSAgICAgIDU3MS43NTY0Ky04Ljc0MzIgICAgICAgICAgNTcxLjU4
MzUrLTUuNjEyNiAgICAgICAgCiAgIHp5bmFwcy1tYW5kZWxicm90ICAgICAgICAgICAgICAgICAg
ICAgICAgeDUgICAgICA0OTMuMjg3OCstNS40MDcxICAgICA/ICAgIDQ5My40MDM3Ky03LjMzNzQg
ICAgICAgID8KICAgYW1tb2pzLWFzbS1qcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4NSAg
ICAgICA2Ni4yNDIzKy0xLjUzMjAgICAgID8gICAgIDY4LjQxMjcrLTIuNTkzOSAgICAgICAgPyBt
aWdodCBiZSAxLjAzMjh4IHNsb3dlcgogICBhbW1vanMtcmVndWxhci1qcyAgICAgICAgICAgICAg
ICAgICAgICAgIHg1ICAgICAgIDcyLjAxMzQrLTEwLjY2MjMgICAgICAgICAgNjguOTIzMystMi4y
ODAxICAgICAgICAgIG1pZ2h0IGJlIDEuMDQ0OHggZmFzdGVyCgogICA8Z2VvbWV0cmljPiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzczLjE0MjErLTcuNzg2MSAgICAgICAg
ICAzNzEuNzcwMystMS42MDA1ICAgICAgICAgIG1pZ2h0IGJlIDEuMDAzN3ggZmFzdGVyCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
c2UgICAgICAgICAgICAgICAgICAgICAgbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIApDb21wcmVzc2lvbkJlbmNoOgogICBodWZmbWFuICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDYyLjcyOTcrLTAuODgyMCAgICAgICAgICAgNjIuMTYy
OSstMS4xMTU1ICAgICAgICAKICAgYXJpdGhtZXRpYy1zaW1wbGUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDM0NS42MjY1Ky01LjYwMDIgICAgICAgICAgMzQ1LjI4MzUrLTEuOTY0NyAg
ICAgICAgCiAgIGFyaXRobWV0aWMtcHJlY2lzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAyODQuNDM5MCstMy44NjMzICAgICAgICAgIDI4MS40NjgxKy0yLjU4NTUgICAgICAgICAgbWln
aHQgYmUgMS4wMTA2eCBmYXN0ZXIKICAgYXJpdGhtZXRpYy1jb21wbGV4LXByZWNpc2UgICAgICAg
ICAgICAgICAgICAgICAgIDI4My42MDUyKy01LjgyNTEgICAgICAgICAgMjgxLjQ0MjIrLTIuNTI2
NiAgICAgICAgCiAgIGFyaXRobWV0aWMtcHJlY2lzZS1vcmRlci0wICAgICAgICAgICAgICAgICAg
ICAgICAzNTAuOTkxMystNC45NjYyICAgICA/ICAgIDM1NC45NzIwKy0xMy4yNjA2ICAgICAgID8g
bWlnaHQgYmUgMS4wMTEzeCBzbG93ZXIKICAgYXJpdGhtZXRpYy1wcmVjaXNlLW9yZGVyLTEgICAg
ICAgICAgICAgICAgICAgICAgIDMzNy40ODY4Ky05LjM4NDIgICAgICAgICAgMzM0LjA3MzErLTAu
NjE3NiAgICAgICAgICBtaWdodCBiZSAxLjAxMDJ4IGZhc3RlcgogICBhcml0aG1ldGljLXByZWNp
c2Utb3JkZXItMiAgICAgICAgICAgICAgICAgICAgICAgNDAyLjE2MzYrLTMuNjQ2OCAgICAgPyAg
ICA0MDcuNTIzNystNi43MzUzICAgICAgICA/IG1pZ2h0IGJlIDEuMDEzM3ggc2xvd2VyCiAgIGFy
aXRobWV0aWMtc2ltcGxlLW9yZGVyLTEgICAgICAgICAgICAgICAgICAgICAgICAzOTcuNTg4OSst
Mi41NjM3ICAgICA/ICAgIDM5OC4zMDk2Ky0yLjM1MzIgICAgICAgID8KICAgYXJpdGhtZXRpYy1z
aW1wbGUtb3JkZXItMiAgICAgICAgICAgICAgICAgICAgICAgIDQ1NC45NDg5Ky0yLjUyOTMgICAg
ICAgICAgNDUzLjc2MjArLTIuODI0NiAgICAgICAgCiAgIGx6LXN0cmluZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAyNjkuMjY4MistMi4wNjk2ICAgICAgICAgIDI2Ny40
MjMzKy0yLjc1MjIgICAgICAgIAoKICAgPGdlb21ldHJpYz4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDI4OC45MzI1Ky0wLjY3MDggICAgICAgICAgMjg4LjMxMTIrLTEuMzk3
NSAgICAgICAgICBtaWdodCBiZSAxLjAwMjJ4IGZhc3RlcgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlICAgICAgICAgICAgICAg
ICAgICAgIG5ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKR2VvbWVh
biBvZiBwcmVmZXJyZWQgbWVhbnM6CiAgIDxzY2FsZWQtcmVzdWx0PiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgNTcuOTA3MCstMC4xMTA0ICAgICAgICAgICA1Ny42OTk4Ky0wLjE0
OTkgICAgICAgICAgbWlnaHQgYmUgMS4wMDM2eCBmYXN0ZXIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287838</attachid>
            <date>2016-09-02 17:30:49 -0700</date>
            <delta_ts>2016-09-02 17:45:00 -0700</delta_ts>
            <desc>work in progress: rebased.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785390</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMiwxMSArMTAzNCwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA0OSw5ICsxMDU0LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzNywxMSArMTE0MiwxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjUyLDkgKzEyNTksOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDQyLDcgKzE0NDksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NzYsNyArMTQ4Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE1MDQsNyArMTUxMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUyNSw3ICsxNTMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTU0Miw3ICsx
NTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU1Nyw3ICsxNTY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjE3LDggKzE2
MjQsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg3MSwxNCArMTg4MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4OTYsMTQgKzE5MDYs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTIyLDcgKzE5MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDgsMTQg
KzE5NjAsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzgsNyArMTk5
Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwODQsNiArMjA5OCwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDky
LDkgKzIxMTYsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMTA2LDExICsyMTM0LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpCiB7Ci0gICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewogICAgICAgICBwcmludGYoIkV4cGVj
dGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIG5hbWUgJyVzJyBidXQgbm9uZSB3YXMgdGhyb3du
XG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTIxMTgsMTMgKzIxNDksMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdo
dEV4Y2VwdGlvbihWTSYgdgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhwZWN0ZWRFeGNlcHRpb25O
YW1lKSk7Ci0gICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHZtLmV4Y2VwdGlv
bigpKSB7CisgICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHNjb3BlLmV4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdp
dGggbmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgaXMgbm90IGRlZmluZWRcbiIs
IGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnN0YW5jZU9mRXhwZWN0ZWRFeGNlcHRpb24gPSBq
c0Nhc3Q8SlNPYmplY3QqPihleGNlcHRpb25DbGFzcyktPmhhc0luc3RhbmNlKGV4ZWMsIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGgg
bmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgZmFpbHMgcGVyZm9ybWluZyBoYXNJ
bnN0YW5jZVxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjE0NSw2ICsyMTc2LDcgQEAgc3RhdGljIGJvb2wg
cnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBH
ZW5lcmF0ZWRCeXRlY29kZXMoKSA9IHRydWU7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGJv
b2wgc3VjY2VzcyA9IHRydWU7CiAKICAgICBhdXRvIGNoZWNrRXhjZXB0aW9uID0gWyZdIChib29s
IGlzTGFzdEZpbGUsIGJvb2wgaGFzRXhjZXB0aW9uLCBKU1ZhbHVlIHZhbHVlKSB7CkBAIC0yMTg3
LDcgKzIyMTksNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIGlmIChpc01vZHVsZSkgewogICAgICAgICAgICAgaWYgKCFwcm9taXNlKQogICAgICAg
ICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1lKSk7Ci0gICAgICAg
ICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKIAogICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVsZmlsbEhhbmRsZXIgPSBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsmLCBp
c0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAgICAgICAgICAgICBjaGVja0V4Y2Vw
dGlvbihpc0xhc3RGaWxlLCBmYWxzZSwgZXhlYy0+YXJndW1lbnQoMCkpOwpAQCAtMjIwNCwxMyAr
MjIzNiwxNCBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRpb25F
eGNlcHRpb247CiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1l
KSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24p
CiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52YWx1
ZSgpOwogICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbiwgcmV0dXJuVmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgc2NyaXB0QnVmZmVy
LmNsZWFyKCk7Ci0gICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpAQCAt
MjIyMyw2ICsyMjU2LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0
KgogCiBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIGludGVycHJldGVyTmFtZShB
U0NJSUxpdGVyYWwoIkludGVycHJldGVyIikpOwogICAgIAogICAgIGJvb2wgc2hvdWxkUXVpdCA9
IGZhbHNlOwpAQCAtMjI3Myw3ICsyMzA5LDcgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUo
R2xvYmFsT2JqZWN0KgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4iLCBy
ZXR1cm5WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCktPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGdsb2Jh
bE9iamVjdC0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKICAgICB9CiAgICAgcHJpbnRmKCJcbiIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAkocmV2aXNpb24gMjA1Mzgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMSArMzgsMTMgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25TdGF0dXMgewogCiBpbmxp
bmUgRXhjZXB0aW9uU3RhdHVzIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZikKIHsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0g
c2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvblJlZikKICAg
ICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlvbi0+
dmFsdWUoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgICAg
IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJlcG9y
dEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMjgsMTIgKzIxMjgsMTkgQEAKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8q
IERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29w
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMy
QTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZN
RW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQg
LyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2
ZW50TG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM2MUQ3OEYw
MTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNl
cHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwICovOyB9
OworCQlGRTY0OTEzQjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNBMUQ3OEY0NjEw
MEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTNEMUQ3OEZDMkYwMEE2OTRENCAvKiBFeGNlcHRp
b25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuY3BwICovOyB9Owog
CQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNjFCOTBE
REQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2OEM2MzgxQjkwREUwQjAwNDJCQ0Iz
IC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmNwcCAqLzsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0IC8qIEhl
YXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLzsgfTsK
IAkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUZFN0M0MTk2MUI5N0ZDNEIwMEY0RDU5OCAvKiBQaW5nUG9uZ1N0YWNr
T3ZlcmZsb3dUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmNwcCAqLzsgfTsKKwkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk2
MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENh
dGNoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8qIENhdGNoU2NvcGUuY3BwICovOyB9OworCQlG
RTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5QTFENzc2
OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgKi87IH07CiAJCUZFOTlC
MjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1OSAv
KiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkU5OUIyNEExQzI0QzNENzAwQzgyMTU5IC8q
IEpJVE5lZ0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNw
cCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgyQjdB
MDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0MzUsMTEgKzQ0NDIsMTggQEAKIAkJRkU1MDY4NjYxQUUy
NUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3Bl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUND
QyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1F
bnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNjAyOUQ4MUQ2RTFF
MzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVGhyb3dTY29wZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzYxRDc4RjAxMzAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEV4Y2VwdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5MTM4
MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFNjQ5MTNBMUQ3OEY0NjEwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhj
ZXB0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhj
ZXB0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY4QzYzNTFC
OTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFN0JB
NjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0Y2hTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXRjaFNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOUExRDc3NjhGRDAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRTdWJH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU2ODQsNiArNTY5OCw4IEBACiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2Fs
bERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5o
ICovLAorCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLywK
KwkJCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovLAogCQkJCUJD
NkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKIAkJCQkwRkUwNTAxQzFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxRDFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggKi8sCkBAIC01NzQ4LDEwICs1NzY0
LDE2IEBACiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmgg
Ki8sCiAJCQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8sCiAJ
CQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8sCisJCQkJRkU2NDkx
M0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8sCisJCQkJRkU4MEMxOUEx
RDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovLAorCQkJCUZF
NjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8sCiAJ
CQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovLAogCQkJ
CTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8sCiAJCQkJMTQy
OUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLAogCQkJCUE3
MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi8sCisJCQkJRkU2
NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAqLywKKwkJCQlGRTY0
OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLywKIAkJCQk4NkNBMDMy
RDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJODZDQUZFRTIxMDM1
RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKIAkJCQlBN0E4QUYyOTE3QURCNUYzMDA1
QUIxNzQgLyogRmxvYXQzMkFycmF5LmggKi8sCkBAIC02MTQzLDcgKzYxNjUsNiBAQAogCQkJCTBG
QTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLywKIAkJCQlGRTJF
NkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8sCiAJCQkJRkUzNDIyMTEx
RDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLywKLQkJCQlGRTYwMjlEODFENkUxRTMz
MDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggKi8sCiAJCQkJMEY1NTk4OTcxN0M4NkM1
NjAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggKi8sCiAJCQkJMEYyQjY2RDgxN0I2QjVB
QjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovLAogCQkJCTBGMkI2NkQ5MTdCNkI1
QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCkBAIC03NjkyLDcgKzc3
MTMsNyBAQAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QzAxQzExMDQxQTAwMzkwRkREIC8q
IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOEVCRTI0MUNF
OEYzNTgwMDQ1MzE0NiAvKiBJbnRsT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBH
ZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC04MjA4LDYgKzgyMjksNyBAQAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVG
REUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4
MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBF
QkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUZF
NjQ5MTM3MUQ3OEYwMUQwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIzTGVnYWxpemVNZW1v
cnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcg
LyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzAxLDYgKzgzMjMsNyBA
QAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZhaWxh
YmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0RDQjk3MzEyRTUxOTNGMDA5MTE5NDAgLyog
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEw
QzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0RUM5MEMxODYwRDZDMjAw
OTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCNkQ3
NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTgzMTAsNiArODMzMyw3IEBACiAJCQkJNDUxNTM5QjkxMkRDOTk0
NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3
MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTY0OTEz
QjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI2MkQ4NUI3MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0
ZXJTdGFsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODgzMyw2ICs4ODU3LDcgQEAKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkwRkZBNTQ5NzE2Qjg4
MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEz
OTFENzhGM0FGMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNl
RG91YmxlVG9GbG9hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzMDcsNiArOTMzMiw3IEBACiAJ
CQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFC
NiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFODBDMTk5
MUQ3NzVGQkUwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTMzOSw2ICs5MzY1LDcgQEAKIAkJCQkxNEU5RDE3
QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1
MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkU2NDkxM0QxRDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVj
dFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUIxREI3MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTk0MTksNiArOTQ0Niw3IEBACiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZF
MjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRC
Q0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZF
ODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVy
cHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAv
KiBQZXJHbG9iYWxPYmplY3RXcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRC
NzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDEwICsxMDUsMTIgQEAgSlNWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
bCYgaAogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0
KCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmpl
Y3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBtX25hbWUpKTsK
LSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwx
MCArMTIyLDEzIEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhFeGVjU3RhdGUqIHMKIAog
U3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25z
dAogeworICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyByZXN1bHQgPSBtX3ZhbHVlLmdl
dCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpOwogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFzIHBhcnQgb2YgaW52
b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KLSAgICBpZiAoc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIzLDYgKzYyMyw5IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYK
IAogdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
KyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNjYyLDcgKzY2NSw3IEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICB7CiAgICAgICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlz
LCBkaWRIaXRCcmVha3BvaW50ID8gUGF1c2VkRm9yQnJlYWtwb2ludCA6IG1fcmVhc29uRm9yUGF1
c2UpOwogICAgICAgICBoYW5kbGVQYXVzZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBtX3JlYXNvbkZv
clBhdXNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0K
IAogICAgIG1fcGF1c2luZ0JyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDkgQEAg
SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgIGlmICghY2FsbEZy
YW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAo
aXNUYWlsRGVsZXRlZCgpKQpAQCAtMjI4LDcgKzIzMCw2IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
CiAgICAgRGVidWdnZXJFdmFsRW5hYmxlciBldmFsRW5hYmxlcihjYWxsRnJhbWUpOwotICAgIFZN
JiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4
dFR5cGU7CiAgICAgCkBAIC0yNDMsOSArMjQ0LDkgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFt
ZTo6ZXZhbHVhdGVXaXRoUwogICAgIEpTU2NvcGU6OmNvbGxlY3RWYXJpYWJsZXNVbmRlclREWihz
Y29wZSgpLT5qc1Njb3BlKCksIHZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIEV2YWxFeGVjdXRh
YmxlKiBldmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uo
c2NyaXB0KSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5pc0Fycm93RnVuY3Rpb24oKSwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5k
ZXJURFopOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24gPSB2
bS5leGNlcHRpb24oKTsKLSAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gY2F0
Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTI1Nyw5ICsyNTgs
OSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHRoaXMtPnRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3Bl
KCktPmpzU2NvcGUoKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBleGNlcHRp
b24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgfQogCiAgICAgaWYgKHNjb3BlRXh0ZW5zaW9uT2JqZWN0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTQgKzExMiwxNSBAQCBleHRlcm4g
IkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYg
KGV4ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKworICAg
IGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5j
YWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwotCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhh
dCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAog
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgpAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpCiAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgQVNTRVJUKCEhdm0tPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgICAgIAogICAgIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVj
LCBleGl0Lm1fY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcg
QEAgdGVtcGxhdGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0PgogQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTExOSw3ICsx
MjAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gCiAKICAgICAv
LyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24u
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBzdHJpY3QpOwpAQCAtMTc5LDExICsxODAsMTIgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVRoaQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoY29uc3RydWN0b3ItPnR5cGUoKSA9PSBK
U0Z1bmN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5yYXJlRGF0YShleGVjLCBpbmxpbmVD
YXBhY2l0eSktPm9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpKTsKIAogICAg
IEpTVmFsdWUgcHJvdG8gPSBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
cHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIGFzT2JqZWN0KHByb3RvKSk7CkBAIC0yMDcsMTIgKzIwOSwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IG9wMi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYSAmIGIpKTsKQEAgLTIyMiwxMiArMjI1LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIHwgYikpOwpAQCAtMjM3LDEyICsyNDEsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgXiBiKSk7CkBAIC0yNTIsMTIgKzI1NywxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3Ay
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIDw8IChiICYgMHgxZikpKTsKQEAg
LTI2NywxMiArMjczLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBp
bnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50
b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgPj4g
KGIgJiAweDFmKSkpOwpAQCAtMjgyLDEyICsyODksMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKIAogICAgIHVpbnQzMl90IGEgPSBvcDEudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMHgxZikpKSk7CkBA
IC0zMTMsMTIgKzMyMSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
OwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAg
ZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAvIGIp
KTsKQEAgLTMyOCwxMCArMzM3LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoQWJzKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBmYWJzKGEpOwogfQpAQCAtMzQwLDEwICszNTAsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhDb3MoRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgcmV0dXJuIGNvcyhhKTsKIH0KQEAgLTM1MiwxMCArMzYzLDExIEBAIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRlJvdW4KIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYSk7CiB9CkBAIC0zNjQs
MTAgKzM3NiwxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aExvZyhFCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gbG9nKGEpOwog
fQpAQCAtMzc2LDEwICszODksMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhTaW4oRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJu
IHNpbihhKTsKIH0KQEAgLTM4OCwxMCArNDAyLDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyaXRoU3FydCgKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIHJldHVybiBzcXJ0KGEpOwogfQpAQCAtNDE3LDcgKzQzMiw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwogCkBAIC00NDMsMTAgKzQ1OSwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgfQogCiAg
ICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KQEAgLTQ1NSw3ICs0
NzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVy
dHkpOwogCiAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpCkBAIC00NzYsNyArNDkzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwog
fQpAQCAtODQ1LDYgKzg2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRU
aGlzKTsKQEAgLTg3MCwxMSArODg4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJs
ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LCBzbG90KSk7
CiB9CkBAIC04OTksOSArOTE3LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBwdXRXaXRoVGhpczx0cnVlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRo
aXMsIGVuY29kZWRWYWx1ZSwgcHJvcGVydHkpOwogfQpAQCAtOTEwLDkgKzkyOSwxMCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5
S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgcHV0V2l0aFRoaXM8ZmFsc2U+
KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7
CiB9CkBAIC0xNDI0LDkgKzE0NDQsOSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyQ2F0MihFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNTdHJpbmcqIHN0cjEgPSBKU1ZhbHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3Qg
aGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgp
LCBzdHIyLT5sZW5ndGgoKSkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKTsKQEAgLTE0NDMsMTEgKzE0NjMsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN0ckNhdDMoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4
ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3
ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBwcmltaXRpdmVzLgorICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBw
cmltaXRpdmVzLgogICAgIEpTU3RyaW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIEpTU3RyaW5nKiBzdHIzID0gSlNWYWx1ZTo6ZGVjb2RlKGMp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90Pihz
dHIxLT5sZW5ndGgoKSwgc3RyMi0+bGVuZ3RoKCksIHN0cjMtPmxlbmd0aCgpKSkgewogICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OTcsNiArNzk3LDcgQEAgdm9p
ZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdAogdm9pZCBIZWFwOjp2aXNpdEV4
Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgR0NQSEFTRShNYXJraW5n
RXhjZXB0aW9uKTsKKwogICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsOSBAQCBT
dHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjCiAKIEpTQzo6SlNPYmplY3Qq
IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2UsIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3VyY2Uo
c291cmNlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NyaXB0U3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1Niw3ICsxNTgsNyBAQCBKU0M6OkpTT2JqZWN0
KiBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoaWQp
KTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0YXRlLCBmdW5jdGlv
blZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwgYXJncyk7Ci0gICAg
c2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICByZXR1cm4gcmVzdWx0LmdldE9iamVjdCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsOCBAQCB2b2lkIEpTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBFcnJvckhhbmRs
aW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKHZtKTsKIAogICAgIFJlZlB0cjxT
Y3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVU
b0NhcHR1cmUpOwogICAgIGlmIChpbmNsdWRlc05hdGl2ZUNhbGxTdGFja1doZW5SZXBvcnRpbmdF
eGNlcHRpb25zKCkpCkBAIC0yMjgsOCArMjI5LDEyIEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNw
ZWN0b3JDb250cm9sbGVyOjoKIAogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8x
MTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5k
bGluZyBleGNlcHRpb25zCiAgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2Jq
ZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVw
cmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IGV4Y2VwdGlvbi0+dmFsdWUoKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIHsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KIAogICAgIGlmIChKU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7CiAgICAgICAg
IGlmIChjYWxsU3RhY2stPnNpemUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlzaW9u
IDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNj
cmlwdEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaQogICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW5qZWN0ZWRTY3JpcHRIb3N0LmV2YWx1
YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikp
OwogCiAgICAgU3RyaW5nIHByb2dyYW0gPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkBAIC0yNTksMTIgKzI1OSwxMyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwogCiAgICAgaWYgKEpTUHJvbWlzZSogcHJvbWlzZSA9IGpzRHlu
YW1pY0Nhc3Q8SlNQcm9taXNlKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIHN3aXRjaCAocHJvbWlzZS0+c3RhdHVzKGV4ZWMtPnZtKCkpKSB7
CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OlBlbmRpbmc6CkBAIC0yODYsNyArMjg3
LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChK
U0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTQm91bmRGdW5j
dGlvbio+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJu
YWxQcm9wZXJ0eShleGVjLCAidGFyZ2V0RnVuY3Rpb24iLCBib3VuZEZ1bmN0aW9uLT50YXJnZXRG
dW5jdGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsr
LCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJib3VuZFRoaXMiLCBib3VuZEZ1bmN0
aW9uLT5ib3VuZFRoaXMoKSkpOwpAQCAtMjk4LDcgKzI5OSw3IEBAIEpTVmFsdWUgSlNJbmplY3Rl
ZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0ganNE
eW5hbWljQ2FzdDxQcm94eU9iamVjdCo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5k
ZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoInRhcmdl
dCIpLCBwcm94eS0+dGFyZ2V0KCkpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFs
KCJoYW5kbGVyIiksIHByb3h5LT5oYW5kbGVyKCkpKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAKICAgICAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImFycmF5IiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImtpbmQiLCBraW5kKSk7CkBAIC0zMzUsNyArMzM2LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAiLCBtYXBJdGVyYXRvci0+
aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNTcsNyArMzU4LDcgQEAgSlNWYWx1ZSBKU0lu
amVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzZXQiLCBzZXRJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNO
b250cml2aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNjcsNyArMzY4LDcgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChKU1N0cmluZ0l0ZXJh
dG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+KHZh
bHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAic3RyaW5nIiwgc3RyaW5nSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoZXhlYykp
KTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMzc2LDcgKzM3Nyw3IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAg
ICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgIm9iamVjdCIsIHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5p
dGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtNDA0LDYgKzQwNSw3
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0ganNEeW5h
bWljQ2FzdDxKU1dlYWtNYXAqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFrTWFwKQpAQCAtNDE4LDcg
KzQyMCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAgICAg
ICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7CiAK
ICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3Ig
KGF1dG8gaXQgPSB3ZWFrTWFwLT53ZWFrTWFwRGF0YSgpLT5iZWdpbigpOyBpdCAhPSB3ZWFrTWFw
LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBKU09iamVjdCogZW50cnkg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IGpzRHluYW1pY0Nhc3Q8SlNX
ZWFrU2V0Kj4odmFsdWUpOwogICAgIGlmICghd2Vha1NldCkKQEAgLTQ2NSw3ICs0NjgsNyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChhdXRvIGl0ID0g
d2Vha1NldC0+d2Vha01hcERhdGEoKS0+YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+d2Vha01hcERh
dGEoKS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7CkBAIC00OTUsNiArNDk4LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVk
U2NyaXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgaXRlcmF0b3I7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmIChKU01hcEl0ZXJhdG9yKiBtYXBJdGVy
YXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KHZhbHVlKSkKQEAgLTUwNSw3ICs1
MDksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IGl0ZXJhdG9yID0gc3RyaW5nSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwogICAgIGVsc2UgaWYgKEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yID0ganNEeW5hbWljQ2Fz
dDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIGl0ZXJhdG9yID0g
cHJvcGVydHlOYW1lSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoSlNPYmplY3QqIGl0ZXJhdG9yT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZh
bHVlKSkgewpAQCAtNTI1LDE4ICs1MjksMTggQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6aXRlcmF0b3JFbgogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlclRvRmV0Y2g7
ICsraSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0
b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTVmFs
dWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0phdmFT
Y3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIEpTVmFs
dWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZVcKICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3Ry
aW5nLiIpKTsKIAogICAgIFN0cmluZyBzY3JpcHQgPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2
ICsxMTksOSBAQCBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhCiAKIHN0
YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb21FeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QsIGludCogbGluZU51bWJlciwg
aW50KiBjb2x1bW5OdW1iZXIsIFN0cmluZyogc291cmNlVVJMKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3Rvcjog
U2hvdWxkIG5vdCBuZWVkIHRvIGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9u
cwogICAgIEpTVmFsdWUgbGluZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3QoZXhl
Yy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKICAgICAqbGlu
ZU51bWJlciA9IGxpbmVWYWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKSA/IGludChsaW5lVmFs
dWUudG9OdW1iZXIoZXhlYykpIDogMDsKQEAgLTEyNiw3ICsxMjksNyBAQCBzdGF0aWMgdm9pZCBl
eHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgKmNvbHVtbk51bWJlciA9IGNvbHVtblZh
bHVlICYmIGNvbHVtblZhbHVlLmlzTnVtYmVyKCkgPyBpbnQoY29sdW1uVmFsdWUudG9OdW1iZXIo
ZXhlYykpIDogMDsKICAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVlID0gZXhjZXB0aW9uT2JqZWN0
LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic291
cmNlVVJMIikpOwogICAgICpzb3VyY2VVUkwgPSBzb3VyY2VVUkxWYWx1ZSAmJiBzb3VyY2VVUkxW
YWx1ZS5pc1N0cmluZygpID8gc291cmNlVVJMVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpIDogQVNDSUlMaXRlcmFsKCJ1bmRlZmluZWQiKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIFJlZjxTY3JpcHRDYWxsU3Rh
Y2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJKHJl
dmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNo
ZWRDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICAgICAgbV9jbG9zdXJlID0gbV9pbnRlcnByZXRlci0+cHJlcGFyZUZvclJl
cGVhdENhbGwoZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUsICZtX3Byb3RvQ2Fs
bEZyYW1lLCBmdW5jdGlvbiwgYXJndW1lbnRDb3VudCArIDEsIGZ1bmN0aW9uLT5zY29wZSgpLCBt
X2FyZ3VtZW50cy5kYXRhKCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
dGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgICAgICAgICBt
X3ZhbGlkID0gIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBtX3ZhbGlk
ID0gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU1Zh
bHVlIGNhbGwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTQgKzExNiw2IEBA
IG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gcG9pbnRlciwgc28gdGhlc2UgYXJlIGluZWZm
aWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGluIG5ldyBjb2RlLgogICAgICAg
ICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBzbyB0
aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKLSAgICAgICAgdm9pZCBjbGVh
ckV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckV4Y2VwdGlvbigpOyB9Ci0KLSAgICAgICAgRXhjZXB0
aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9Ci0gICAg
ICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISF2bSgpLmV4Y2VwdGlvbigp
OyB9Ci0KLSAgICAgICAgRXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4g
dm0oKS5sYXN0RXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24o
KSB7IHZtKCkuY2xlYXJMYXN0RXhjZXB0aW9uKCk7IH0KLQogICAgICAgICBBdG9taWNTdHJpbmdU
YWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CiAgICAgICAgIGNvbnN0
IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqdm0oKS5l
bXB0eUxpc3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0
LDcgKzE0NCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIFN0cmluZyBwcm9ncmFtU291cmNlID0g
YXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpAQCAtMTg0LDcgKzE4NCw3IEBAIEpTVmFsdWUg
ZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwgaXQgc2hvdWxkIG5vdCBoYXZlIHRocm93
biBleGNlcHRpb25zLgotICAgICAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2ss
IGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZh
bENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBwcm9ncmFtU291cmNlLCBjYWxs
ZXJTY29wZUNoYWluKTsKIApAQCAtMjI3LDcgKzIyNyw3IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFy
Z3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIGxlbmd0aCA9IGdldExlbmd0aChjYWxs
RnJhbWUsIGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGNh
bGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTY2NiwxMyArNjY2LDE1IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKKyAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFt
ZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIFN1c3BlbmRF
eGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgU3VzcGVuZEV4
Y2VwdGlvblNjb3BlIHNjb3BlKCZ2bSk7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpTRnVu
Y3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5yZXR1
cm5FdmVudChjYWxsRnJhbWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWJ1Z2dlci0+
ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lKTsKLSAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3BlLCAhdGhy
b3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogfQogCkBAIC03NjAsNiArNzYyLDggQEAgcHJp
dmF0ZToKIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5kKFZN
JiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgVW53aW5k
U3RhcnQgdW53aW5kU3RhcnQpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2luZEZyb21DYWxsZXJGcmFtZSkg
ewogICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkgPT0g
dm0udG9wVk1FbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03Nzgs
NyArNzgyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQogICAg
IGlmIChleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkgfHwgKGV4Y2VwdGlvblZhbHVlLmlzQ2VsbCgp
ICYmICFleGNlcHRpb25WYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgIGV4Y2VwdGlvblZhbHVlID0g
anNOdWxsKCk7CiAKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkgJiYgdm0uZXhjZXB0aW9uKCkt
PnN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNlcHRp
b24oKSAmJiBzY29wZS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOwogCiAgICAgLy8gQ2Fs
Y3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFz
IG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7CkBAIC05Nzcs
NyArOTgxLDcgQEAgZmFpbGVkSlNPTlA6CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgogICAg
IEpTVmFsdWUgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLT5leGVjdXRlKCZ2
bSwgJnByb3RvQ2FsbEZyYW1lKTsKLQorICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwpAQCAtMTA0OSw3ICsxMDUzLDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRl
Q29uc3RydWN0KAogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEFTU0VSVCghY2FsbEZyYW1l
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICAvLyBXZSB0aHJvdyBpbiB0
aGlzIGNhc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIHJldHVybiBzb21ldGhpbmcgInZhbGlkIiBidXQg
d2UncmUKICAgICAvLyBhbHJlYWR5IGluIGFuIGludmFsaWQgc3RhdGUuCkBAIC0xMTAwLDEyICsx
MTA0LDEyIEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRv
TmF0aXZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uKSwgJnZtLCAmcHJvdG9DYWxsRnJhbWUpKTsKIAotICAgICAgICAgICAgaWYgKCFjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKExJS0VMWSghdGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzT2Jq
ZWN0KCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBBU1NFUlQocmVzdWx0LmlzT2JqZWN0KCkpOwogICAgIHJldHVybiBj
aGVja2VkUmV0dXJuKGFzT2JqZWN0KHJlc3VsdCkpOwpAQCAtMTExNSw3ICsxMTE5LDcgQEAgQ2Fs
bEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogewogICAgIFZNJiB2bSA9ICpz
Y29wZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIAogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAg
ICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKQEAgLTExNjQsNyArMTE2OCw3IEBAIEpTVmFs
dWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVChzY29wZS0+dm0oKSA9PSAm
Y2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElM
b2NrKCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKQEAgLTEyNzAsNyArMTI3NCw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoTW9kdWxlUHJvZ3IKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEFTU0VSVChzY29wZS0+
dm0oKSA9PSAmY2FsbEZyYW1lLT52bSgpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXND
b2xsZWN0b3JCdXN5KCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKQEAgLTEzMTEs
MTIgKzEzMTUsMTQgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShNb2R1bGVQcm9ncgog
CiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIERlYnVnSG9va0lEIGRlYnVnSG9va0lEKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCk7CiAgICAgaWYgKCFkZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmhhc0RlYnVnZ2VyUmVxdWVzdHMoKSk7Ci0gICAgQVNT
RVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewogICAg
ICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgpAQCAtMTMzOCw3ICsxMzQ0LDcgQEAgTkVWRVJf
SU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbAogICAgICAgICAgICAgZGVidWdnZXIt
PmRpZFJlYWNoQnJlYWtwb2ludChjYWxsRnJhbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7Ci19ICAgIAorICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMxLDE0IEBACiAjZGVmaW5lIElu
dGVycHJldGVyX2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiU291cmNlUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgIlRocm93U2Nv
cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIApAQCAtMTA1LDggKzEwNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUoVk0qIHZtKQogICAgICAgICAgICAgOiBtX3ZtKHZtKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBvbGRFeGNlcHRpb24gPSB2bS0+ZXhjZXB0aW9uKCk7Ci0g
ICAgICAgICAgICB2bS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKCp2bSk7CisgICAgICAgICAgICBvbGRFeGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIH0KICAgICAgICAgflN1c3BlbmRFeGNlcHRpb25TY29wZSgpCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hp
Y2tlbi5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2LDggKzQzNiw5
IEBAIHZvaWQgU2hhZG93Q2hpY2tlbjo6ZHVtcChQcmludFN0cmVhbSYgb3UKIEpTQXJyYXkqIFNo
YWRvd0NoaWNrZW46OmZ1bmN0aW9uc09uU3RhY2soRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGl0ZXJhdGUo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDIwNTM4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDYgKzY5LDcgQEAgdm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29u
c3QgVAogCiBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSog
cHJvdG9DYWxsRnJhbWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKICAgICB2b2lkKiBlbnRyeUFkZHJlc3M7CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihwcm90b0NhbGxGcmFtZS0+Y2FsbGVlKCkpOwog
CkBAIC03OCw3ICs3OSw3IEBAIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0ZShWTSogdm0sIFByb3Rv
Q2EKICAgICB9IGVsc2UKICAgICAgICAgZW50cnlBZGRyZXNzID0gYWRkcmVzc0ZvckNhbGwoTXVz
dENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvSmF2YVNjcmlwdChlbnRyeUFkZHJlc3MsIHZtLCBwcm90
b0NhbGxGcmFtZSkpOwotICAgIHJldHVybiB2bS0+ZXhjZXB0aW9uKCkgPyBqc051bGwoKSA6IHJl
c3VsdDsKKyAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsK
IH0KIAogREZHOjpDb21tb25EYXRhKiBKSVRDb2RlOjpkZmdDb21tb24oKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIGdlbmVyaWNV
bndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhbGxGcmFtZSwgVW53aW5kU3RhcnQgdW53aW5kU3Rh
cnQpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKICAgICBp
ZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrKQpAQCAt
NTgsNyArNTksNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhCiAg
ICAgfQogICAgIHZtLT5zaGFkb3dDaGlja2VuKCkubG9nKCp2bSwgc2hhZG93Q2hpY2tlblRvcEZy
YW1lLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnRocm93UGFja2V0KCkpOwogICAgIAotICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gdm0tPmV4Y2VwdGlvbigpOworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9u
KTsKICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IHZtLT5pbnRlcnByZXRlci0+dW53aW5kKCp2
bSwgY2FsbEZyYW1lLCBleGNlcHRpb24sIHVud2luZFN0YXJ0KTsgLy8gVGhpcyBtYXkgdXBkYXRl
IGNhbGxGcmFtZS4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNyArMjc0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25JbgogICAgIExPR19JQygoSUNFdmVu
dDo6T3BlcmF0aW9uSW5PcHRpbWl6ZSwgYmFzZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
Okhhc1Byb3BlcnR5KTsKICAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9w
ZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwotICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAKICAgICBSRUxFQVNFX0FTU0VSVChhY2Nl
c3NUeXBlID09IHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKQEAgLTQ5OSw2ICs0OTksNyBAQCBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU3RyaW5nT3JTeW1iCiBzdGF0aWMgdm9pZCBwdXRCeVZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2Ny
aXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0g
PSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIGJ5
VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNj
cmlwdC5hc1VJbnQzMigpOwpAQCAtNTIwLDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KENhbGxGcmFtZSogY2FsbEZyYW0KIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Q
cm9wZXJ0eUtleShjYWxsRnJhbWUpOwogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgotICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3lt
Ym9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCkBAIC01
MzIsNiArNTMzLDggQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQog
CiBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmpl
Y3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKIHsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgaXNTdHJpY3RNb2Rl
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgaWYgKExJS0VM
WShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwg
SlNWYWx1ZTo6aXNVSW50MzIgd2lsbCByZXR1cm4gdHJ1ZSBvbmx5IGZvciBwb3NpdGl2ZSBib3hl
ZCBpbnQzMl90OyBhbGwgdGhvc2UgdmFsdWVzIGFyZSB2YWxpZCBhcnJheSBpbmRpY2VzLgpAQCAt
NTYzLDcgKzU2Niw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2EK
IAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhj
ZXB0aW9uLgogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxs
RnJhbWUpOwotICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKE9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7CkBAIC03ODYs
MTQgKzc4OSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiB7
CiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogCisgICAgVk0qIHZtID0gJmV4ZWNDYWxsZWUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKwogICAgIGV4
ZWNDYWxsZWUtPnNldENvZGVCbG9jaygwKTsKICAgICAKICAgICBpZiAoIWlzSG9zdEZ1bmN0aW9u
KGV4ZWNDYWxsZWUtPmNhbGxlZUFzVmFsdWUoKSwgZ2xvYmFsRnVuY0V2YWwpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKLSAgICBWTSogdm0gPSAmZXhlY0Nh
bGxlZS0+dm0oKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV2YWwoZXhlY0NhbGxlZSk7Ci0gICAg
aWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gRW5jb2RlZEpTVmFsdWUoKTsKICAgICAKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC04MTcsNyArODIyLDcgQEAgc3RhdGljIFNsb3dQYXRo
UmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlY0NhbGxlZSk7CiAgICAgICAgICAgICBleGVjQ2FsbGVlLT5zZXRD
YWxsZWUoYXNPYmplY3QoY2FsbGVlKSk7CiAgICAgICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxl
ZSkpOwotICAgICAgICAgICAgaWYgKHZtLT5leGNlcHRpb24oKSkgeworICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBl
bmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwpAQCAtODQ2LDcgKzg1MSw3IEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFu
ZGxlSG9zdENhbGwKICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Y0NhbGxlZSk7CiAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUp
KTsKICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY29u
c3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24oZXhlY0NhbGxlZSkpOwotICAgICAgICBpZiAodm0t
PmV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCiAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKQEAgLTE0NzIsOCArMTQ3NywxMCBAQCBlbnVtIGNsYXNz
IEFjY2Vzc29yVHlwZSB7CiAKIHN0YXRpYyB2b2lkIHB1dEFjY2Vzc29yQnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIGludDMyX3QgYXR0cmli
dXRlLCBKU09iamVjdCogYWNjZXNzb3IsIEFjY2Vzc29yVHlwZSBhY2Nlc3NvclR5cGUpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgYXV0byBwcm9wZXJ0eUtleSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYWNjZXNzb3JU
eXBlID09IEFjY2Vzc29yVHlwZTo6R2V0dGVyKQpAQCAtMTYxOCw4ICsxNjI1LDEwIEBAIHN0YXRp
YyBib29sIGNhbkFjY2Vzc0FyZ3VtZW50SW5kZXhRdWlja2wKIAogc3RhdGljIEpTVmFsdWUgZ2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBz
dWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pOwogICAgICAgICBpZiAoSlNDZWxsOjpjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoc3Ry
dWN0dXJlKSkgewogICAgICAgICAgICAgaWYgKFJlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiBleGlz
dGluZ0F0b21pY1N0cmluZyA9IGFzU3RyaW5nKHN1YnNjcmlwdCktPnRvRXhpc3RpbmdBdG9taWNT
dHJpbmcoZXhlYykpIHsKQEAgLTE2NjEsMTAgKzE2NzAsMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0
QnlWYWwoRXhlY1N0YXRlKiBleGVjLAogICAgIH0KIAogICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2Jq
ZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJU
KGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwpAQCAtMTg1NSw2ICsxODY0LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgCkBAIC0xODcyLDEwICsx
ODgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIHJlc3VsdCA9
IGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHkpOwogICAgIH0KQEAgLTE5MjQsMTAgKzE5MzQs
MTAgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGVsZXRlQnlWYQogICAgIGlmIChr
ZXkuZ2V0VUludDMyKGluZGV4KSkKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRo
b2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChiYXNlT2JqLCBleGVjLCBpbmRleCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IGtleS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNvdWxkRGVsZXRl
ID0gYmFzZU9iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqLCBleGVj
LCBwcm9wZXJ0eSk7CiAgICAgfQpAQCAtMjEzMiw3ICsyMTQyLDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3Bl
LCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250
ZXh0LCBpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsK
ICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogICAgIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbW1vblNs
b3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNj
b3BlLCBnZXRQdXRJbmZvLCBzbG90LCBpZGVudCk7CkBAIC0yMzgzLDExICsyMzkzLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogQUxXQVlTX0lOTElORSBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcm9maWxlZE11bChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikK
IHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJl
cihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJlcihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgKiBiKSk7CkBAIC0yMzk1LDYgKzI0MDYsNyBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByCiAKIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2ZpbGVkTXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
LCBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgYm9vbCBzaG91bGRPYnNlcnZlTEhTQW5kUkhT
VHlwZXMgPSB0cnVlKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBK
U1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIApAQCAtMjQwMiwxMCAr
MjQxNCwxMCBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9mCiAgICAg
ICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZUxIU0FuZFJIUyhvcDEsIG9wMik7CiAKICAgICBkb3Vi
bGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50b051bWJl
cihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsK
QEAgLTI0ODAsMTEgKzI0OTIsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
U3ViKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAt
IGIpKTsKQEAgLTI0OTIsNiArMjUwNSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDk5LDEwICsyNTEzLDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAtIGIpOwpAQCAtMjU5MiwxMyArMjYwNiwxNCBAQCBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2hlY2tJZkV4CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoISF2bS5leGNlcHRpb24oKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkpOwogCi0gICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bS5leGNlcHRp
b24oKSkpIHsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICBnZW5lcmljVW53aW5kKCZ2bSwgZXhlYyk7CiAgICAgICAg
IHJldHVybiAxOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0
dXJuIDA7CiB9CiAKIH0gLy8gZXh0ZXJuICJDIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw3ICs0NSw4IEBAIEluc3RydWN0aW9uKiByZXR1cm5Ub1Rocm93KEV4ZWNTdGF0
ZSogZXgKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJ
TkcKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNl
cHRpb24gIiwgdm0tPmV4Y2VwdGlvbigpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgZGF0YUxvZygiVGhyb3dp
bmcgZXhjZXB0aW9uICIsIHNjb3BlLmV4Y2VwdGlvbigpLCAiIChyZXR1cm5Ub1Rocm93KS5cbiIp
OwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpleGNlcHRpb25JbnN0cnVjdGlvbnMoKTsKIH0K
QEAgLTU1LDcgKzU2LDggQEAgdm9pZCogY2FsbFRvVGhyb3coRXhlY1N0YXRlKiBleGVjKQogICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2
bS0+ZXhjZXB0aW9uKCksICIgKGNhbGxUb1Rocm93KS5cbiIpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9u
ICIsIHNjb3BlLmV4Y2VwdGlvbigpLCAiIChjYWxsVG9UaHJvdykuXG4iKTsKICNlbmRpZgogICAg
IHJldHVybiBMTEludDo6Z2V0Q29kZVB0cihsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9s
aW5lKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDcgKzg4Miw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKIAogICAgIC8vIERvbid0
IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgIGF1
dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgTExJTlRfRU5EKCk7CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0
ZWNvZGVTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE1ICs3OCwxNiBAQCBjb25z
dCBCeXRlY29kZSYgQnl0ZWNvZGVTZXF1ZW5jZTo6Zm9yQnl0CiB2b2lkIEJ5dGVjb2RlU2VxdWVu
Y2U6OmFkZFNlcXVlbmNlUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogaGVhZGVyID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFkZXIuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGhlYWRlci0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhlYywgU3RyaW5nOjpm
cm9tVVRGOChtX2hlYWRlcltpXSkpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmhlYWRlciwgaGVhZGVyKTsKICAgICAKICAgICBKU0FycmF5KiBzZXF1
ZW5jZSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2VxdWVuY2Uuc2l6
ZSgpOyArK2kpCiAgICAgICAgIHNlcXVlbmNlLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Nl
cXVlbmNlW2ldLnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9uLmNwcAkocmV2aXNpb24gMjA1Mzgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjggKzExNSwyOSBAQCB2b2lkIENvbXBpbGF0aW9u
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIENvbXBpbGF0aW9uOjp0b0pTKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2Rlc0lELCBqc051bWJlcihtX2J5dGVjb2Rlcy0+aWQoKSkpOwogICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25L
aW5kLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KHRvQ1N0cmluZyhtX2tpbmQpKSkp
OwogICAgIAogICAgIEpTQXJyYXkqIHByb2ZpbGVkQnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2ZpbGVkQnl0ZWNvZGVzLnNp
emUoKTsgKytpKQogICAgICAgICBwcm9maWxlZEJ5dGVjb2Rlcy0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwgbV9wcm9maWxlZEJ5dGVjb2Rlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1
dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb2ZpbGVkQnl0ZWNvZGVzLCBwcm9m
aWxlZEJ5dGVjb2Rlcyk7CiAgICAgCiAgICAgSlNBcnJheSogZGVzY3JpcHRpb25zID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rlc2NyaXB0aW9u
cy5zaXplKCk7ICsraSkKICAgICAgICAgZGVzY3JpcHRpb25zLT5wdXREaXJlY3RJbmRleChleGVj
LCBpLCBtX2Rlc2NyaXB0aW9uc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVj
dCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRlc2NyaXB0aW9ucywgZGVzY3JpcHRpb25zKTsK
ICAgICAKICAgICBKU0FycmF5KiBjb3VudGVycyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
MCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBm
b3IgKGF1dG8gaXQgPSBtX2NvdW50ZXJzLmJlZ2luKCksIGVuZCA9IG1fY291bnRlcnMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBKU09iamVjdCogY291bnRlckVudHJ5ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkBAIC0xNDcsMTQgKzE0OCwxNCBAQCBKU1ZhbHVlIENv
bXBpbGF0aW9uOjp0b0pTKEV4ZWNTdGF0ZSogZXhlCiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb3VudGVycywgY291bnRlcnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV4aXRTaXRlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9vc3JFeGl0U2l0ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV4aXRTaXRl
cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9vc3JFeGl0U2l0ZXNbaV0udG9KUyhleGVjKSk7
CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5vc3JFeGl0
U2l0ZXMsIGV4aXRTaXRlcyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdHMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3NyRXhpdHMuc2l6ZSgp
OyArK2kpCiAgICAgICAgIGV4aXRzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4aXRz
W2ldLnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1By
b2ZpbGVyRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsMjQgKzEwMCwyNSBAQCB2b2lkIERhdGFiYXNlOjphZGRDb21waWxhdGlvbihD
b2RlQmxvY2sqCiBKU1ZhbHVlIERhdGFiYXNlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7CiAgICAgCiAgICAgSlNBcnJheSogYnl0ZWNvZGVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J5dGVjb2Rlcy5zaXplKCk7ICsr
aSkKICAgICAgICAgYnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX2J5dGVjb2Rl
c1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmJ5dGVjb2RlcywgYnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5KiBjb21w
aWxhdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY29tcGlsYXRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBjb21waWxhdGlvbnMtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fY29tcGlsYXRpb25zW2ldLT50b0pTKGV4ZWMpKTsKICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBpbGF0aW9u
cywgY29tcGlsYXRpb25zKTsKICAgICAKICAgICBKU0FycmF5KiBldmVudHMgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXZlbnRzLnNpemUoKTsg
KytpKQogICAgICAgICBldmVudHMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZXZlbnRzW2ld
LnRvSlMoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlck9TUkV4aXRTaXRlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw4ICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgUHJv
ZmlsZXIgewogSlNWYWx1ZSBPU1JFeGl0U2l0ZTo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVBZGRyZXNzZXMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwganNTdHJpbmcoZXhl
YywgdG9TdHJpbmcoUmF3UG9pbnRlcihtX2NvZGVBZGRyZXNzZXNbaV0pKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlck9yaWdpblN0
YWNrLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCArMTAx
LDkgQEAgdm9pZCBPcmlnaW5TdGFjazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogSlNWYWx1ZSBP
cmlnaW5TdGFjazo6dG9KUyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0YWNrLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNiArMTk2LDkgQEAgZW51bSBjbGFzcyBTcGVjaWVz
Q29uc3RydWN0UmVzdWx0IHsKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNp
ZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0Kj4gc3BlY2llc0NvbnN0cnVjdEFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIHVuc2lnbmVkIGxlbmd0aCkKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIEVDTUEgOS40LjIuMzogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKExJS0VMWShpc0FycmF5KGV4ZWMsIHRoaXNPYmplY3Qp
KSkgewpAQCAtMjA1LDcgKzIwOCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxT
cGVjaWVzQ28KICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3Ry
dWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7CiAKICAgICAgICAgY29uc3RydWN0b3IgPSB0
aGlzT2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNw
ZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAgICAgICAgIGlmIChj
b25zdHJ1Y3Rvci5pc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBjb25z
dHJ1Y3Rvck9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNvbnN0cnVjdG9yKTsKQEAgLTIxNCwx
MiArMjE3LDEyIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHN0ZDo6cGFpcjxTcGVjaWVzQ28KICAg
ICAgICAgfQogICAgICAgICBpZiAoY29uc3RydWN0b3IuaXNPYmplY3QoKSkgewogICAgICAgICAg
ICAgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnNwZWNpZXNTeW1ib2wpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhj
ZXB0aW9uLCBudWxscHRyKTsKICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc051bGwoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RmFzdFBhdGgsIG51bGxwdHIpOzsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVz
dWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZp
bmVkKCkpCkBAIC0yMjgsNyArMjMxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWly
PFNwZWNpZXNDbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBl
bmQoanNOdW1iZXIobGVuZ3RoKSk7CiAgICAgSlNPYmplY3QqIG5ld09iamVjdCA9IGNvbnN0cnVj
dChleGVjLCBjb25zdHJ1Y3RvciwgYXJncywgIlNwZWNpZXMgY29uc3RydWN0aW9uIGRpZCBub3Qg
Z2V0IGEgdmFsaWQgY29uc3RydWN0b3IiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7
CiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0
ZWRPYmplY3QsIG5ld09iamVjdCk7CiB9CkBAIC0yODQsMTAgKzI4NywxMCBAQCB2b2lkIHNoaWZ0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoCiAgICAgICAgIHVuc2lnbmVkIGZyb20gPSBr
ICsgY3VycmVudENvdW50OwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudDsK
ICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBm
cm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1
ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgdG8pKSB7CiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5LiIpKTsKQEAgLTMzMCwzMSArMzMzLDMyIEBAIHZvaWQgdW5zaGlmdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiAKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291
bnQgLSAxOwogICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CiAgICAg
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgZnJvbSkp
IHsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCB0bywgdmFsdWUsIHRy
dWUpOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJv
cGVydHkuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1Ro
aXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICAvLyAxLiBMZXQgYXJyYXkgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIFRvT2JqZWN0IG9uIHRoZSB0aGlzIHZhbHVlLgogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIAogICAgIC8vIDIuIExldCBmdW5jIGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYXJyYXkgd2l0aCBhcmd1bWVu
dCAiam9pbiIuCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IEpTVmFsdWUodGhpc09iamVjdCkuZ2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5qb2luKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBJ
ZiBJc0NhbGxhYmxlKGZ1bmMpIGlzIGZhbHNlLCB0aGVuIGxldCBmdW5jIGJlIHRoZSBzdGFuZGFy
ZCBidWlsdC1pbiBtZXRob2QgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAoMTUuMi40LjIpLgpA
QCAtMzgzLDE4ICszODcsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVhcmx5UmV0dXJuVmFsdWUpOwog
CiAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKCpleGVjLCAnLCcsIGxlbmd0aCk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IHRoaXNBcnJheS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAg
ICBpZiAoIWVsZW1lbnQpIHsKICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzQXJyYXktPmdldChl
eGVjLCBpKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgam9pbmVyLmFwcGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIApAQCAtNDAzLDE0ICs0MDcsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
OwogCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iamVjdCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIoZXhlYywgdGhpc09iamVj
dCk7CkBAIC00MTgsNTIgKzQyNCw1MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1
ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4ZWMsICcsJywgbGVuZ3Ro
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogI2lmIEVOQUJMRShJTlRMKQogICAgIEFyZ0xpc3QgYXJndW1lbnRzKGV4ZWMpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1Zh
bHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAg
IGVsZW1lbnQgPSBqc0VtcHR5U3RyaW5nKGV4ZWMpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShjb252ZXJzaW9uRnVuY3Rpb24sIGNhbGxEYXRhKTsKICAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAg
ICAgIGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBlbGVtZW50LCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFw
cGVuZCgqZXhlYywgZWxlbWVudCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogI2Vsc2UgLy8gIUVO
QUJMRShJTlRMKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKGVsZW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1ZhbHVlIGNvbnZlcnNpb25GdW5jdGlv
biA9IGVsZW1lbnQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmlu
Zyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAg
ICAgIGVsZW1lbnQgPSBjYWxsKGV4ZWMsIGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBlbGVtZW50LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgc3RyaW5nSm9pbmVyLmFwcGVuZCgqZXhlYywgZWxl
bWVudCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogI2VuZGlmIC8vICFFTkFCTEUoSU5UTCkKQEAg
LTQ5OCwxNSArNTA0LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBob2xlc011c3RGb3J3YXJkVG9Q
cm8KIAogc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNTdHJpbmcqIHNlcGFyYXRvciwgdWludDY0X3QgbGVuZ3RoKQogeworICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyA1LiBJZiBsZW4gaXMgemVybywgcmV0dXJuIHRoZSBlbXB0eSBTdHJp
bmcuCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgIHJldHVybiBqc0VtcHR5U3RyaW5nKCZleGVj
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKLQogICAgIC8vIDYuIExldCBlbGVtZW50MCBi
ZSBHZXQoTywgIjAiKS4KICAgICBKU1ZhbHVlIGVsZW1lbnQwID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJmV4ZWMsIDApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgLy8g
Ny4gSWYgZWxlbWVudDAgaXMgdW5kZWZpbmVkIG9yIG51bGwsIGxldCBSIGJlIHRoZSBlbXB0eSBT
dHJpbmc7IG90aGVyd2lzZSwgbGV0IFIgYmUgPyBUb1N0cmluZyhlbGVtZW50MCkuCkBAIC01MTUs
NyArNTIyLDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAg
ICAgICByID0ganNFbXB0eVN0cmluZygmZXhlYyk7CiAgICAgZWxzZQogICAgICAgICByID0gZWxl
bWVudDAudG9TdHJpbmcoJmV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
CiAgICAgLy8gOC4gTGV0IGsgYmUgMS4KQEAgLTUyNCw3ICs1MzEsNyBAQCBzdGF0aWMgSlNWYWx1
ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgZm9yICh1aW50NjRfdCBrID0gMTsgayA8
IGxlbmd0aDsgKytrKSB7CiAgICAgICAgIC8vIGIuIExldCBlbGVtZW50IGJlID8gR2V0KE8sICEg
VG9TdHJpbmcoaykpLgogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqZWN0LT5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsIEF0b21pY1N0cmluZzo6bnVtYmVy
KGspKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAg
ICAgICAgLy8gYy4gSWYgZWxlbWVudCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IG5leHQgYmUg
dGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgbmV4dCBiZSA/IFRvU3RyaW5nKGVsZW1l
bnQpLgpAQCAtNTM1LDcgKzU0Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0
ZSYgZXhlYywKICAgICAgICAgICAgIG5leHQgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBuZXh0ID0gZWxlbWVudC50b1N0cmluZygmZXhlYyk7Ci0g
ICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAgICAgLy8g
YS4gTGV0IFMgYmUgdGhlIFN0cmluZyB2YWx1ZSBwcm9kdWNlZCBieSBjb25jYXRlbmF0aW5nIFIg
YW5kIHNlcC4KQEAgLTU2MSw2ICs1NjgsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuVXNlRmFz
dEpvaW4oY29uc3QgCiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUm
IHN0YXRlLCBKU09iamVjdCogdGhpc09iamVjdCwgU3RyaW5nVmlldyBzZXBhcmF0b3IsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgog
ICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOiB7CkBAIC01NjgsNyArNTc4LDcgQEAg
c3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVu
Z3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAg
ICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXMoKS5kYXRhKCk7CiAgICAgICAgIGJv
b2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAtNTkyLDcgKzYwMiw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgaWYgKGxlbmd0aCA+IGJ1
dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBKU1N0
cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRvciwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGF1dG8g
ZGF0YSA9IGJ1dHRlcmZseS5jb250aWd1b3VzRG91YmxlKCkuZGF0YSgpOwogICAgICAgICBib29s
IGhvbGVzS25vd25Ub0JlT0sgPSBmYWxzZTsKQEAgLTYwMiw3ICs2MTIsNyBAQCBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgICAgICAgICAgam9pbmVyLmFw
cGVuZChzdGF0ZSwganNEb3VibGVOdW1iZXIodmFsdWUpKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmICghaG9sZXNLbm93blRvQmVPSykgewotICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlKHN0YXRlLnZtKCkpLT5ob2xlc011c3RGb3J3
YXJkVG9Qcm90b3R5cGUoc3RhdGUudm0oKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKICAgICAgICAgICAgICAg
ICAgICAgaG9sZXNLbm93blRvQmVPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE1
LDE0ICs2MjUsMTQgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQog
CiBnZW5lcmFsQ2FzZToKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoc3RhdGUsIHNlcGFyYXRv
ciwgbGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBqb2lu
ZXIuYXBwZW5kKHN0YXRlLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIHJldHVybiBqb2luZXIuam9pbihz
dGF0ZSk7CkBAIC02MzAsNiArNjQwLDkgQEAgZ2VuZXJhbENhc2U6CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDEuIExldCBPIGJlID8gVG9PYmplY3QodGhpcyB2YWx1ZSkuCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCF0aGlzT2JqZWN0KQpAQCAtNjQx
LDcgKzY1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
ICAgIC8vIDIuIExldCBsZW4gYmUgPyBUb0xlbmd0aCg/IEdldChPLCAibGVuZ3RoIikpLgogICAg
IGRvdWJsZSBsZW5ndGggPSB0b0xlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gMy4g
SWYgc2VwYXJhdG9yIGlzIHVuZGVmaW5lZCwgbGV0IHNlcGFyYXRvciBiZSB0aGUgc2luZ2xlLWVs
ZW1lbnQgU3RyaW5nICIsIi4KQEAgLTY1Myw3ICs2NjYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGg2NCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihsZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19j
YXN0PGRvdWJsZT4obGVuZ3RoNjQpID09IGxlbmd0aCk7CiAgICAgICAgICAgICBKU1N0cmluZyog
anNTZXBhcmF0b3IgPSBqc1NpbmdsZUNoYXJhY3RlclN0cmluZyhleGVjLCBjb21tYSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShz
bG93Sm9pbigqZXhlYywgdGhpc09iamVjdCwganNTZXBhcmF0b3IsIGxlbmd0aDY0KSk7CkBAIC02
NjYsNyArNjc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
CiAgICAgLy8gNC4gTGV0IHNlcCBiZSA/IFRvU3RyaW5nKHNlcGFyYXRvcikuCiAgICAgSlNTdHJp
bmcqIGpzU2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBpZiAoVU5MSUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpIHx8ICFjYW5Vc2VGYXN0Sm9pbih0aGlzT2JqZWN0KSkpIHsKQEAgLTY5Miw3ICs3MDUsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlz
T2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1
ZSByZXN1bHQ7CkBAIC03MDEsNyArNzE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHJlc3VsdCA9IHRoaXNPYmotPmdldChleGVjLCBsZW5ndGggLSAxKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCBsZW5ndGggLSAxKSkgewogICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRl
bGV0ZSBwcm9wZXJ0eS4iKSk7CkBAIC03MTQsNiArNzI3LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jUHVzaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9k
ZSk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNWYWx1ZSkgJiYgZXhlYy0+YXJndW1lbnRDb3Vu
dCgpID09IDEpIHsKQEAgLTcyNiw3ICs3NDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKCF0aGlzT2JqKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0TGVuZ3RoKGV4
ZWMsIHRoaXNPYmopOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGV4ZWMtPmFy
Z3VtZW50Q291bnQoKTsgbisrKSB7CkBAIC03MzgsNyArNzUzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIEpTVmFsdWUoc3RhdGljX2Nhc3Q8
aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pKS50b1dURlN0cmluZyhl
eGVjKSk7CiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSgpLT5wdXQodGhpc09iaiwg
ZXhlYywgcHJvcGVydHlOYW1lLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkBAIC03NTcsNyArNzcyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iamVjdCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5n
VHlwZSgpKSB7CkBAIC03OTgsNDEgKzgxMyw0MSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgZm9yICh1bnNpZ25lZCBsb3dlciA9IDA7IGxvd2VyIDwgbWlk
ZGxlOyBsb3dlcisrKSB7CiAgICAgICAgIHVuc2lnbmVkIHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIg
LSAxOwogICAgICAgICBib29sIGxvd2VyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgbG93ZXIpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBKU1ZhbHVlIGxvd2VyVmFsdWU7CiAgICAg
ICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAgbG93ZXJWYWx1ZSA9IHRoaXNPYmpl
Y3QtPmdldChleGVjLCBsb3dlcik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCB1cHBlckV4aXN0cyA9IHRoaXNPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIEpTVmFsdWUgdXBw
ZXJWYWx1ZTsKICAgICAgICAgaWYgKHVwcGVyRXhpc3RzKSB7CiAgICAgICAgICAgICB1cHBlclZh
bHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHVwcGVyKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgbG93ZXIsIHVwcGVyVmFs
dWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4
ZWMsIGxvd2VyKSkgewotICAgICAgICAgICAgaWYgKCF2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4i
KSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAobG93ZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdXBwZXIsIGxvd2VyVmFsdWUsIHRydWUpOwotICAg
ICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmplY3QtPm1ldGhvZFRhYmxl
KHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIHVwcGVyKSkgewot
ICAgICAgICAgICAgaWYgKCF2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KQEAgLTg0Miwx
MSArODU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBp
ZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTg1Niw3ICs4NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhp
c09iai0+Z2V0SW5kZXgoZXhlYywgMCk7CiAgICAgICAgIHNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291
bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgcHV0TGVuZ3RoKGV4ZWMsIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEp
KTsKICAgICB9CkBAIC04NjcsMTEgKzg4NCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiB7CiAgICAgLy8gaHR0cDovL2RldmVsb3Blci5uZXRzY2FwZS5jb20v
ZG9jcy9tYW51YWxzL2pzL2NsaWVudC9qc3JlZi9hcnJheS5odG0jMTE5MzcxMyBvciAxNS40LjQu
MTAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5z
aWduZWQgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDAs
IGxlbmd0aCk7CkBAIC04OTIsMTQgKzkxMCwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwog
ICAgIGVsc2UgewogICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIGVuZCAtIGJlZ2luKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgbiA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywg
bisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHYpCiAgICAgICAgICAgICByZXN1bHQt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIG4sIHYpOwpAQCAtOTE5LDcgKzkzNyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudENvdW50KCkpIHsKQEAgLTkzMiw3ICs5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0
LnNlY29uZDsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgfQogCkBAIC05NjcsMTIgKzk4NSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2luKTsKLSAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIHYsIHRydWUpOwotICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKQEAgLTk4Miw3ICsxMDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAw
OyBrIDwgZGVsZXRlQ291bnQ7ICsraykgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGsgKyBiZWdpbik7Ci0gICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghdikp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTk0LDE2ICsxMDEyLDE2IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB1bnNpZ25lZCBhZGRp
dGlvbmFsQXJncyA9IHN0ZDo6bWF4PGludD4oZXhlYy0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7
CiAgICAgaWYgKGFkZGl0aW9uYWxBcmdzIDwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8
SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRlbGV0
ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fSBlbHNlIGlmIChhZGRpdGlvbmFsQXJncyA+IGRlbGV0ZUNvdW50KSB7CiAgICAgICAgIHVuc2hp
ZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNwbGljZT4oZXhlYywgdGhpc09iaiwgYmVnaW4sIGRl
bGV0ZUNvdW50LCBhZGRpdGlvbmFsQXJncywgbGVuZ3RoKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhZGRpdGlvbmFsQXJnczsgKytrKSB7
CiAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgayArIGJlZ2luLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudChrICsgMiksIHRydWUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICB9CiAKQEAgLTEwMTMsMjQgKzEwMzEsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTUuNC40
LjEzCiAKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhl
eGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBuckFyZ3Mg
PSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewogICAgICAgICB1bnNo
aWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJB
cmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsg
PSAwOyBrIDwgbnJBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGlu
ZShleGVjLCBrLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdz
KTsKQEAgLTEwNDAsMjYgKzEwNjAsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5j
SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxNS40LjQu
MTQKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAg
ICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xMDY4LDYgKzEwOTAsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyAxNS40LjQuMTUKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmopCkBAIC0xMDg5LDE4ICsxMTE0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZG8g
ewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFs
dWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo
SlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0gd2hpbGUgKGluZGV4LS0pOwogCkBAIC0xMTA5LDIzICsxMTMzLDI1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogc3RhdGljIGJvb2wgbW92
ZUVsZW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2ln
bmVkIHRhcmdldE9mZnNldCwgSlNBcnJheSogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgp
CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYg
KExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdlKHNvdXJjZS0+aW5kZXhpbmdUeXBlKCkpICYmICFz
b3VyY2UtPnN0cnVjdHVyZSgpLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKSkgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzb3VyY2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsK
ICAgICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXRQcm9wZXJ0eShleGVjLCBzb3VyY2UsIGkpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAg
ICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCAr
IGksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTUzLDcg
KzExNzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4CiAKICAg
ICBpZiAoIXJlc3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCkpIHsKICAgICAg
ICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJy
YXlTaXplKSkgewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTk3LDEyICsxMjIz
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICBJbmRl
eGluZ1R5cGUgdHlwZSA9IGZpcnN0QXJyYXktPm1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhz
ZWNvbmRBcnJheS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIGlmICh0eXBlID09IE5vbkFycmF5IHx8
ICFmaXJzdEFycmF5LT5jYW5GYXN0Q29weSh2bSwgc2Vjb25kQXJyYXkpIHx8IGZpcnN0QXJyYXlT
aXplICsgc2Vjb25kQXJyYXlTaXplID49IE1JTl9TUEFSU0VfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBm
aXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgICAgICBpZiAoIW1v
dmVFbGVtZW50cyhleGVjLCB2bSwgcmVzdWx0LCAwLCBmaXJzdEFycmF5LCBmaXJzdEFycmF5U2l6
ZSkKICAgICAgICAgICAgIHx8ICFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgZmlyc3RB
cnJheVNpemUsIHNlY29uZEFycmF5LCBzZWNvbmRBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQodm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEyICs0OCwxNCBAQCB2b2lkIEJvb2xlYW5Db25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oCiAvLyBFQ01BIDE1LjYuMgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0V2l0aEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBib29sZWFuID0ganNCb29sZWFuKGV4ZWMtPmFyZ3VtZW50KDAp
LnRvQm9vbGVhbihleGVjKSk7CiAgICAgU3RydWN0dXJlKiBib29sZWFuU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgp
LT5ib29sZWFuT2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9v
bGVhbk9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGJvb2xlYW5TdHJ1Y3R1cmUpOwotICAgIG9i
ai0+c2V0SW50ZXJuYWxWYWx1ZShleGVjLT52bSgpLCBib29sZWFuKTsKKyAgICBCb29sZWFuT2Jq
ZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUodm0sIGJvb2xlYW5TdHJ1Y3R1cmUpOwor
ICAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgYm9vbGVhbik7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ2FsbERhdGEuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEwICs0MiwxMiBAQCBK
U1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1CiAKIEpTVmFsdWUgY2FsbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlIGNhbGxUeXBl
LCBjb25zdCBDYWxsRGF0YSYgY2FsbERhdGEsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdM
aXN0JiBhcmdzLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUu
ZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YXRjaFNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeworICAgIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorQ2F0Y2hTY29wZTo6Q2F0Y2hTY29wZShWTSYg
dm0sIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCisgICAgOiBFeGNlcHRpb25TY29w
ZSh2bSwgRXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeSwgbG9jYXRpb24pCit7Cit9CisK
K0NhdGNoU2NvcGU6On5DYXRjaFNjb3BlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1f
dG9wRXhjZXB0aW9uU2NvcGUpOworCisgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJ
c1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9j
YXRpb24pOworICAgIAorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAg
ICAgICAgbG9nRXZlbnRIZWFkZXIoRXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCisgICAgICAg
ICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzV2l0aFN0YWNr
VHJhY2VzKQorICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQoIW1fdm0uZXhjZXB0aW9uKCkpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhdGNoU2NvcGVfaAorI2RlZmluZSBDYXRjaFNj
b3BlX2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvblNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
ICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorY2xh
c3MgQ2F0Y2hTY29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQ2F0Y2hTY29wZShWTSYsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0gZGVsZXRlOworICAgIENhdGNoU2Nv
cGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q2F0
Y2hTY29wZSgpOworCisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpCisgICAgeworICAgICAgICBt
X3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrID0gZmFsc2U7CisgICAgICAgIG1fdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICB9Cit9OworCisjZGVmaW5lIERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm1fXykg
XAorICAgIEpTQzo6Q2F0Y2hTY29wZSgodm1fXyksIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlv
bihfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykpCisKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworY2xhc3MgQ2F0Y2hTY29wZSA6IHB1
YmxpYyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSBDYXRjaFNj
b3BlKFZNJiB2bSkKKyAgICAgICAgOiBFeGNlcHRpb25TY29wZSh2bSkKKyAgICB7IH0KKyAgICBD
YXRjaFNjb3BlKGNvbnN0IENhdGNoU2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBDYXRjaFNjb3BlKENh
dGNoU2NvcGUmJikgPSBkZWZhdWx0OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkgeyBtX3ZtLmNsZWFyRXhjZXB0aW9uKCk7IH0KK307CisKKyNkZWZpbmUgREVDTEFS
RV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSkKKworI2Vu
ZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIENhdGNoU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDUz
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVm
aW5lIEJFR0lOX05PX1NFVF9QQygpIFwKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYykKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7IFwKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsgXAorICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KQogCiAjaWZuZGVmIE5ERUJVRwogI2RlZmluZSBTRVRfUENfRk9SX1NUVUJTKCkgZG8geyBcCkBA
IC05OSwxMCArMTAxLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIENIRUNLX0VYQ0VQ
VElPTigpIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6
aW5nSWZFbmFibGVkKGV4ZWMsICJDb21tb25TbG93UGF0aHMiLCBwYyk7ICAgXAotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKSB7ICAgICAgICAgICBcCi0gICAgICAgICAgICBS
RVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKSB7ICAgXAorICAgICAgICAgICAgUkVUVVJO
X1RPX1RIUk9XKGV4ZWMsIHBjKTsgICAgICAgICAgICBcCiAgICAgICAgICAgICBFTkRfSU1QTCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZp
bmUgRU5EKCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0NCw3ICsxNDYsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNkZWZpbmUgQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgcGMp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgRXhlY1N0YXRlKiBjY2VF
eGVjID0gKGV4ZWMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
SW5zdHJ1Y3Rpb24qIGNjZVBDID0gKHBjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIENBTExfRU5E
X0lNUEwoY2NlRXhlYywgTExJbnQ6OmNhbGxUb1Rocm93KGNjZUV4ZWMpKTsgICAgIFwKICAgICB9
IHdoaWxlIChmYWxzZSkKIApAQCAtNDI3LDcgKzQyOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9tdWwpCiAgICAgSlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNW
YWx1ZSByaWdodCA9IE9QX0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSByaWdodC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzTnVtYmVyKGEgKiBiKTsKQEAgLTQ0Miw3ICs0NDQsNyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfc3ViKQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwog
ICAgIEpTVmFsdWUgcmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxl
ZnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihK
U1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7CiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC00NTcsMTAgKzQ1OSwxMCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZGl2KQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNW
YWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3Vi
bGUgYSA9IGxlZnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAvIGIpOwogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElO
RyhyZXN1bHQsIHsKQEAgLTQ3Miw3ICs0NzQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bW9kKQogewogICAgIEJFR0lOKCk7CiAgICAgZG91YmxlIGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50
b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsK
ICAgICBSRVRVUk4oanNOdW1iZXIoanNNb2QoYSwgYikpKTsKQEAgLTQ4MiwxMCArNDg0LDEwIEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wb3cpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBS
RVRVUk4oSlNWYWx1ZSgpKTsKICAgICBSRVRVUk4oanNOdW1iZXIob3BlcmF0aW9uTWF0aFBvdyhh
LCBiKSkpOwogfQpAQCAtNDk0LDcgKzQ5Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9s
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPDwgKGIgJiAzMSkpKTsKQEAgLTUwNCw3ICs1MDYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcnNoaWZ0KQogewogICAgIEJFR0lOKCk7CiAg
ICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9
IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihh
ID4+IChiICYgMzEpKSk7CkBAIC01MTQsNyArNTE2LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Vyc2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICB1aW50MzJfdCBhID0gT1BfQygyKS5q
c1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJF
VFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b1VJ
bnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+
PiAoYiAmIDMxKSkpKTsKQEAgLTUzMSw3ICs1MzMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfYml0YW5kKQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1Zh
bHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJO
KEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9JbnQzMihl
eGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSAmIGIpKTsKQEAgLTU0MSw3ICs1NDMsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0b3IpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQz
Ml90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBPUF9DKDMp
LmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhIHwgYikpOwpA
QCAtNTUxLDcgKzU1Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXR4b3IpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAg
ICBpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVS
Tihqc051bWJlcihhIF4gYikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw3ICs4Nyw3IEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAg
ICAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3BlcnR5KGV4ZWMsIGkpOwogCiAgICAgYXV0byBw
cm9wZXJ0eSA9IHByb3BOYW1lLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHNFeGNlcHRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHNFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdm9pZCBpbnRlcnByZXRlclRocm93SW5DYWxsZXIo
RXhlY1N0YXRlKgogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGVycm9yKTsKICNp
ZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlv
biAiLCB2bS0+ZXhjZXB0aW9uKCksICIuXG4iKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNl
cHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIuXG4iKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24g
MjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDE2ICs4NywxOSBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4
KEV4ZWNTdGF0ZSogZXhlYywgCiAKIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNl
cHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
d3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUo
KSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAogICAgIENvZGVQcm9maWxpbmcgcHJvZmls
ZShzb3VyY2UpOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIHNvdXJjZSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHByb2dyYW0pOwogICAgIGlmICghcHJvZ3JhbSkgewotICAgICAgICByZXR1cm5lZEV4
Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPnZtKCkuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xMDUsOSArMTA4LDkgQEAgSlNWYWx1ZSBldmFsdWF0
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0
PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4
ZWMsIHRoaXNPYmopOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAt
MTQ3LDkgKzE1MCwxMSBAQCBzdGF0aWMgU3ltYm9sKiBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50
CiAKIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQVNTRVJUKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKLSAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
LT52YWx1ZSgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3Bl
LmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBkZWZlcnJlZC0+cmVqZWN0
KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CkBAIC0x
NzYsMTcgKzE4MSwxOSBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxl
CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewotICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCku
YXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUo
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdU
YWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwogCi0g
ICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMtPnZt
KCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZSh2
bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUds
b2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0byB0
aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5Lgog
ICAgIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01v
ZHVsZUxvYWRlcjo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0
KTsKIAogICAgIHJldHVybiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFs
T2JqZWN0LCBrZXksIGpzVW5kZWZpbmVkKCksIGluaXRpYXRvcik7CkBAIC0yMTMsMTggKzIyMCwy
MCBAQCBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqCiAKIEpTSW50ZXJu
YWxQcm9taXNlKiBsb2FkTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1ZhbHVlIGluaXRpYXRvcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
d3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUo
KSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAotICAgIFN5bWJvbCoga2V5ID0gY3JlYXRl
U3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZShleGVjLT52bSgpKTsKKyAgICBTeW1ib2wqIGtleSA9
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUodm0pOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsKIAogICAgIC8v
IEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3Ry
eSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KICAgICAvLyBGSVhNRTogSW50cm9kdWNl
IEpTU291cmNlQ29kZSBvYmplY3QgdG8gd3JhcCBhcm91bmQgdGhpcyBzb3VyY2UuCiAgICAgZ2xv
YmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9h
ZGVyOjpTdGF0dXM6OkZldGNoLCBzb3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAg
ICAgcmV0dXJuIGxvYWRNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXksIGpzVW5k
ZWZpbmVkKCksIGluaXRpYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db25zb2xlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NiwxMiArMTk2LDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVu
Y0Fzc2VydChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVu
dCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7
CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBib29sIGNvbmRpdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9v
bGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChjb25kaXRpb24pCkBAIC0yMjUsNiArMjI3LDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yMzYs
NyArMjQwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAg
IH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY2xpZW50LT5w
cm9maWxlKGV4ZWMsIHRpdGxlKTsKQEAgLTI0NSw2ICsyNDksOCBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI1Niw3ICsyNjIsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29u
c3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGVFbmQoZXhl
YywgdGl0bGUpOwpAQCAtMjY1LDYgKzI3MSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjc2LDcgKzI4NCw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBT
dHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGNsaWVudC0+dGFrZUhlYXBTbmFwc2hvdChl
eGVjLCB0aXRsZSk7CkBAIC0yOTIsNiArMzAwLDggQEAgc3RhdGljIFN0cmluZyB2YWx1ZU9yRGVm
YXVsdExhYmVsU3RyaW5nKAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zb2xlUHJvdG9GdW5jVGltZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Q29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25z
b2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMDEsNyArMzExLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRsZSA9IEFTQ0lJTGl0ZXJhbCgi
ZGVmYXVsdCIpOwogICAgIGVsc2UgewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFi
ZWxTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
IApAQCAtMzExLDYgKzMyMSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3Rv
RnVuY1RpbWVFbmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVD
bGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVu
dCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtMzIwLDcgKzMzMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgdGl0bGUgPSAgQVNDSUlMaXRlcmFsKCJkZWZhdWx0
Iik7CiAgICAgZWxzZSB7CiAgICAgICAgIHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmlu
ZyhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBzdGF0
aWMgZG91YmxlIG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzCiBKU09iamVjdCogY29uc3RydWN0
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlu
dCBudW1BcmdzID0gYXJncy5zaXplKCk7CiAKICAgICBkb3VibGUgdmFsdWU7CkBAIC0xNjcsNyAr
MTY4LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICB2YWx1ZSA9IG1pbGxpc2Vjb25kc0Zyb21Db21wb25lbnRzKGV4ZWMsIGFyZ3MsIFdURjo6TG9j
YWxUaW1lKTsKIAogICAgIFN0cnVjdHVyZSogZGF0ZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1RhcmdldCwgZ2xvYmFsT2JqZWN0
LT5kYXRlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZSh2bSwgZGF0ZVN0cnVjdHVyZSwgdmFs
dWUpOwpAQCAtMjAyLDEwICsyMDMsMTIgQEAgQ2FsbFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRD
YWxsRGF0YShKUwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUoZXhlYy0+dm0oKSwgZGF0ZVN0cikpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZSh2bSwgZGF0ZVN0
cikpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0
ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAzLDcgKzYwMyw4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2woRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1Zh
bHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJEYXRlLnByb3RvdHlwZVtTeW1ib2wudG9Qcmlt
aXRpdmVdIGV4cGVjdGVkIHx0aGlzfCB0byBiZSBhbiBvYmplY3QuIik7CkBAIC02MTQsNyArNjE1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgSlNW
YWx1ZSBoaW50VmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHR5cGUgPSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoZXhlYywgaGlu
dFZhbHVlKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgaWYgKHR5cGUgPT0gTm9QcmVmZXJlbmNlKQpAQCAtMTEyMywyMCArMTEy
NCwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsK
ICAgICBKU09iamVjdCogb2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhp
cyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBvYmplY3Qt
PnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGlmICh0aW1lVmFsdWUuaXNOdW1i
ZXIoKSAmJiAhKHRpbWVWYWx1ZS5pc0ludDMyKCkgfHwgc3RkOjppc2Zpbml0ZSh0aW1lVmFsdWUu
YXNEb3VibGUoKSkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
IAotICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+dG9JU09TdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b0lTT1N0cmluZyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTExNDUsNyArMTE0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKSk7
CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09WYWx1ZSks
IGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGlmIChy
ZXN1bHQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgidG9JU09TdHJpbmcgZGlkIG5vdCByZXR1cm4gYSBwcmltaXRp
dmUgdmFsdWUiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDkgKzUwLDExIEBAIHZvaWQgRXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0K
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0
aEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDAp
IDoganNVbmRlZmluZWQoKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5l
cnJvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5j
ZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90
aGluZywgZmFsc2UpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDYgKzE1Nyw3IEBAIHZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1MKIFN0
cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIG5hbWVWYWx1ZTsKICAgICBhdXRvIG5hbWVQcm9w
ZXJ0TmFtZSA9IHZtLnByb3BlcnR5TmFtZXMtPm5hbWU7CkBAIC0xNzYsMTQgKzE3NywxNCBAQCBT
dHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAgICAgIH0KICAgICAg
ICAgY3VycmVudE9iaiA9IG9iai0+Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgfQotICAgIEFT
U0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
CiAgICAgU3RyaW5nIG5hbWVTdHJpbmc7CiAgICAgaWYgKCFuYW1lVmFsdWUpCiAgICAgICAgIG5h
bWVTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5h
bWVTdHJpbmcgPSBuYW1lVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xOTIsMTQg
KzE5MywxNCBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAg
UHJvcGVydHlTbG90IG1lc3NhZ2VTbG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlOjpWTUlucXVpcnkpOwogICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXMsIGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0TmFtZSwgbWVzc2FnZVNsb3QpICYmIG1lc3NhZ2VT
bG90LmlzVmFsdWUoKSkKICAgICAgICAgbWVzc2FnZVZhbHVlID0gbWVzc2FnZVNsb3QuZ2V0VmFs
dWUoZXhlYywgbWVzc2FnZVByb3BlcnROYW1lKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIFN0cmluZyBtZXNzYWdl
U3RyaW5nOwogICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICBtZXNzYWdlU3RyaW5nID0g
U3RyaW5nKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDcgKzg1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJv
clByb3RvRgogCiAgICAgLy8gMy4gTGV0IG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm5hbWUiLgogICAg
IEpTVmFsdWUgbmFtZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICAvLyA0LiBJZiBuYW1lIGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbmFt
ZSBiZSAiRXJyb3IiOyBlbHNlIGxldCBuYW1lIGJlIFRvU3RyaW5nKG5hbWUpLgpAQCAtOTQsMTMg
Kzk0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAg
ICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKTsKICAgICBlbHNlIHsKICAgICAg
ICAgbmFtZVN0cmluZyA9IG5hbWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KIAogICAgIC8vIDUuIExldCBtc2cgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm1lc3Nh
Z2UiLgogICAgIEpTVmFsdWUgbWVzc2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubWVzc2FnZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAoc2ljKQpAQCAtMTExLDcgKzExMSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAgICAgbWVz
c2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2UgewogICAgICAgICBtZXNzYWdlU3RyaW5n
ID0gbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50LmgiCisKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBKU0M6OkV4Y2VwdGlvbkV2ZW50IGV2ZW50KQoreworICAgIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZTsKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50
OjpDYXRjaFNjb3BlRW50cnk6CisgICAgICAgIGV2ZW50TmFtZSA9ICJDYXRjaFNjb3BlIEVudHJ5
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50OjpDYXRjaFNj
b3BlRXhpdDoKKyAgICAgICAgZXZlbnROYW1lID0gIkNhdGNoU2NvcGUgRXhpdCI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6TmVlZEV4Y2VwdGlvbkNoZWNr
OgorICAgICAgICBldmVudE5hbWUgPSAiTmVlZCBleGNlcHRpb24gY2hlY2siOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFbnRyeToKKyAg
ICAgICAgZXZlbnROYW1lID0gIlRocm93U2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFeGl0OgorICAgICAgICBldmVu
dE5hbWUgPSAiVGhyb3dTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6
OkV4Y2VwdGlvbkV2ZW50OjpUaHJvdzoKKyAgICAgICAgZXZlbnROYW1lID0gIlRocm93IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgb3V0LnByaW50KGV2ZW50TmFtZSk7Cit9CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVf
VkVSSUZJQ0FUSU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25FdmVudC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisKK25hbWVzcGFj
ZSBKU0MgeworICAgIAorZW51bSBjbGFzcyBFeGNlcHRpb25FdmVudCB7CisgICAgQ2F0Y2hTY29w
ZUVudHJ5LAorICAgIENhdGNoU2NvcGVFeGl0LAorICAgIE5lZWRFeGNlcHRpb25DaGVjaywKKyAg
ICBUaHJvd1Njb3BlRW50cnksCisgICAgVGhyb3dTY29wZUV4aXQsCisgICAgVGhyb3cKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50
U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlv
bkV2ZW50KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKK3sKKyAgICBv
dXQucHJpbnQobG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbG9jYXRpb24uZmlsZSwgIjoi
LCBsb2NhdGlvbi5saW5lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0
aW9uLmgJKHJldmlzaW9uIDIwNTM4MikJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVGhyb3dTY29wZUxvY2F0aW9uLmg6MjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBUaHJvd1Njb3BlTG9jYXRp
b24geworICAgIFRocm93U2NvcGVMb2NhdGlvbigpIHsgfQorICAgIFRocm93U2NvcGVMb2NhdGlv
bihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxp
bmUpCisgICAgICAgIDogZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKKyAgICAgICAgLCBmaWxl
KGZpbGUpCisgICAgICAgICwgbGluZShsaW5lKQorICAgIHsgfQorICAgIAorICAgIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSB7IG51bGxwdHIgfTsKKyAgICBjb25zdCBjaGFyKiBmaWxlIHsgbnVs
bHB0ciB9OworICAgIHVuc2lnbmVkIGxpbmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25FdmVudExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsOSArMjcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotc3RydWN0IFRocm93U2NvcGVM
b2NhdGlvbiB7Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKCkgeyB9Ci0gICAgVGhyb3dTY29wZUxv
Y2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmlsZSwgdW5zaWdu
ZWQgbGluZSkKK3N0cnVjdCBFeGNlcHRpb25FdmVudExvY2F0aW9uIHsKKyAgICBFeGNlcHRpb25F
dmVudExvY2F0aW9uKCkgeyB9CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbihjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiAgICAgICAg
IDogZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKICAgICAgICAgLCBmaWxlKGZpbGUpCiAgICAg
ICAgICwgbGluZShsaW5lKQpAQCAtNDEsMyArNDEsMTEgQEAgc3RydWN0IFRocm93U2NvcGVMb2Nh
dGlvbiB7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisgICAg
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWZu
ZGVmIEV4Y2VwdGlvbkhlbHBlcnNfaAogI2RlZmluZSBFeGNlcHRpb25IZWxwZXJzX2gKIAorI2lu
Y2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvblNjb3BlLmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitF
eGNlcHRpb25TY29wZTo6RXhjZXB0aW9uU2NvcGUoVk0mIHZtLCBFeGNlcHRpb25FdmVudCBlbnRy
eUV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogbV92bSh2bSkK
KyAgICAsIG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcEV4Y2VwdGlvblNjb3BlKQorICAgICwgbV9s
b2NhdGlvbihsb2NhdGlvbikKKyAgICAsIG1fZGVwdGgobV9wcmV2aW91c1Njb3BlID8gbV9wcmV2
aW91c1Njb3BlLT5tX2RlcHRoICsgMSA6IDApCit7CisgICAgbV92bS5tX3RvcEV4Y2VwdGlvblNj
b3BlID0gdGhpczsKKyAgICAKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7
CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKGVudHJ5RXZlbnQsIG1fbG9jYXRpb24pOworICAgICAg
ICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwg
bmVlZHMgY2hlY2siKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAg
ICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9Cit9CisKK0V4Y2VwdGlvblNjb3BlOjp+
RXhjZXB0aW9uU2NvcGUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRp
b25TY29wZSk7CisgICAgbV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlID0gbV9wcmV2aW91c1Njb3Bl
OworfQorCit2b2lkIEV4Y2VwdGlvblNjb3BlOjpsb2dFdmVudChFeGNlcHRpb25FdmVudCBldmVu
dCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKK3sKKyAgICBsb2dFdmVudEhlYWRl
cihldmVudCwgbG9jYXRpb24pOworICAgIGRhdGFMb2coIlxuIik7Cit9CisKK3ZvaWQgRXhjZXB0
aW9uU2NvcGU6OmxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25F
dmVudExvY2F0aW9uIGxvY2F0aW9uKQoreworICAgIGRhdGFMb2coIjwiLCBtX3ZtLm1fZXhjZXB0
aW9uRXZlbnRDb3VudCsrLCAiPiBbIiwgbV9kZXB0aCwgIl0gIiwgZXZlbnQsICI6ICIsIGxvY2F0
aW9uKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25TY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFeGNlcHRpb25TY29wZV9oCisjZGVmaW5lIEV4Y2VwdGlvblNjb3BlX2gKKwor
I2luY2x1ZGUgIlZNLmgiCisKK25hbWVzcGFjZSBKU0MgeworICAgIAorY2xhc3MgRXhjZXB0aW9u
OworICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KKyAgICB1bnNpZ25lZCBkZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVwdGg7
IH0KKyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpCisgICAgeworICAgICAgICBtX3ZtLm1fbmVl
ZEV4Y2VwdGlvbkNoZWNrID0gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigp
OworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBFeGNlcHRpb25TY29wZShWTSYsIEV4Y2Vw
dGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOworICAgIEV4Y2Vw
dGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBkZWxldGU7CisgICAgRXhjZXB0aW9u
U2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0OworICAgIH5FeGNlcHRpb25TY29wZSgp
OworCisgICAgdm9pZCBsb2dFdmVudChFeGNlcHRpb25FdmVudCwgRXhjZXB0aW9uRXZlbnRMb2Nh
dGlvbik7CisgICAgdm9pZCBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisKKyAgICBWTSYgbV92bTsKKyAgICBFeGNlcHRpb25TY29wZSogbV9w
cmV2aW91c1Njb3BlOworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbV9sb2NhdGlvbjsKKyAg
ICB1bnNpZ25lZCBtX2RlcHRoOworfTsKKyAgICAKKyNlbHNlIC8vIG5vdCBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNzIEV4Y2VwdGlvblNjb3BlIHsKK3B1
YmxpYzoKKyAgICBBTFdBWVNfSU5MSU5FIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0K
KyAgICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgeyByZXR1cm4gbV92bS5l
eGNlcHRpb24oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb25T
Y29wZShWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyAgICB7IH0KKyAgICBFeGNlcHRpb25T
Y29wZShjb25zdCBFeGNlcHRpb25TY29wZSYpID0gZGVsZXRlOworICAgIEV4Y2VwdGlvblNjb3Bl
KEV4Y2VwdGlvblNjb3BlJiYpID0gZGVmYXVsdDsKKworICAgIFZNJiBtX3ZtOworfTsKKyAgICAK
KyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhjZXB0aW9uU2NvcGVfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcg
QEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBpbmdFdmFsRQogICAgIH0KIAogICAg
IFN0cnVjdHVyZSogc3ViY2xhc3NTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rpb24sIGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSwgc3ViY2xhc3NTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgIC8vIEVsc2Ugc2V0IHRoZSBsZW5ndGggb3duIHBy
b3BlcnR5IG9mIEYgdG8gMC4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIGlmICh0YXJn
ZXRPYmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpKSB7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgLy8gYS4gTGV0IEwgYmUgdGhlIGxlbmd0
aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5s
aW5lcy5oCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksMTMgKzIx
OSwxNiBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmRlZmluZU93blByCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUeXBlPgogdm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1
bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+KHRoaXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAodGhpc09iamVjdC0+
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpKQogICAgICAgICAgICAgZXhlYy0+cihm
aXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaSArIG9m
ZnNldCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnRE
ZXN0ICsgaSkgPSBnZXQoZXhlYywgaSArIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVy
LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTUgKzczLDE3IEBAIEdldHRl
clNldHRlciogR2V0dGVyU2V0dGVyOjp3aXRoU2V0dGVyKFYKIAogSlNWYWx1ZSBjYWxsR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRlcikKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyBGSVhNRTogU29tZSBjYWxsZXJzIG1heSBpbnZva2UgZ2V0KCkg
d2l0aG91dCBjaGVja2luZyBmb3IgYW4gZXhjZXB0aW9uIGZpcnN0LgogICAgIC8vIFdlIHdvcmsg
YXJvdW5kIHRoYXQgYnkgY2hlY2tpbmcgaGVyZS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCktPnZhbHVlKCk7CiAKICAgICBKU09iamVjdCogZ2V0dGVyID0ganNDYXN0PEdldHRlclNl
dHRlcio+KGdldHRlclNldHRlciktPmdldHRlcigpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldHRlci0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsK
ICAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYmFzZSwg
QXJnTGlzdCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Mywx
MSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdDo6ZGlzCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRhcmdldCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIFN0cmluZyB2YWx1ZSA9IHRhcmdldC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgZGF0YUxvZyh2YWx1ZSwgIlxuIik7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsCiB7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyBXZSBhbGxvdyBuZXdUYXJn
ZXQgPT0gSlNWYWx1ZSgpIGJlY2F1c2UgdGhlIEFQSSBuZWVkcyB0byBiZSBhYmxlIHRvIGNyZWF0
ZSBjbGFzc2VzIHdpdGhvdXQgaGF2aW5nIGEgcmVhbCBKUyBmcmFtZS4KICAgICAvLyBTaW5jZSB3
ZSBkb24ndCBhbGxvdyBzdWJjbGFzc2luZyBpbiB0aGUgQVBJIHdlIGp1c3QgdHJlYXQgbmV3VGFy
Z2V0ID09IEpTVmFsdWUoKSBhcyBuZXdUYXJnZXQgPT0gZXhlYy0+Y2FsbGVlKCkKICAgICBBU1NF
UlQoIW5ld1RhcmdldCB8fCBuZXdUYXJnZXQuaXNDb25zdHJ1Y3RvcigpKTsKQEAgLTExMCwxMyAr
MTExLDEzIEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIAogICAg
ICAgICAgICAgLy8gTm90ZSwgUmVmbGVjdC5jb25zdHJ1Y3QgbWlnaHQgY2F1c2UgdGhlIHByb2Zp
bGUgdG8gY2h1cm4gYnV0IHdlIGRvbid0IGNhcmUuCiAgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZVZhbHVlID0gbmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0pLT5jcmVhdGVJbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0g
bmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBv
bmx5IGhhcHBlbnMgaWYgc29tZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29u
c3RydWN0b3Igd2l0aCBhbm90aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJn
ZXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOSBAQCBzdGF0
aWMgVmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0YShjCiAKIHZvaWQgSW50bENvbGxhdG9y
Ojppbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBsb2NhbGVzLCBK
U1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEwLjEuMSBJbml0
aWFsaXplQ29sbGF0b3IgKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25zKSAoRUNNQS00MDIgMi4w
KQogICAgIC8vIDEuIElmIGNvbGxhdG9yIGhhcyBhbiBbW2luaXRpYWxpemVkSW50bE9iamVjdF1d
IGludGVybmFsIHNsb3Qgd2l0aCB2YWx1ZSB0cnVlLCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCiAgICAgLy8gMi4gU2V0IGNvbGxhdG9yLltbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gdG8g
dHJ1ZS4KQEAgLTE2OSw3ICsxNzIsNyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKEV4CiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXpl
TG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVw
dChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gNS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4KQEAgLTE4MSwxNCArMTg0LDE0IEBA
IHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAgICAgLy8gYS4g
TGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9wdGlvbnMgPSBvcHRp
b25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQo
b3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICAvLyA3LiBMZXQgdSBiZSBHZXRPcHRpb24ob3B0aW9ucywgInVzYWdlIiwgInN0cmlu
ZyIsIMKrInNvcnQiLCAic2VhcmNoIsK7LCAic29ydCIpLgotICAgIFN0cmluZyB1c2FnZVN0cmlu
ZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlO
YW1lcy0+dXNhZ2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIg
XCJzb3J0XCIgb3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7CisgICAgU3RyaW5nIHVzYWdlU3RyaW5n
ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dXNh
Z2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAidXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIg
b3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7CiAgICAgLy8gOC4gUmV0dXJuSWZBYnJ1cHQodSkuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyA5LiBTZXQgY29sbGF0b3IuW1t1c2Fn
ZV1dIHRvIHUuCiAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJzb3J0IikKQEAgLTIxMiw5ICsyMTUs
OSBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gb3B0OwogCiAgICAgLy8gMTMuIExldCBtYXRjaGVyIGJlIEdldE9w
dGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyJsb29rdXAiLCAiYmVz
dCBmaXQiwrssICJiZXN0IGZpdCIpLgotICAgIFN0cmluZyBtYXRjaGVyID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRj
aGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0
aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CisgICAgU3RyaW5n
IG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRj
aGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0
Iik7CiAgICAgLy8gMTQuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gMTUuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0
Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVy
KTsKQEAgLTIzMywxNiArMjM2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IoRXgKICAgICB7CiAgICAgICAgIFN0cmluZyBudW1lcmljU3RyaW5nOwogICAgICAgICBi
b29sIHVzZXNGYWxsYmFjazsKLSAgICAgICAgYm9vbCBudW1lcmljID0gaW50bEJvb2xlYW5PcHRp
b24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bnVtZXJpYywgdXNl
c0ZhbGxiYWNrKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBi
b29sIG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+bnVtZXJpYywgdXNlc0ZhbGxiYWNrKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKCF1c2Vz
RmFsbGJhY2spCiAgICAgICAgICAgICBudW1lcmljU3RyaW5nID0gQVNDSUlMaXRlcmFsKG51bWVy
aWMgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtu
IiksIG51bWVyaWNTdHJpbmcpOwogICAgIH0KICAgICB7Ci0gICAgICAgIFN0cmluZyBjYXNlRmly
c3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5
TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAibG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmly
c3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBcImxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51
bGxwdHIpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIFN0cmlu
ZyBjYXNlRmlyc3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZp
cnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBu
dWxscHRyKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImtmIiksIGNhc2VG
aXJzdCk7CiAgICAgfQpAQCAtMjc3LDkgKzI4MCw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0
aWFsaXplQ29sbGF0b3IoRXgKICAgICBtX251bWVyaWMgPSAocmVzdWx0LmdldChBU0NJSUxpdGVy
YWwoImtuIikpID09ICJ0cnVlIik7CiAKICAgICAvLyAyNC4gTGV0IHMgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJzZW5zaXRpdml0eSIsICJzdHJpbmciLCDCqyJiYXNlIiwgImFjY2VudCIsICJjYXNl
IiwgInZhcmlhbnQiwrssIHVuZGVmaW5lZCkuCi0gICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5n
ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5h
bWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9
LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2Fz
ZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOworICAgIFN0cmluZyBzZW5zaXRpdml0eVN0
cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFjY2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJz
ZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBcImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIs
IG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7CiAgICAgLy8gMjUuIFJldHVybklmQWJydXB0KHMp
LgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjYuIElmIHMgaXMgdW5kZWZp
bmVkLCB0aGVuCiAgICAgLy8gYS4gSWYgdSBpcyAic29ydCIsIHRoZW4gbGV0IHMgYmUgInZhcmlh
bnQiLgpAQCAtMzAwLDExICszMDMsMTEgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogCiAgICAgLy8gMjguIExldCBpcCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImln
bm9yZVB1bmN0dWF0aW9uIiwgImJvb2xlYW4iLCB1bmRlZmluZWQsIGZhbHNlKS4KICAgICBib29s
IHVzZXNGYWxsYmFjazsKLSAgICBib29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5P
cHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+aWdub3JlUHVu
Y3R1YXRpb24sIHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCBpZ25vcmVQdW5jdHVhdGlvbiA9IGlu
dGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQ
dW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAg
ICBpZ25vcmVQdW5jdHVhdGlvbiA9IGZhbHNlOwogICAgIC8vIDI5LiBSZXR1cm5JZkFicnVwdChp
cCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAzMC4gU2V0IGNvbGxhdG9y
LltbaWdub3JlUHVuY3R1YXRpb25dXSB0byBpcC4KICAgICBtX2lnbm9yZVB1bmN0dWF0aW9uID0g
aWdub3JlUHVuY3R1YXRpb247CkBAIC0zMTgsMTEgKzMyMSwxMyBAQCB2b2lkIEludGxDb2xsYXRv
cjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKIHZvaWQgSW50bENvbGxhdG9yOjpjcmVhdGVDb2xs
YXRvcihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEFTU0VSVCghbV9jb2xs
YXRvcik7CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0
aWFsaXplQ29sbGF0b3Ioc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKQEAgLTQxNiw2ICs0MjEsOSBAQCBjb25zdCBjaGFyKiBJbnRs
Q29sbGF0b3I6OnNlbnNpdGl2aXR5U3RyCiAKIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29s
dmVkT3B0aW9ucyhFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTAu
My41IEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAy
LjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3Bl
cnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8vIGNvbnN0cnVjdGVkIGJ5
IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgcHJv
cGVydGllcyB0aGUKQEAgLTQyNywxMCArNDM1LDkgQEAgSlNPYmplY3QqIEludGxDb2xsYXRvcjo6
cmVzb2x2ZWRPcHRpb25zKAogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkQ29sbGF0b3IpIHsKICAg
ICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZzdGF0ZSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9sb2NhbGUpKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCBqc05vbnRyaXZpYWxTdHJpbmco
JnN0YXRlLCBBU0NJSUxpdGVyYWwodXNhZ2VTdHJpbmcobV91c2FnZSkpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxDb2xsYXRv
cihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4xLjIgSW50bC5D
b2xsYXRvciAoW2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEu
IElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBm
dW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8g
Mi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1Rhcmdl
dCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoY29sbGF0
b3IpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxD
b2xsYXRvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+Y29sbGF0b3JTdHJ1Y3R1cmUo
KSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotICAgIEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0
ZShzdGF0ZS0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0g
SW50bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKGNvbGxhdG9y
KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29sbGF0b3IoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpLgpAQCAtMTM3LDEzICsxMzksMTUgQEAgQ2FsbFR5cGUgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmdldENhbAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxD
b2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRl
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4yLjIgSW50bC5Db2xsYXRvci5zdXBwb3J0ZWRM
b2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEu
IExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcyku
CiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2Fs
ZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZB
YnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRl
ZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2FsZXNdXSwgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29s
bGF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAgdm9pZCBJbnRsQ29sbGF0b3JQcm90b3R5cGU6
OmZpbmlzaENyZWF0aQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRs
Q29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAvLyAxMC4zLjQgQ29sbGF0b3IgQ29tcGFyZSBGdW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKICAg
ICAvLyAxLiBMZXQgY29sbGF0b3IgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4gQXNzZXJ0
OiBUeXBlKGNvbGxhdG9yKSBpcyBPYmplY3QgYW5kIGNvbGxhdG9yIGhhcyBhbiBbW2luaXRpYWxp
emVkQ29sbGF0b3JdXSBpbnRlcm5hbCBzbG90IHdob3NlIHZhbHVlIGlzIHRydWUuCkBAIC05MSwx
MyArOTMsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAg
IC8vIDUuIExldCBYIGJlIFRvU3RyaW5nKHgpLgogICAgIEpTU3RyaW5nKiB4ID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChYKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5KS4KICAgICBKU1N0cmluZyogeSA9
IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSk7CiAgICAgLy8gOC4gUmV0dXJuSWZB
YnJ1cHQoWSkuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgLy8gOS4gUmV0dXJuIENvbXBhcmVTdHJpbmdzKGNvbGxhdG9y
LCBYLCBZKS4KQEAgLTEyNSw3ICsxMjcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGxDb2xsYXRvCiAKICAgICAgICAgLy8gYy4gTGV0IGJjIGJlIEJvdW5kRnVuY3Rpb25DcmVh
dGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3VuZENvbXBhcmUgPSBKU0JvdW5kRnVu
Y3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0LCBjb2xs
YXRvciwgbnVsbHB0ciwgMiwgQVNDSUlMaXRlcmFsKCJjb21wYXJlIikpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAg
IC8vIGQuIFNldCBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1dIHRvIGJjLgogICAgICAgICBjb2xs
YXRvci0+c2V0Qm91bmRDb21wYXJlKHZtLCBib3VuZENvbXBhcmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNiArMjE1LDcgQEAgc3RhdGlj
IEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogewogICAgIC8vIDEyLjEuMSBUb0Rh
dGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVDTUEtNDAyIDIuMCkKICAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG9wdGlvbnMg
YmUgbnVsbCwgZWxzZSBsZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25zKS4KICAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KQEAgLTIyNCw3ICsyMjUsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgICAgIG9wdGlvbnMgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmZXhlYywgZXhlYy5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bGxQcm90
b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEpTT2JqZWN0KiBv
cmlnaW5hbFRvT2JqZWN0ID0gb3JpZ2luYWxPcHRpb25zLnRvT2JqZWN0KCZleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgb3B0aW9u
cyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBvcmlnaW5hbFRvT2JqZWN0KTsKICAgICB9
CkBAIC0yNDEsMjUgKzI0MiwyNSBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0CiAgICAgLy8gaWlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCiAgICAgLy8gaXYuIElm
IHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gbGV0IG5lZWREZWZhdWx0cyBiZSBmYWxzZS4K
ICAgICBKU1ZhbHVlIHdlZWtkYXkgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPndlZWtkYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICghd2Vla2RheS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsK
IAogICAgIEpTVmFsdWUgeWVhciA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+eWVhcik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF5
ZWFyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAg
SlNWYWx1ZSBtb250aCA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bW9u
dGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghbW9udGgu
aXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIGRheSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5KTsKLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIWRheS5pc1VuZGVmaW5l
ZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKQEAgLTI3MywxOSArMjc0LDE5IEBA
IHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJl
dHVybklmQWJydXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbiBsZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgaG91ciA9IG9w
dGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aG91cik7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFob3VyLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBtaW51dGUgPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtaW51dGUuaXNVbmRlZmluZWQoKSkKICAgICAg
ICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHNlY29uZCA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXNlY29uZC5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKQEAgLTI5OSwxNSArMzAwLDE1IEBAIHN0YXRpYyBKU09i
amVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAgICAgSlNTdHJpbmcqIG51bWVyaWMg
PSBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIEFTQ0lJTGl0ZXJhbCgibnVtZXJpYyIpKTsKIAog
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIG51
bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgs
IG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZGF5
LCBudW1lcmljKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAKQEAgLTQyOCwxMyArNDI5LDEzIEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5v
bmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4ZWMsIGxvY2FsZXMpOwogICAgIC8v
IDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLAotICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIDUuIExldCBvcHRpb25zIGJlIFRvRGF0ZVRpbWVPcHRpb25zKG9w
dGlvbnMsICJhbnkiLCAiZGF0ZSIpLgogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gdG9EYXRlVGlt
ZU9wdGlvbnNBbnlEYXRlKGV4ZWMsIG9yaWdpbmFsT3B0aW9ucyk7CiAgICAgLy8gNi4gUmV0dXJu
SWZBYnJ1cHQob3B0aW9ucykuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
Ny4gTGV0IG9wdCBiZSBhIG5ldyBSZWNvcmQuCkBAIC00NDMsNyArNDQ0LDcgQEAgdm9pZCBJbnRs
RGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDguIExldCBtYXRjaGVyIGJl
IEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyJsb29rdXAi
LCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmluZyBsb2NhbGVNYXRjaGVyID0g
aW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVN
YXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUg
ZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8g
OS4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIC8vIDEwLiBTZXQgb3B0LltbbG9jYWxlTWF0Y2hlcl1dIHRvIG1hdGNoZXIuCiAgICAgbG9j
YWxlT3B0LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLnN0cmluZygpLCBsb2Nh
bGVNYXRjaGVyKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMTcuIExldCB0eiBiZSBHZXQob3B0aW9ucywgInRpbWVa
b25lIikuCiAgICAgSlNWYWx1ZSB0elZhbHVlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50aW1lWm9uZSk7CiAgICAgLy8gMTguIFJldHVybklmQWJydXB0KHR6KS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyAxOS4gSWYgdHogaXMgbm90IHVuZGVm
aW5lZCwgdGhlbgpAQCAtNDgxLDcgKzQ4Miw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojpp
bml0aWFsaXplRGF0ZVQKICAgICAgICAgLy8gYS4gTGV0IHR6IGJlIFRvU3RyaW5nKHR6KS4KICAg
ICAgICAgU3RyaW5nIG9yaWdpbmFsVHogPSB0elZhbHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKICAg
ICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgICAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gSWYgdGhlIHJlc3VsdCBvZiBJc1ZhbGlkVGlt
ZVpvbmVOYW1lKHR6KSBpcyBmYWxzZSwgdGhlbiBpLiBUaHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0
aW9uLgogICAgICAgICAvLyBkLiBMZXQgdHogYmUgQ2Fub25pY2FsaXplVGltZVpvbmVOYW1lKHR6
KS4KQEAgLTUxNCw3ICs1MTUsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgYXV0byBzaG9ydExvbmcgPSB7ICJzaG9ydCIsICJsb25nIiB9OwogCiAgICAg
U3RyaW5nIHdlZWtkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPndlZWtkYXksIG5hcnJvd1Nob3J0TG9uZywgIndlZWtkYXkgbXVzdCBiZSBcIm5h
cnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmICghd2Vla2RheS5pc051bGwoKSkgewogICAgICAgICBpZiAo
d2Vla2RheSA9PSAibmFycm93IikKQEAgLTUyNiw3ICs1MjcsNyBAQCB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGVyYSA9IGludGxT
dHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+ZXJhLCBuYXJyb3dT
aG9ydExvbmcsICJlcmEgbXVzdCBiZSBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wi
IiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZXJhLmlz
TnVsbCgpKSB7CiAgICAgICAgIGlmIChlcmEgPT0gIm5hcnJvdyIpCkBAIC01MzgsNyArNTM5LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyB5ZWFyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT55ZWFyLCB0d29EaWdpdE51bWVyaWMsICJ5ZWFyIG11c3QgYmUgXCIyLWRpZ2l0XCIg
b3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKCF5ZWFyLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh5ZWFyID09ICIyLWRpZ2l0IikK
QEAgLTU0OCw3ICs1NDksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURh
dGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1vbnRoID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgdHdvRGlnaXROdW1lcmljTmFycm93U2hv
cnRMb25nLCAibW9udGggbXVzdCBiZSBcIjItZGlnaXRcIiwgXCJudW1lcmljXCIsIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFtb250aC5pc051bGwoKSkgewogICAgICAgICBpZiAobW9udGgg
PT0gIjItZGlnaXQiKQpAQCAtNTY0LDcgKzU2NSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgZGF5ID0gaW50bFN0cmluZ09w
dGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIHR3b0RpZ2l0TnVtZXJp
YywgImRheSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0g
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghZGF5LmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChkYXkgPT0gIjItZGlnaXQiKQpAQCAtNTc0LDcgKzU3NSw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgaG91ciA9
IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91ciwg
dHdvRGlnaXROdW1lcmljLCAiaG91ciBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wi
IiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVl
ZCBob3VyMTIgdG8gbWFrZSB0aGUgaG91ciBza2VsZXRvbiBwYXR0ZXJuIGRlY2lzaW9uLCBzbyBk
byB0aGlzIGVhcmx5LgpAQCAtNTgyLDcgKzU4Myw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0
Ojppbml0aWFsaXplRGF0ZVQKICAgICBib29sIGlzSG91cjEyVW5kZWZpbmVkOwogICAgIGJvb2wg
aHIxMiA9IGludGxCb29sZWFuT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PmhvdXIxMiwgaXNIb3VyMTJVbmRlZmluZWQpOwogICAgIC8vIDMzLiBSZXR1cm5JZkFicnVwdCho
cjEyKS4KLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWhvdXIuaXNOdWxs
KCkpIHsKQEAgLTYwNSw3ICs2MDYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlh
bGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1pbnV0ZSA9IGludGxTdHJpbmdPcHRpb24o
ZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bWludXRlLCB0d29EaWdpdE51bWVyaWMs
ICJtaW51dGUgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1pbnV0ZS5pc051bGwoKSkgewog
ICAgICAgICBpZiAobWludXRlID09ICIyLWRpZ2l0IikKQEAgLTYxNSw3ICs2MTYsNyBAQCB2b2lk
IEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5n
IHNlY29uZCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+c2Vjb25kLCB0d29EaWdpdE51bWVyaWMsICJzZWNvbmQgbXVzdCBiZSBcIjItZGlnaXRcIiBv
ciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIXNlY29uZC5pc051bGwoKSkgewogICAgICAgICBpZiAoc2Vjb25kID09ICIyLWRpZ2l0
IikKQEAgLTYyNSw3ICs2MjYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHRpbWVab25lTmFtZSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmVOYW1lLCBzaG9ydExv
bmcsICJ0aW1lWm9uZU5hbWUgbXVzdCBiZSBcInNob3J0XCIgb3IgXCJsb25nXCIiLCBudWxscHRy
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF0aW1lWm9uZU5hbWUuaXNO
dWxsKCkpIHsKICAgICAgICAgaWYgKHRpbWVab25lTmFtZSA9PSAic2hvcnQiKQpAQCAtNjM5LDcg
KzY0MCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAv
LyAyNi4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJmb3JtYXRNYXRjaGVyIiwg
InN0cmluZyIsIMKrImJhc2ljIiwgImJlc3QgZml0IsK7LCAiYmVzdCBmaXQiKS4KICAgICBpbnRs
U3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmZvcm1hdE1hdGNo
ZXIsIHsgImJhc2ljIiwgImJlc3QgZml0IiB9LCAiZm9ybWF0TWF0Y2hlciBtdXN0IGJlIGVpdGhl
ciBcImJhc2ljXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gMjcuIFJl
dHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEFsd2F5cyB1c2UgSUNVIGRhdGUgZm9ybWF0IGdlbmVyYXRvciwgcmF0aGVyIHRoYW4gb3Vy
IG93biBwYXR0ZXJuIGxpc3QgYW5kIG1hdGNoZXIuCkBAIC04MzQsMTUgKzgzNSwxNyBAQCBjb25z
dCBjaGFyKiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnRpbWVab25lCiAKIEpTT2JqZWN0KiBJbnRsRGF0
ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmIGV4ZWMpCiB7CisgICAgVk0m
IHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEyLjMuNSBJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5yZXNvbHZl
ZE9wdGlvbnMoKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEg
bmV3IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzIGFyZSBzZXQgYXMgaWYg
Y29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhl
IGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnRl
cm5hbCBzbG90IG9mIHRoaXMgRGF0ZVRpbWVGb3JtYXQgb2JqZWN0IChzZWUgMTIuNCk6IGxvY2Fs
ZSwgY2FsZW5kYXIsIG51bWJlcmluZ1N5c3RlbSwgdGltZVpvbmUsIGhvdXIxMiwgd2Vla2RheSwg
ZXJhLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgYW5kIHRpbWVab25l
TmFtZS4gUHJvcGVydGllcyB3aG9zZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3RzIGFyZSBu
b3QgcHJlc2VudCBhcmUgbm90IGFzc2lnbmVkLgogICAgIC8vIE5vdGU6IEluIHRoaXMgdmVyc2lv
biBvZiB0aGUgRUNNQVNjcmlwdCAyMDE1IEludGVybmF0aW9uYWxpemF0aW9uIEFQSSwgdGhlIHRp
bWVab25lIHByb3BlcnR5IHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgdGltZSB6b25l
IGlmIG5vIHRpbWVab25lIHByb3BlcnR5IHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucyBvYmpl
Y3QgcHJvdmlkZWQgdG8gdGhlIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IuIFRoZSBw
cmV2aW91cyB2ZXJzaW9uIGxlZnQgdGhlIHRpbWVab25lIHByb3BlcnR5IHVuZGVmaW5lZCBpbiB0
aGlzIGNhc2UuCiAgICAgaWYgKCFtX2luaXRpYWxpemVkRGF0ZVRpbWVGb3JtYXQpIHsKICAgICAg
ICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZN
JiB2bSA9IGV4ZWMudm0oKTsKICAgICBKU09iamVjdCogb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZleGVjKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxvY2FsZSwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2xvY2FsZSkpOwogICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y2FsZW5kYXIsIGpzTm9udHJp
dmlhbFN0cmluZygmZXhlYywgbV9jYWxlbmRhcikpOwpAQCAtODg5LDcgKzg5Miw3IEBAIEpTVmFs
dWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQoRXhlY1MKICAgICAvLyAxMi4zLjQgRm9ybWF0
RGF0ZVRpbWUgYWJzdHJhY3Qgb3BlcmF0aW9uIChFQ01BLTQwMiAyLjApCiAgICAgaWYgKCFtX2lu
aXRpYWxpemVkRGF0ZVRpbWVGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9y
bWF0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQo
IWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICB9CiAKICAgICAvLyAxLiBJZiB4IGlzIG5vdCBhIGZpbml0ZSBOdW1iZXIsIHRoZW4g
dGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6OmZpbmkK
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SW50bERhdGVU
aW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjEu
MiBJbnRsLkRhdGVUaW1lRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAy
LjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBi
ZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1Rh
cmdldC4KICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3JtYXQgYmUgT3JkaW5hcnlDcmVhdGVGcm9t
Q29uc3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwg
c3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3Iq
PihzdGF0ZS0+Y2FsbGVlKCkpLT5kYXRlVGltZUZvcm1hdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAo
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
SW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZvcm1hdDo6
Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxEYXRlVGltZUZvcm1hdCog
ZGF0ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
KTsKICAgICBBU1NFUlQoZGF0ZVRpbWVGb3JtYXQpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRp
YWxpemVEYXRlVGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBA
IC0xMzcsNiArMTM5LDggQEAgQ2FsbFR5cGUgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3I6
OgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltZUZvcm1hdENvbnN0
cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVz
T2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIuMCkKIAogICAgIC8vIDEuIExldCBh
dmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0u
CkBAIC0xNDUsNyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0
ZVRpbQogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9j
YWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0g
Y2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVx
dWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxE
YXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDgg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGU6OmZpbmlzaAogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRGdW5jRm9ybWF0RGF0
ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMy40IERh
dGVUaW1lIEZvcm1hdCBGdW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgZHRm
IGJlIHRoZSB0aGlzIHZhbHVlLgogICAgIC8vIDIuIEFzc2VydDogVHlwZShkdGYpIGlzIE9iamVj
dCBhbmQgZHRmIGhhcyBhbiBbW2luaXRpYWxpemVkRGF0ZVRpbWVGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlIGlzIHRydWUuCkBAIC0xMDEsNyArMTAzLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgICAgICAvLyBhLiBMZXQgeCBiZSBUb051
bWJlcihkYXRlKS4KICAgICAgICAgdmFsdWUgPSBkYXRlLnRvTnVtYmVyKHN0YXRlKTsKICAgICAg
ICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQoeCkuCi0gICAgICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAt
MTQwLDcgKzE0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0K
IAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMg
dmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
dm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEs
IEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBkdGYuW1ti
b3VuZEZvcm1hdF1dIHRvIGJmLgogICAgICAgICBkdGYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3Vu
ZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAg
ICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRM
b2NhbGVzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gSWYgb3B0
aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4KQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIEludGxOdW1i
ZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJl
IFRvT2JqZWN0KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2Jq
ZWN0KCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODcsNyAr
MTg3LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8v
IDguIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJz
dHJpbmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmlu
ZyBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0
Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZp
dCIpOwogICAgIC8vIDkuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0
Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVy
KTsKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGCiAgICAgLy8gMTYuIExldCBzIGJlIEdldE9wdGlvbihvcHRpb25zLCAic3R5bGUiLCAi
c3RyaW5nIiwgwqsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSLCuywgImRlY2ltYWwi
KS4KICAgICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAi
cGVyY2VudCIsICJjdXJyZW5jeSIgfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwi
LCBcInBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICAvLyAxNy4g
UmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAx
OC4gU2V0IG51bWJlckZvcm1hdC5bW3N0eWxlXV0gdG8gcy4KICAgICBpZiAoc3R5bGVTdHJpbmcg
PT0gImRlY2ltYWwiKQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxOS4gTGV0IGMgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJjdXJyZW5jeSIsICJzdHJpbmciLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuCiAgICAgU3RyaW5n
IGN1cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJjdXJyZW5jeSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAg
IC8vIDIwLiBSZXR1cm5JZkFicnVwdChjKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIC8vIDIxLiBJZiBjIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIWN1cnJlbmN5
LmlzTnVsbCgpKSB7CkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI0LiBMZXQgY2QgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJjdXJyZW5jeURpc3BsYXkiLCAic3RyaW5nIiwgwqsiY29kZSIsICJzeW1ib2wiLCAibmFtZSLC
uywgInN5bWJvbCIpLgogICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJpbmcgPSBpbnRsU3Ry
aW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1
cnJlbmN5RGlzcGxheSIpLCB7ICJjb2RlIiwgInN5bWJvbCIsICJuYW1lIiB9LCAiY3VycmVuY3lE
aXNwbGF5IG11c3QgYmUgZWl0aGVyIFwiY29kZVwiLCBcInN5bWJvbFwiLCBvciBcIm5hbWVcIiIs
ICJzeW1ib2wiKTsKICAgICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQoY2QpLgotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgLy8gMjYuIElmIHMgaXMgImN1cnJlbmN5Iiwgc2V0IG51bWJl
ckZvcm1hdC5bW2N1cnJlbmN5RGlzcGxheV1dIHRvIGNkLgogICAgIGlmIChtX3N0eWxlID09IFN0
eWxlOjpDdXJyZW5jeSkgewpAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1h
dDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAyOC4gUmV0dXJuSWZBYnJ1cHQobW5pZCkuCiAg
ICAgLy8gMjkuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtSW50ZWdlckRpZ2l0c11dIHRvIG1u
aWQuCiAgICAgdW5zaWduZWQgbWluaW11bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRl
Z2VyRGlnaXRzIiksIDEsIDIxLCAxKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fbWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0czsKIApAQCAtMjgz
LDcgKzI4Myw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAvLyAzMi4gUmV0dXJuSWZBYnJ1cHQobW5mZCkuCiAgICAgLy8gMzMuIFNldCBudW1iZXJGb3Jt
YXQuW1ttaW5pbXVtRnJhY3Rpb25EaWdpdHNdXSB0byBtbmZkLgogICAgIHVuc2lnbmVkIG1pbmlt
dW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwog
CkBAIC0zMDAsMjAgKzMwMCwyMCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVO
dW1iZXJGCiAgICAgLy8gMzYuIFJldHVybklmQWJydXB0KG14ZmQpLgogICAgIC8vIDM3LiBTZXQg
bnVtYmVyRm9ybWF0LltbbWF4aW11bUZyYWN0aW9uRGlnaXRzXV0gdG8gbXhmZC4KICAgICB1bnNp
Z25lZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIp
LCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWF4aW11bUZyYWN0aW9uRGln
aXRzID0gbWF4aW11bUZyYWN0aW9uRGlnaXRzOwogCiAgICAgLy8gMzguIExldCBtbnNkIGJlIEdl
dChvcHRpb25zLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIC8v
IDM5LiBSZXR1cm5JZkFicnVwdChtbnNkKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gNDAuIExldCBteHNkIGJlIEdldChvcHRpb25zLCAibWF4aW11bVNpZ25pZmljYW50
RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9w
dGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNp
Z25pZmljYW50RGlnaXRzIikpOwogICAgIC8vIDQxLiBSZXR1cm5JZkFicnVwdChteHNkKS4KLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNDIuIElmIG1uc2QgaXMgbm90IHVu
ZGVmaW5lZCBvciBteHNkIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTMyMSwxMiArMzIxLDEy
IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAgICAgLy8g
YS4gTGV0IG1uc2QgYmUgR2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiLCAxLCAyMSwgMSkuCiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2Fu
dERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAg
ICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobW5zZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gTGV0IG14c2QgYmUgR2V0TnVtYmVyT3B0
aW9uKG9wdGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiLCBtbnNkLCAyMSwgMjEpLgog
ICAgICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1T
aWduaWZpY2FudERpZ2l0cyIpLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CiAg
ICAgICAgIC8vIGQuIFJldHVybklmQWJydXB0KG14c2QpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIGUuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHNdXSB0byBtbnNkLgogICAgICAgICBtX21pbmltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsKQEAgLTM0MCw3ICszNDAsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgaWYgKHVzZXNG
YWxsYmFjaykKICAgICAgICAgdXNlR3JvdXBpbmcgPSB0cnVlOwogICAgIC8vIDQ0LiBSZXR1cm5J
ZkFicnVwdChnKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDQ1LiBTZXQg
bnVtYmVyRm9ybWF0LltbdXNlR3JvdXBpbmddXSB0byBnLgogICAgIG1fdXNlR3JvdXBpbmcgPSB1
c2VHcm91cGluZzsKQEAgLTM2MiwxMSArMzYyLDE0IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGVOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghbV9u
dW1iZXJGb3JtYXQpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KSB7CiAg
ICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5k
ZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAg
ICBVTnVtYmVyRm9ybWF0U3R5bGUgc3R5bGU7CkBAIC00ODAsNiArNDgzLDkgQEAgY29uc3QgY2hh
ciogSW50bE51bWJlckZvcm1hdDo6Y3VycmVuY3lEaQogCiBKU09iamVjdCogSW50bE51bWJlckZv
cm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyAxMS4zLjUgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9u
cygpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2Jq
ZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8v
IGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRo
ZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGUKQEAgLTQ5MSwxMCArNDk3LDkgQEAgSlNPYmplY3Qq
IEludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aQogCiAgICAgaWYgKCFtX2luaXRpYWxpemVk
TnVtYmVyRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpz
VW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBv
cHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBtX2xv
Y2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJudW1iZXJpbmdTeXN0ZW0iKSwganNTdHJpbmcoJnN0YXRlLCBtX251bWJlcmluZ1N5
c3RlbSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZv
cm1hdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIC8vIDExLjEuMiBJbnRsLk51bWJlckZvcm1hdCAoW2xvY2FsZXMg
Wywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1
bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVs
c2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1h
dCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3Jt
YXRQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xh
c3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJG
b3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxOdW1iZXJG
b3JtYXQqIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQobnVtYmVyRm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0
aWFsaXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0x
MzcsNiArMTM5LDggQEAgQ2FsbFR5cGUgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rv
ckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2Nh
bGVzIFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJs
ZUxvY2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCkBAIC0xNDUs
NyArMTQ5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAg
ICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChs
b2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8g
My4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9j
YWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgdm9pZCBJbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcgogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihFeGVjU3RhdGUqIHN0
YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4zLjQgRm9ybWF0IE51bWJlciBGdW5jdGlv
bnMgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgbmYgYmUgdGhlIHRoaXMgdmFsdWUuCiAg
ICAgLy8gMi4gQXNzZXJ0OiBUeXBlKG5mKSBpcyBPYmplY3QgYW5kIG5mIGhhcyBhbiBbW2luaXRp
YWxpemVkTnVtYmVyRm9ybWF0XV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSAgdHJ1ZS4KQEAg
LTkxLDcgKzkzLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAog
ICAgIC8vIDQuIExldCB4IGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICBkb3VibGUgbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKHN0YXRlKTsKICAgICAvLyA1LiBSZXR1cm5JZkFi
cnVwdCh4KS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KQEAg
LTEyOCw3ICsxMzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJG
CiAKICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlz
IHZhbHVlwrspLgogICAgICAgICBib3VuZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEs
IEFTQ0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBuZi5bW2Jv
dW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRG
b3JtYXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVj
dC5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDkgQEAgdm9pZCBj
b252ZXJ0SUNVTG9jYWxlVG9CQ1A0N0xhbmd1YWdlVGFnKAogCiBib29sIGludGxCb29sZWFuT3B0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5LCBib29sJiB1c2VzRmFsbGJhY2spCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyA5LjIuOSBH
ZXRPcHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAg
IC8vIEZvciB0eXBlPSJib29sZWFuIi4gdmFsdWVzIGlzIGFsd2F5cyB1bmRlZmluZWQuCiAKQEAg
LTEzMCwxNCArMTMzLDE0IEBAIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0
ZSwKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAg
IC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KICAg
ICBKU1ZhbHVlIHZhbHVlID0gb3B0cy0+Z2V0KCZzdGF0ZSwgcHJvcGVydHkpOwogCiAgICAgLy8g
NC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xNzIs
MTQgKzE3NSwxNCBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAg
ICAgSlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2JqZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAy
LiBSZXR1cm5JZkFicnVwdChvcHRzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFs
dWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1
cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xOTIsNyArMTk1LDcg
QEAgU3RyaW5nIGludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICBTdHJp
bmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogCiAgICAgICAgIC8v
IGlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICAgICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTIyMCwxNCArMjIzLDE0IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24o
RXhlY1N0YXRlJiBzdGEKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0
YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVy
dHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAK
ICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAt
MjM1LDcgKzIzOCw3IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oRXhlY1N0YXRlJiBzdGEK
ICAgICAgICAgLy8gYS4gTGV0IHZhbHVlIGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICAgICAgZG91
YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKICAgICAgICAgLy8gYi4g
UmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgLy8gMS4gSWYgdmFsdWUgaXMgTmFOIG9yIGxlc3MgdGhhbiBtaW5p
bXVtIG9yIGdyZWF0ZXIgdGhhbiBtYXhpbXVtLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9u
LgogICAgICAgICBpZiAoIShkb3VibGVWYWx1ZSA+PSBtaW5pbXVtICYmIGRvdWJsZVZhbHVlIDw9
IG1heGltdW0pKSB7CkBAIC01NTYsMTYgKzU1OSwxNiBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEV4CiAgICAgfQogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTyku
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgLy8g
Ni4gTGV0IGxlbiBiZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIpKS4KICAgICBKU1ZhbHVlIGxl
bmd0aFByb3BlcnR5ID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
CiAKICAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyBL
ZWVwIHRyYWNrIG9mIGxvY2FsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCkBA
IC01ODEsNyArNTg0LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChF
eAogICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoJnN0
YXRlLCBrKTsKIAogICAgICAgICAvLyBjLiBSZXR1cm5JZkFicnVwdChrUHJlc2VudCkuCi0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgIC8vIGQuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KQEAgLTU5MCw3ICs1OTMsNyBA
QCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgICAgICBK
U1ZhbHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUsIGspOwogCiAgICAgICAg
ICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1ZhbHVlKS4KLSAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAg
ICAgICAgIC8vIGlpaS4gSWYgVHlwZShrVmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0
aHJvdyBhIFR5cGVFcnJvciBleGNlcHRpb24uCkBAIC02MDMsNyArNjA2LDcgQEAgVmVjdG9yPFN0
cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeAogICAgICAgICAgICAgSlNTdHJpbmcqIHRh
ZyA9IGtWYWx1ZS50b1N0cmluZygmc3RhdGUpOwogCiAgICAgICAgICAgICAvLyB2LiBSZXR1cm5J
ZkFicnVwdCh0YWcpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gdmkuIElmIElzU3Ry
dWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyh0YWcpIGlzIGZhbHNlLCB0aHJvdyBhIFJhbmdlRXJy
b3IgZXhjZXB0aW9uLgpAQCAtOTMzLDYgKzkzNiw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxl
cyhFeGVjU3RhdGUmIHN0YXQKIHsKICAgICAvLyA5LjIuOCBTdXBwb3J0ZWRMb2NhbGVzIChhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKQogICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFN0cmluZyBtYXRjaGVyOwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuCkBAIC05NDAsNyArOTQ0LDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNT
dGF0ZSYgc3RhdAogICAgICAgICAvLyBhLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9u
cywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsgImxvb2t1cCIsICJiZXN0IGZpdCIgwrss
ICJiZXN0IGZpdCIpLgogICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJl
c3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwi
YmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCht
YXRjaGVyKS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUg
ImJlc3QgZml0Ii4KQEAgLTk2MCw3ICs5NjQsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMo
RXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBsb29rdXBTdXBwb3J0
ZWRMb2NhbGVzKHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKICAg
ICB9CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAv
LyA2LiBMZXQgc3Vic2V0IGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcyku
CkBAIC05NjksNyArOTczLDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYg
c3RhdAogICAgIC8vIDcuIExldCBrZXlzIGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCku
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cygmc3RhdGUsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MpOwogICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9y
dGVkTG9jYWxlcywgJnN0YXRlLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2M7CkBAIC05ODYsNyArOTkwLDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNT
dGF0ZSYgc3RhdAogICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShz
dXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXNbaV0sIGRlc2MsIHRydWUpOwogCiAgICAgICAg
IC8vIGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNyBAQCBK
U1ZhbHVlIGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhXb3JrYXJvCiAgICAgLy8gRklYTUU6IFdv
cmthcm91bmQgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwv
YXBwbHkgcGF0dGVybnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MzY3OQogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEludGxJ
bnN0YW5jZSo+KHRoaXNWYWx1ZSkpIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxs
ZWUtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAg
aWYgKEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoJnN0YXRlLCB0aGlzVmFsdWUsIHByb3Rv
dHlwZSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBJbnRsSW5zdGFuY2UqIGlu
c3RhbmNlID0gZmFjdG9yeSh2bSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICB0aGlzT2JqZWN0
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJz
dGl0dXRlVmFsdWVQcml2YXRlTmFtZSgpLCBpbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgSlNWYWx1ZSBpdGVy
YXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwpA
QCAtNTMsNyArNTMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpT
CiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVu
Y3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0
b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNPYmplY3QoKSkKQEAgLTgwLDExICs4
MCwxNCBAQCBib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiBleGVjLCBKCiAKIEpTVmFs
dWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJh
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYm9v
bCBkb25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1bHQpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihmYWxzZSk7CkBAIC05NywxMiArMTAwLDEzIEBAIHZvaWQgaXRlcmF0b3JDbG9z
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAgICAg
SlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5yZXR1cm5LZXl3b3JkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEyOSw3ICsxMzMsNyBAQCB2
b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbm5lclJl
c3VsdC5pc09iamVjdCgpKSB7CkBAIC0xNjcsNyArMTcxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZv
ckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5n
ZXQoc3RhdGUsIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVy
YXRvckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC0xNzksNyArMTgzLDcgQEAgSlNWYWx1ZSBpdGVyYXRv
ckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwogCiAgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9u
QXJndW1lbnRzOwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1
bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0
YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOwotICAgIGlmIChzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJUaHJvd1Njb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyMCArNDgs
MjIgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxCYWNrVHlwZT4KIHZvaWQgZm9yRWFjaEluSXRl
cmFibGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tU
eXBlJiBjYWxsYmFjaykKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaXRlcmF0b3Ig
PSBpdGVyYXRvckZvckl0ZXJhYmxlKHN0YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRv
clN0ZXAoc3RhdGUsIGl0ZXJhdG9yKTsKLSAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpIHx8IHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUg
bmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShzdGF0ZSwgbmV4dCk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBjYWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1
ZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLCBp
dGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTkxLDcgKzU5MSw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBl
bGVtZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4
ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3Vt
ZW50cyBpbmR4IGFuZCB0cnVlLgogICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMs
IGV4ZWMsIGluZGV4KSkgewpAQCAtNjQzLDcgKzY0Myw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhf
QVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0
aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02NjMsNyArNjYzLDcgQEAgdm9pZCBKU0FycmF5Ojpw
dXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCA+
IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5wdXRCeUlu
ZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5NSw3ICs2OTUsNyBAQCB2b2lkIEpTQXJy
YXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIAogICAgICAgICBpZiAobGVu
Z3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1
dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQg
SlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAg
ICAgIGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0
aCwgdmFsdWUsIHRydWUsIHB1dFJlc3VsdCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFk
RXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3RoIDwgMHhGRkZGRkZGRnUpCisgICAgICAgICAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpICYmIG9sZExlbmd0aCA8IDB4RkZGRkZGRkZ1KQogICAgICAgICAg
ICAgICAgIHNldExlbmd0aChleGVjLCBvbGRMZW5ndGggKyAxLCB0cnVlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNzMxLDcgKzczMSw3IEBAIHZvaWQgSlNBcnJheTo6cHVz
aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4g
TUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5k
ZXgodGhpcywgZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKICAgICAgICAg
ICAgIC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAg
ICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNj
b3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBs
ZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMTkwLDYgKzEx
OTAsOSBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQg
SlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgdW5zaWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8
VW5rbm93bj4qIHZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkBAIC0xMjU1LDcgKzEy
NTgsNyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAg
ICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVu
dERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgs
NyArODgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
dW5zaWduZWQgbGVuZ3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAg
ICAgbGVuZ3RoID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3Vt
ZW50YXRpb24gZG9lc24ndCBzYXkgc28sIGl0IGlzIGluIGZhY3QgY29ycmVjdCB0byBzYXkKQEAg
LTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4
ZWMsIHNjb3BlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUo
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0s
IGFycmF5QnVmZmVyU3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwx
MyArNTAsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJT
bGljZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMy
X3QgYmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAg
IGludDMyX3QgZW5kOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAg
ICAgICBlbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCkt
PmJ5dGVMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUlubGluZXMuaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjQgKzcw
LDI2IEBAIGlubGluZSBib29sIEpTQXJyYXk6OmNhbkZhc3RDb3B5KFZNJiB2bSwKIAogQUxXQVlT
X0lOTElORSB1bnNpZ25lZCBnZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJu
IGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwogICAgIHJldHVybiBsZW5ndGhWYWx1ZS50b1VJbnQzMihleGVjKTsKIH0KIAogQUxXQVlTX0lO
TElORSBkb3VibGUgdG9MZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0
dXJuIGxlbmd0aFZhbHVlLnRvTGVuZ3RoKGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDUz
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsOCArMTI2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBoYXNJbnN0YW5jZQogCiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0dXJlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCiB7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVu
Y3Rpb24tPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRKU0Z1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnVuY3Rpb24pOwogCkBAIC0xNTgsNiArMTU5LDcg
QEAgaW5saW5lIFN0cnVjdHVyZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdAogCiBKU0JvdW5kRnVu
Y3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpT
VmFsdWUgYm91bmRUaGlzLCBKU0FycmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29u
c3RydWN0VHlwZSA9IEpTQzo6Z2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3Ry
dWN0RGF0YSk7CiAgICAgYm9vbCBjYW5Db25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0
cnVjdFR5cGU6Ok5vbmU7CkBAIC0xNzAsNyArMTcyLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZQogICAgICAgICBjYW5Db25zdHJ1Y3QgPyAoc2xvd0Nhc2UgPyBi
b3VuZEZ1bmN0aW9uQ29uc3RydWN0IDogYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3Qp
IDogY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsCiAgICAgICAgIG5hbWUpOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSh2bSwgZXhlYywg
Z2xvYmFsT2JqZWN0LCB0YXJnZXRGdW5jdGlvbik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0
aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhp
cywgYm91bmRBcmdzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcg
QEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAK
ICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChwcm90b3R5cGUu
aXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNiw3ICsyMTYsNyBAQCBib29sIEpT
VmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAgICAgCiAgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSA9IHN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCFw
cm90b3R5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKQEAgLTM3OCwxMSArMzc4LDExIEBAIEpT
U3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc0Nl
bGwoKSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQ
cmVmZXJTdHJpbmcpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIEFT
U0VSVCghdmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0Miw3ICs2NDIsNyBAQCBpbmxpbmUgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJl
CiAgICAgfQogCiAgICAgU3RyaW5nSW1wbCogaGludFN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+
KHZhbHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
Tm9QcmVmZXJlbmNlOwogCiAgICAgaWYgKFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1bHQi
KSkKQEAgLTc4NCw4ICs3ODQsOSBAQCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0
X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZ
U19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24o
Ym9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9
IGdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQs
IHNsb3QpOwogfQpAQCAtODk3LDYgKzg5OCw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFs
KEV4ZWNTdGF0ZSogZXgKIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNl
SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBkbyB7CiAgICAgICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVy
KCkpCiAgICAgICAgICAgICByZXR1cm4gdjEuYXNOdW1iZXIoKSA9PSB2Mi5hc051bWJlcigpOwpA
QCAtOTI0LDcgKzkyNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dD
YXMKICAgICAgICAgICAgIGlmICh2Mi5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biB2MSA9PSB2MjsKICAgICAgICAgICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVj
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgdjEgPSBwMTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkg
JiYgdjIuaXNJbnQzMigpKQpAQCAtOTM0LDcgKzkzNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U1ZhbHVlOjplcXVhbFNsb3dDYXMKIAogICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAg
ICAgICAgICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB2MiA9IHAyOwogICAgICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFW
aWV3UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MywxNCArMTMzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpIikpOwogICAgIAog
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJ
bnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAg
IHVuc2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwog
ICAgIGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsK
ICAgICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTE4MSw3ICsxODEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFz
dCB0d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkiKSk7CiAgICAgCiAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSk7CkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBz
ZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9IHU7CiAKICAgICB1LnZhbHVlID0gdG9OYXRp
dmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIAogICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxl
bWVudFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1l
bnRTaXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0
bGVFbmRpYW4gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTAs
NiArNTkwLDkgQEAgU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIAogCiB2
b2lkIEpTRnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBUaGUgIm5hbWUiIHByb3BlcnR5IG1heSBo
YXZlIGJlZW4gYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHByb3BlcnR5IGxpc3Qg
aW4gYW4KICAgICAvLyBvYmplY3QgbGl0ZXJhbCAoYW5kIHRoZXJlZm9yZSByZWlmaWVkKS4KICAg
ICBpZiAoaGFzUmVpZmllZE5hbWUoKSkKQEAgLTYwNSwxMiArNjA4LDExIEBAIHZvaWQgSlNGdW5j
dGlvbjo6c2V0RnVuY3Rpb25OYW1lKEV4ZWNTdGEKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bmFtZSA9IG1ha2VTdHJpbmcoJ1snLCBTdHJpbmcoJnVpZCksICddJyk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICAgICAgSlNTdHJpbmcqIGpzU3RyID0g
dmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgbmFtZSA9IGpzU3RyLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICByZWlmeU5hbWUoZXhlYywgbmFtZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3
ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gdG9OYXRp
dmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDE0ICs4OSwxNCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFy
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBp
ZiAobmV4dC5pc0ZhbHNlKCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBKU1ZhbHVl
IG5leHRJdGVtID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc3RvcmFnZS5hcHBlbmQo
bmV4dEl0ZW0pOwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1
Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBzdG9yYWdlLnNpemUoKSk7CiAgICAg
aWYgKCFyZXN1bHQpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2Uuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgaWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3JhZ2UuYXQo
aSkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgbGVuZ3RoU2xvdCk7CiAKICAg
ICAgICAgICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gV2Ugd291
bGQgbGlrZSBub3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVsbHkgc2xvdy4gRm9y
dHVuYXRlbHksIHVubGVzcwpAQCAtMTgzLDIxICsxODMsMjEgQEAgaW5saW5lIEpTT2JqZWN0KiBj
b25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJn
dW1lbnRzOwogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVj
LCBpdGVyYXRvckZ1bmMsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmd1bWVudHMpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZpZXdDbGFzcz4oZXhl
Yywgc3RydWN0dXJlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxl
bmd0aCA9IGxlbmd0aFNsb3QuaXNVbnNldCgpID8gMCA6IGxlbmd0aFNsb3QuZ2V0VmFsdWUoZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IH0KIAogICAgICAgICAKICAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgICAgICBpZiAo
IXJlc3VsdCkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzNSw3ICsyMzUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFN0cnVj
dHVyZSogcGFyZW50U3RydWN0dXJlID0gZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpLT50eXBlZEFy
cmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBwYXJlbnRTdHJ1Y3R1cmUpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBzaXpl
X3QgYXJnQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0yNTIsMTIgKzI1MiwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgT3B0aW9uYWw8
dW5zaWduZWQ+IGxlbmd0aCA9IE51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNBcnJh
eUJ1ZmZlcio+KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAgICAgICBvZmZzZXQg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgICAgICBsZW5ndGggPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQXJyYXlCdWZm
ZXJWaWV3KiBzcGVjaWVzQ29uc3RydQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBleGVtcGxhci0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCkBA
IC02MiwxNCArNjIsMTQgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3Ry
dQogICAgIH0KIAogICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHNwZWNpZXMuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdHJ1Y3RvcigpOwogCiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjb25zdHJ1Y3QoZXhlYywgc3BlY2llcywgYXJncywgInNwZWNpZXMgaXMgbm90IGEgY29u
c3RydWN0b3IiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJW
aWV3Kj4ocmVzdWx0KSkgewpAQCAtMTQ3LDcgKzE0Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29w
eVdpdGhpbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gMjIuMi4zLjUKQEAgLTE1NywxMyArMTU2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGUKIAogICAgIGxvbmcgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3Ro
KCk7CiAgICAgbG9uZyB0byA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhl
YywgMCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAg
ICAgbG9uZyBmcm9tID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAx
LCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBs
b25nIGZpbmFsID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBs
ZW5ndGgsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwog
CiAgICAgaWYgKGZpbmFsIDwgZnJvbSkKQEAgLTE4Myw3ICsxODIsNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3Rv
RnVuY0luY2x1ZGVzKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhp
c1ZhbHVlKCkpOwpAQCAtMTk4LDcgKzE5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGUKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkp
CkBAIC0yMDksNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZQogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNfY2FzdDxk
b3VibGU+KCp0YXJnZXRPcHRpb24pKSkgewpAQCAtMjMwLDcgKzIyOCw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFz
cz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG9GdW5jSW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgLy8gMjIuMi4zLjEzCkBAIC0yNDUsNyArMjQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0y
NTUsNyArMjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
ICAgIGF1dG8gdGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFs
dWVXaXRob3V0Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFyZ2V0T3B0aW9uKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Ci0gICAgQVNTRVJU
KCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsg
aW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKQEAgLTI2OSw3ICsyNjYsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlz
VmFsdWUoKSk7CkBAIC0yODIsMTEgKzI3OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxl
bmd0aCgpOwogCiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9y
LCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIHRoaXNP
YmplY3QtPmdldEluZGV4UXVpY2tseShpKSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhl
YykpOwpAQCAtMjk5LDcgKzI5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKICAgICB9CiAKICAgICBKU1N0cmluZyogc2VwYXJhdG9yU3RyaW5nID0gc2VwYXJh
dG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0
ZXJlZCgpKQpAQCAtMzEwLDcgKzMwNiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2Yo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIu
My4xNgpAQCAtMzM4LDcgKzMzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21E
b3VibGUpOwogICAgIH0KIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtMzQ5LDcg
KzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUg
Vmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3Rvcigp
OwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwog
CiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAgLTQzMiw3ICs0MjcsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMjYKQEAgLTQ0NSwxMCArNDM5LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25lZCB0aGlzTGVuZ3Ro
ID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50
Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0aCk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3Vt
ZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgdGhpc0xlbmd0aCwgdGhpc0xl
bmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTQ2Nyw3ICs0NjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xh
c3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAg
ICBBU1NFUlQoIXJlc3VsdC0+aXNOZXV0ZXJlZCgpKTsKQEAgLTUxOCw3ICs1MTIsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBW
aWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5
Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsK
LS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjIzCkBAIC01MzcsOSArNTMwLDkgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEFTU0VSVChleGVjLT5h
cmd1bWVudCgwKS5pc051bWJlcigpKTsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSB8fCBleGVjLT5hcmd1bWVudCgxKS5pc051bWJlcigpKTsKICAgICB1bnNpZ25l
ZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhp
c0xlbmd0aCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NF
UlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwogCkBAIC01NzIs
NyArNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAg
IGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1
Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHJlc3Vs
dCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
IENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04
MTUsMTIgKzgxNSwxNCBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpT
CiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNW
YWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7
CiAgICAgaWYgKGluaXRpYWxMZW5ndGggPj0gTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9O
X0xFTkdUSCkKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgQXJyYXlXaXRoQXJyYXlTdG9y
YWdlLCBuZXdUYXJnZXQpOwogICAgIGVsc2UKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2Zp
bGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9y
KHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxM
ZW5ndGgpKTsKQEAgLTgzMyw4ICs4MzUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVt
cHR5QXJyYXkoRXhlYwogIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0
ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVlIG5ld1RhcmdldCA9
IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0
aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0
QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIHZh
bHVlcykpOwogfQpAQCAtODQ2LDggKzg1MCwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0
QXJyYXkoRXhlY1N0YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3Rh
dGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoLCBK
U1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclBy
b2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShl
eGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CkBAIC04NTksOCArODY1LDEwIEBA
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0
ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9j
YXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxh
c3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4
ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICB9CiAKICAg
ICBTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYg
KHMuaXM4Qml0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9i
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0pvYi5j
cHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Sm9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOSBAQCBSZWY8TWljcm90YXNrPiBj
cmVhdGVKU0pvYihWTSYgdm0sIEpTVmFsCiAKIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBDYWxsRGF0YSBoYW5kbGVyQ2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlckNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9qb2IuZ2V0
KCksIGhhbmRsZXJDYWxsRGF0YSk7CiAgICAgQVNTRVJUKGhhbmRsZXJDYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7CkBAIC03Miw3ICs3NSw3IEBAIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihF
eGVjU3RhdGUqIGV4ZWMKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMCwgbGVuZ3RoID0gbV9h
cmd1bWVudHMtPmxlbmd0aCgpOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKICAgICAgICAgaGFu
ZGxlckFyZ3VtZW50cy5hcHBlbmQobV9hcmd1bWVudHMtPkpTQXJyYXk6OmdldChleGVjLCBpbmRl
eCkpOwogICAgIHByb2ZpbGVkQ2FsbChleGVjLCBQcm9maWxpbmdSZWFzb246Ok1pY3JvdGFzaywg
bV9qb2IuZ2V0KCksIGhhbmRsZXJDYWxsVHlwZSwgaGFuZGxlckNhbGxEYXRhLCBqc1VuZGVmaW5l
ZCgpLCBoYW5kbGVyQXJndW1lbnRzKTsKLSAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE3
ICs3OCwxOSBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAKIGJv
b2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBKU01vZHVsZVJl
Y29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCkt
PnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5h
bWUudWlkKCkpKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEpTTW9kdWxlUmVjb3JkOjpS
ZXNvbHV0aW9uOjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBXaGVuIHJlc29sdmVJbXBv
cnQgcmVzb2x2ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBtb2R1bGUgZW52aXJvbm1l
bnQgbXVzdCBoYXZlIHRoZSBiaW5kaW5nLgogICAgICAgICBKU01vZHVsZUVudmlyb25tZW50KiBp
bXBvcnRlZE1vZHVsZUVudmlyb25tZW50ID0gcmVzb2x1dGlvbi5tb2R1bGVSZWNvcmQtPm1vZHVs
ZUVudmlyb25tZW50KCk7CiAgICAgICAgIFByb3BlcnR5U2xvdCByZWRpcmVjdFNsb3QoaW1wb3J0
ZWRNb2R1bGVFbnZpcm9ubWVudCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okdl
dCk7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaW1wb3J0ZWRNb2R1bGVFbnZpcm9ubWVudC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVu
dmlyb25tZW50LCBleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJs
ZSh2bSktPmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBleGVj
LCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKICAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVChyZWRpcmVjdFNsb3QuaXNWYWx1
ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlZGlyZWN0U2xvdC5nZXRWYWx1ZShleGVj
LCByZXNvbHV0aW9uLmxvY2FsTmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHJlZGlyZWN0U2xvdC5hdHRyaWJ1
dGVzKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTMgKzE0OSwxNSBAQCBKU0ludGVybmFsUHJv
bWlzZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbZmV0
Y2hdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsKIAogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJGZXRjaCkKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVj
dC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2goZ2xvYmFsT2Jq
ZWN0LCBleGVjLCB0aGlzLCBrZXksIGluaXRpYXRvcik7CiAgICAgSlNJbnRlcm5hbFByb21pc2VE
ZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0KTsKICAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCkt
PnZhbHVlKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGRlZmVy
cmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5w
cm9taXNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIEpTTW9kdWxlTmFtZXNwYWNl
T2JqZWN0OjpKU01vZHVsZU5hbWVzcGEKIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgY29uc3QgSWRlbnRpZmllclNldCYgZXhw
b3J0cykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogCkBAIC04MSw3ICs4Miw3IEBAIHZvaWQgSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENyZWEKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMt
b2JqZWN0cy1pc2V4dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1w
cmV2ZW50ZXh0ZW5zaW9ucwogICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMo
dGhpcywgZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNT
RVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KIAogdm9pZCBKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xMzYsNyArMTM3LDcg
QEAgYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAogICAgICAgICBBU1NF
UlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRyYW1w
b2xpbmVTbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKIAogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgZmlsbGVkIHdpdGggVERaIHZhbHVlLCB0
aHJvdyBhIHJlZmVyZW5jZSBlcnJvci4KICAgICAgICAgaWYgKCF2YWx1ZSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2
aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzksNyArNzc5LDcgQEAgdm9pZCBKU01vZHVs
ZVJlY29yZDo6aW5zdGFudGlhdGVEZWNsYXJhdAogICAgICAgICBKU01vZHVsZVJlY29yZCogaW1w
b3J0ZWRNb2R1bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIGltcG9ydEVudHJ5
Lm1vZHVsZVJlcXVlc3QpOwogICAgICAgICBpZiAoaW1wb3J0RW50cnkuaXNOYW1lc3BhY2Uodm0p
KSB7CiAgICAgICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbmFtZXNwYWNlT2JqZWN0
ID0gaW1wb3J0ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKLSAgICAgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYm9v
bCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRj
aHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRyeS5sb2NhbE5hbWUs
IG5hbWVzcGFjZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAv
KiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjAsMTYgKzIyMCwxOCBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIo
RXhlY1N0YXRlKiBleGVjCiAgICAgLCBtX3JlcGxhY2VyQ2FsbFR5cGUoQ2FsbFR5cGU6Ok5vbmUp
CiAgICAgLCBtX2dhcChnYXAoZXhlYywgc3BhY2UuZ2V0KCkpKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGlmICghbV9yZXBsYWNlci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bV9yZXBsYWNlci5hc09iamVjdCgpLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKSB7CiAgICAg
ICAgIG1fdXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0
PiBhcnJheSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9V
SW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG5h
bWUgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKG5hbWUuaXNPYmplY3QoKSkg
ewpAQCAtMjQ4LDM2ICsyNTAsMzkgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0
ZSogZXhlYwogCiBMb2NhbDxVbmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxV
bmtub3duPiB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc051bGwo
KSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVGb3JGdW5j
dGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmVt
cHR5SWRlbnRpZmllcik7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5nZXQoKSk7Cisg
ICAgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKHZtLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOwogCiAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKGFwcGVuZFN0cmluZ2lmaWVkVmFsdWUocmVzdWx0
LCB2YWx1ZS5nZXQoKSwgb2JqZWN0LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5naWZ5U3Vj
Y2VlZGVkKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOworICAgICAgICByZXR1
cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzVW5kZWZpbmVkKCkpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNO
dWxsKCkpOwogCi0gICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNTdHJp
bmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOworICAgIHJldHVybiBMb2NhbDxVbmtub3du
Pih2bSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZhbHVlLCBjb25zdCBQ
cm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQo
IW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdmFsdWU7CiAgICAgCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsK
LSAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICBpZiAoIW9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9KU09OLCBzbG90
KSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiA9
IHNsb3QuZ2V0VmFsdWUobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJuIHRvSlNPTkltcGwodmFsdWUsIHRv
SlNPTkZ1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogfQpAQCAtMzAxLDcgKzMwNiw3IEBAIFN0cmlu
Z2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIC8vIENhbGwgdGhlIHRv
SlNPTiBmdW5jdGlvbi4KICAgICB2YWx1ZSA9IHRvSlNPTih2YWx1ZSwgcHJvcGVydHlOYW1lKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAgIC8vIENhbGwgdGhl
IHJlcGxhY2VyIGZ1bmN0aW9uLgpAQCAtMzEwLDcgKzMxNSw3IEBAIFN0cmluZ2lmaWVyOjpTdHJp
bmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1l
LnZhbHVlKG1fZXhlYykpOwogICAgICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHZh
bHVlID0gY2FsbChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFjZXJDYWxsVHlwZSwg
bV9yZXBsYWNlckNhbGxEYXRhLCBob2xkZXIsIGFyZ3MpOwotICAgICAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIH0KIApAQCAtMzI0LDcgKzMyOSw3IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIHZhbHVlID0g
dW53cmFwQm94ZWRQcmltaXRpdmUobV9leGVjLCB2YWx1ZSk7CiAKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewpAQCAt
Mzc3LDE0ICszODIsMTQgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmll
cgogCiAgICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5
KCk7CiAgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKHZtLCBtX2V4ZWMsIG9iamVjdCkp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKICAgICBp
ZiAoIWhvbGRlclN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVk
ZWQ7CiAKICAgICBkbyB7CiAgICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNrLmxhc3QoKS5hcHBl
bmROZXh0UHJvcGVydHkoKnRoaXMsIGJ1aWxkZXIpKSB7Ci0gICAgICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAgICAgIH0KICAgICAg
ICAgbV9ob2xkZXJTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC00MzYsNiArNDQxLDggQEAgYm9vbCBT
dHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIEFTU0VSVChtX2luZGV4IDw9
IG1fc2l6ZSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdHJpbmdpZmllci5tX2V4ZWM7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUuCiAgICAg
aWYgKCFtX2luZGV4KSB7CkBAIC00NDQsNyArNDUxLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9s
ZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKG1faXNKU0FycmF5KQogICAgICAg
ICAgICAgICAgIG1fc2l6ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5sZW5ndGgoKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4
ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAg
ICAgICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
WycpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNp
bmdBcnJheVJlcGxhY2VyKQpAQCAtNDUyLDcgKzQ1OSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1l
TW9kZTo6U3RyaW5ncyk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKCkt
PmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9iamVjdFByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VE
YXRhKCk7CiAgICAgICAgICAgICB9CkBAIC00ODYsNyArNDkzLDcgQEAgYm9vbCBTdHJpbmdpZmll
cjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBpbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
dmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTUwNCw3
ICs1MTEsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAg
ICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChtX29i
amVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgcm9sbEJhY2tQb2ludCA9IGJ1aWxkZXIubGVuZ3RoKCk7CkBAIC02NDAsNyAr
NjQ3LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpbmRleCk7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGluVmFs
dWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjU4LDcgKzY2NSw3IEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAg
ICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChhcnJheSwgbV9l
eGVjLCBpbmRleFN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRleFN0YWNrLmxhc3Qo
KSwgZmlsdGVyZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIGlu
ZGV4U3RhY2subGFzdCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRN
ZW1iZXI7CkBAIC02NzUsNyArNjgyLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3
YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwogICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlT
dGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkobV9leGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoK
QEAgLTY5OCw3ICs3MDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNW
YWx1CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAg
ICAgICAgICAgICAgLy8gVGhlIGhvbGRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIHJldml2ZXIg
ZnVuY3Rpb24gc28gYW55IGxvb2t1cCBtYXkgdGhyb3cKLSAgICAgICAgICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoaW5WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC03MTcsNyArNzI0LDcg
QEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAg
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9l
eGVjLCBwcm9wKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgbV9leGVjLCBwcm9wLCBmaWx0ZXJlZFZh
bHVlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFj
ay5sYXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7
CkBAIC03NTQsNyArNzYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJv
dG9GdQogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkpT
T04ucGFyc2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKSk7CiAgICAgSlNTdHJp
bmc6OlNhZmVWaWV3IHNvdXJjZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5n
KGV4ZWMpLT52aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUgdW5maWx0ZXJlZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDM2LDYgKzQzNiw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSog
ZXhlYywgSlMKICAgICAvLyAzLiBFUzYgUHJveHkuCiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVj
dCogY3VycmVudCA9IG9iamVjdDsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb3duRGVzY3JpcHRv
cjsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNDQ3LDEzICs0NDgsMTMgQEAgYm9vbCBvcmRpbmFy
eVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgIC8vIDkuMS45LjEtMiBMZXQg
b3duRGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgogICAgICAgICBib29sIG93bkRl
c2NyaXB0b3JGb3VuZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBw
cm9wZXJ0eU5hbWUsIG93bkRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghb3duRGVzY3JpcHRvckZvdW5k
KSB7CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYSBMZXQgcGFyZW50IGJlID8gTy5bW0dldFBy
b3RvdHlwZU9mXV0oKS4KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gOS4xLjkuMS0z
LWIgSWYgcGFyZW50IGlzIG5vdCBudWxsLCB0aGVuCkBAIC00ODUsNyArNDg2LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBKU09iamVjdCogcmVj
ZWl2ZXJPYmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAgICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBleGlzdGluZ0Rlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZXhpc3RpbmdEZXNjcmlwdG9y
Rm91bmQgPSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyA5LjEuOS4xLTQtZCBJZiBl
eGlzdGluZ0Rlc2NyaXB0b3IgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMTM2MSw3ICsxMzYy
LDcgQEAgYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlYwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+aXNFeHRlbnNpYmxl
KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWlzRXh0ZW5z
aWJsZSkgewpAQCAtMTYyMSw3ICsxNjIyLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBjYWxsVG9QcmltaQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUp
OwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgaWYgKGZ1
bmN0aW9uLmlzVW5kZWZpbmVkKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2VzSGludCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTE2NDksNyArMTY1MCw3IEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWkKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2Jq
ZWN0Kj4ob2JqZWN0KSwgY2FsbEFyZ3MpOwogICAgIEFTU0VSVCghcmVzdWx0LmlzR2V0dGVyU2V0
dGVyKCkpOwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAg
aWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGludE1v
ZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5lZCBhbiBvYmplY3Qi
KSk7CkBAIC0xNjg3LDcgKzE2ODgsNyBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFyeVRvUHJp
bWl0aXZlKEV4CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CiAKICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
Tm8gZGVmYXVsdCB2YWx1ZSIpKTsKIH0KQEAgLTE3ODcsNyArMTc4OCw3IEBAIGJvb2wgSlNPYmpl
Y3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3QodmFsdWUpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgb2JqZWN0
VmFsdWUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghb2JqZWN0VmFs
dWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MDksMTIgKzE4
MTAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcml2YQogdm9pZCBK
U09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9k
ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3Qt
PmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgyNiwx
MCArMTgyOCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFt
ZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChu
ZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE5MjcsMTYgKzE5Mjks
MjAgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogCiBkb3VibGUg
SlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNv
b24gaW4gTm9kZXMuY3BwCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgLy8g
c2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAogICAgICAgICByZXR1cm4gMC4w
OwogICAgIHJldHVybiBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiB9CiAKIEpTU3RyaW5nKiBK
U09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgcmV0
dXJuIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKTsKIH0KQEAgLTMxMTMsMTUgKzMxMTksMTggQEAg
Ym9vbCB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKAogCiBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHRocm93RXhjZXB0aW9uKQogeworICAgIFZNJiB2bSAgPSBleGVjLT52bSgpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gVHJhY2sgb24g
dGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3Vy
cmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVz
IHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4g
Y2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25m
aWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0
ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgotICAg
IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZShleGVjLT52bSgpLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgIFZNOjpEZWxldGVQcm9wZXJ0
eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmln
dXJhYmxlKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKICAgICBib29sIGlzQ3Vy
cmVudERlZmluZWQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCBjdXJyZW50KTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShl
eGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRoaXMs
IHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVk
LCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBAIC0zMjIxLDEyICszMjMwLDEzIEBAIHZv
aWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMKIHZvaWQgSlNPYmplY3Q6Omdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQog
ewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUs
IEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90b3R5
cGUodm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChu
ZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMzgsMTAgKzMyNDgsMTAg
QEAgdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobmV4dFBy
b3RvLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjU3LDcgKzMyNjcsNyBAQCBK
U1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBlCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBtZXRob2QgPSBnZXQoZXhl
YywgaWRlbnQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIGlmICghbWV0aG9kLmlzQ2VsbCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDE2ICszOSwxNiBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNT
dGF0ZSogCiAgICAgCiAgICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKICAgICBKU1ZhbHVlIGxl
bmd0aFByb3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBkb3VibGUgbGVuZ3RoQXNEb3Vi
bGUgPSBsZW5ndGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aEFzRG91YmxlID49IDAuMCAmJiBsZW5ndGhBc0Rv
dWJsZSA9PSBzdGQ6OnRydW5jKGxlbmd0aEFzRG91YmxlKSk7CiAgICAgdWludDY0X3QgbGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aEFzRG91YmxlKTsKICAgICBmb3IgKHVpbnQ2
NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgSlNWYWx1
ZSBuZXh0ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9
IHJ1bnRpbWVUeXBlRm9yVmFsdWUobmV4dCk7CkBAIC05NSw4ICs5NSwxMCBAQCBBTFdBWVNfSU5M
SU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFj
a1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8
Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNhbGxi
YWNrKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgZm91bmQgPSBjb25zdF9jYXN0PEpT
T2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4g
Y2FsbGJhY2soZm91bmQsIHNsb3QpOwogfQpAQCAtMTA0LDYgKzEwNiw3IEBAIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJl
SURUYWJsZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSB0aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZh
dWx0R2V0UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTExMSwxNCArMTE0
LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICAgICAg
U3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1
Y3R1cmVJRCgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CiAg
ICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQ
cm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlw
ZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQogICAg
ICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKTsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0x
MzMsNiArMTM2LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAog
ICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBl
RnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7
CkBAIC0xNDQsNyArMTQ4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25J
bmRleAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTE1Miw3ICsxNTYsNyBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgICAgICBwcm90b3R5
cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RydWN0dXJlKiBwcm9taXNlU3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhl
Yy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpT
UHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZtLCBwcm9taXNlU3RydWN0dXJl
KTsKICAgICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXhlYy0+YXJn
dW1lbnQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgcHJpdmF0ZToKIGlubGluZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQzMl90IGluZGV4ZWRM
ZW5ndGggPSBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywg
YmFzZSk7CiAKQEAgLTExOSwxOCArMTIwLDE4IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIHByb3BlcnQKIAogICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNR
dWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09IGJhc2UtPmdldEFycmF5
TGVuZ3RoKCkpIHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgp
KTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRp
ZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKIAogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2
bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbmFtZXMgdmVjdG9yIGNvbnRhaW5zIGFsbCBpbmRleGVk
IHByb3BlcnR5IG5hbWVzLgogICAgICAgICAvLyBTbyBkaXNhYmxlIGluZGV4ZWQgcHJvcGVydHkg
ZW51bWVyYXRpb24gcGhhc2UgYnkgc2V0dGluZyB8aW5kZXhlZExlbmd0aHwgdG8gMC4KICAgICAg
ICAgaW5kZXhlZExlbmd0aCA9IDA7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
UHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUo
KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUzODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksMTAgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ciogSlNQcm9wZXJ0eU5hbWVJdAogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhl
YywgaXRlcmF0ZWRPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVj
LCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyMDUzODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjAwLDE2ICsyMDAsMTggQEAgSlNPYmplY3QqIEpTU2NvcGU6Om9iamVjdEF0U2NvcGUo
SlNTY29wZQogLy8gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5z
Y29wYWJsZSBiZWNvbWVzIGZhbHNlLgogc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKIHsKKyAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKHNjb3BlLT50
eXBlKCkgIT0gV2l0aFNjb3BlVHlwZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNW
YWx1ZSB1bnNjb3BhYmxlcyA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS51bnNjb3BhYmxlc1N5bWJvbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghdW5zY29wYWJsZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIEpTVmFsdWUgYmxvY2tlZCA9IGpzQ2FzdDxKU09iamVjdCo+KHVuc2NvcGFibGVz
KS0+Z2V0KGV4ZWMsIGlkZW50KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICByZXR1cm4gYmxvY2tlZC50b0Jvb2xlYW4oZXhlYyk7CkBAIC0yMTcsNiArMjE5
LDggQEAgc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShFeGVjU3RhdAogCiBKU09iamVj
dCogSlNTY29wZTo6cmVzb2x2ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKIHsKKyAgICBWTSYgdm0gPSAqc2NvcGUtPnZtKCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGVuZCA9IHNjb3BlLT5lbmQoKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXQg
PSBzY29wZS0+YmVnaW4oKTsKICAgICB3aGlsZSAoMSkgewpAQCAtMjM5LDcgKzI0Myw3IEBAIEpT
T2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG9iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWlzVW5zY29w
YWJsZShleGVjLCBzY29wZSwgb2JqZWN0LCBpZGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG9iamVjdDsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29w
YWJsZSBiZWNvbWVzIGZhbHNlIik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VO
VVNFRCh0aHJvd1Njb3BlLCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSwgIldoZW4gYW4gZXhjZXB0
aW9uIG9jY3VycywgdGhlIHJlc3VsdCBvZiBpc1Vuc2NvcGFibGUgYmVjb21lcyBmYWxzZSIpOwog
ICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCwxMSBAQCB2
b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsCiAKIGJvb2wgSlNTdHJpbmc6
OmVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogb3RoZXIpIGNvbnN0CiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIHN0cjEgPSB2YWx1ZShleGVjKTsKICAgICBTdHJpbmcg
c3RyMiA9IG90aGVyLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiBXVEY6OmVxdWFsKCpzdHIxLmltcGwoKSwgKnN0cjIuaW1wbCgpKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pv
aW5lci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBA
IEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBBU1NFUlQobV9z
dHJpbmdzLnNpemUoKSA8PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBqb2luZWRMZW5ndGgoc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzIsNiArNTcyLDggQEAgVG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8Q2hh
clR5cGU+OjpMZXhlcgogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNWYWx1ZSBMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQogewor
ICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgUGFyc2VyU3RhdGUgc3RhdGUgPSBpbml0aWFsU3RhdGU7CiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgb2JqZWN0U3RhY2s7CiAgICAgSlNWYWx1ZSBsYXN0VmFsdWU7
CkBAIC01ODMsNyArNTg1LDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFy
c2UoUAogICAgICAgICAgICAgc3RhcnRQYXJzZUFycmF5OgogICAgICAgICAgICAgY2FzZSBTdGFy
dFBhcnNlQXJyYXk6IHsKICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkobV9leGVjLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAg
ICAgICAgICAgICAgICBvYmplY3RTdGFjay5hcHBlbmQoYXJyYXkpOwogICAgICAgICAgICAgfQpA
QCAtNjgxLDcgKzY4Myw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBhcnNl
KFAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUg
aWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgIT0gU3RyaWN0SlNPTiAmJiBpZGVudCA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+
dW5kZXJzY29yZVByb3RvKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RK
U09OICYmIGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRVbmRlcnNjb3JlUHJvdG8uYWRkKG9iamVjdCku
aXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9yTWVzc2Fn
ZSA9IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0
eSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTY5Myw3
ICs2OTUsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4
KGlkZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
bV9leGVjLCBpbmRleC52YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZt
KCksIGlkZW50LCBsYXN0VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnR5cGUgPT0g
VG9rQ29tbWEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYz
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpT
TWFwOjpjcmVhdGUoZXhlYywgbWFwU3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXAp
OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwpAQCAtODAsMTcgKzgwLDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRl
cmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlm
ICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
dGhPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDggKzE2MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICB1aW50MzJfdCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUlu
dDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoY2x6MzIodmFsdWUp
KSk7CiB9CkBAIC0xODUsMTMgKzE4NywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVu
Y0h5cG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBhcmdz
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIG1heCA9IDA7CiAgICAg
VmVjdG9yPGRvdWJsZSwgOD4gYXJnczsKICAgICBhcmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
YXJnc0NvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnc0NvdW50OyArK2kp
IHsKICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
aSkudG9OdW1iZXIoZXhlYykpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICAgICAgaWYgKHN0ZDo6aXNpbmYoYXJn
c1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVy
KCtzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKQEAgLTI5Miw4ICsy
OTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNJTXVsKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQzMl90IGxlZnQgPSBleGVjLT5hcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKICAgICBpbnQzMl90IHJpZ2h0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQz
MihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGxlZnQgKiByaWdo
dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1v
ZHVsZUxvYWRlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgY29uc3QgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNl
Q29kZSA9IG1ha2VTb3VyY2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKQEAgLTE0MiwxMiAr
MTQyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRN
b2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZVJlY29y
ZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoIW1vZHVsZVJlY29yZCkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKIAogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxl
UmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBzaXplX3QgaSA9
IDA7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMo
KSkKQEAgLTE1OCw2ICsxNjAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90
eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2Fz
dDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW1vZHVsZVJl
Y29yZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTE2Niw3ICsxNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRl
CiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVL
ZXkoKSwgIlxuIik7CiAKICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw5ICs2MiwxMSBA
QCB2b2lkIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyCiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1l
c3NhZ2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpLT5lcnJvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEFTU0VSVChlcnJvclN0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JT
dHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwxMSBAQCB2
b2lkIE51bWJlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWCiAvLyBFQ01BIDE1LjcuMQog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51bWJlckNv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkb3VibGUgbiA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVt
YmVyKGV4ZWMpIDogMDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAg
TnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBz
dHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjEsNiArMTIxLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVj
dAogewogICAgIE9iamVjdENvbnN0cnVjdG9yKiBvYmplY3RDb25zdHJ1Y3RvciA9IGpzQ2FzdDxP
YmplY3RDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gb2JqZWN0Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpOworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG5ld1RhcmdldCBjb25kaXRp
b24gaW4gdGhpcyBjYWxsZXIgc2lkZSBpbnN0ZWFkIG9mIEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlIHNpZGUuCiAgICAgLy8gU2luY2UgaWYgd2UgZm91bmQgdGhpcyBj
b25kaXRpb24gaXMgbWV0LCB3ZSBzaG91bGQgbm90IGZhbGwgaW50byB0aGUgdHlwZSBjb252ZXJz
aW9uIGluIHRoZSBzdGVwIDMuCkBAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgSlNPYmplY3QqIGNvbnN0cnVjdAogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0ICE9
IG9iamVjdENvbnN0cnVjdG9yKSB7CiAgICAgICAgIC8vIGEuIFJldHVybiA/IE9yZGluYXJ5Q3Jl
YXRlRnJvbUNvbnN0cnVjdG9yKE5ld1RhcmdldCwgIiVPYmplY3RQcm90b3R5cGUlIikuCiAgICAg
ICAgIFN0cnVjdHVyZSogb2JqZWN0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPm9iamVjdFN0
cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yKCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMsIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQpAQCAtMjExLDggKzIxMywxMCBAQCBK
U1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2Jq
ZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihleGVjLCBvYmplY3QpKTsKIH0KQEAgLTIzMSw3
ICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBvYmplY3RWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RWYWx1ZSk7CiAKICAgICBpZiAoIWNoZWNr
UHJvdG9TZXR0ZXJBY2Nlc3NBbGxvd2VkKGV4ZWMsIG9iamVjdCkpIHsKQEAgLTI0MSwxNiArMjQ1
LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogICAgIGJv
b2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSB0cnVlOwogICAgIGJvb2wgZGlkU2V0UHJvdG90eXBl
ID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHByb3RvVmFsdWUsIHNob3VsZFRocm93
SWZDYW50U2V0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3RvdHlwZSwgdm0uZXhjZXB0
aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3Rv
dHlwZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdFZhbHVlKTsKIH0KIAogSlNWYWx1ZSBvYmplY3RDb25zdHJ1
Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAoIW9iamVjdC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RPYmplY3RGcm9t
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwpAQCAtMjYxLDE5ICsyNjcsMjEg
QEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiBKU1ZhbHVlIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiBvYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRp
ZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIG9i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywg
cHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1
ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogcHJvcGVydGllcykgewogICAg
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBkaWRHZXRE
ZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQpAQCAt
Mjg1LDcgKzI5Myw3IEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQK
IAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChkZXNjcmlwdG9ycyk7CiAgICAgICAgIGRl
c2NyaXB0b3JzLT5wdXRPd25EYXRhUHJvcGVydHlNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZnJvbURlc2NyaXB0b3IsIHNsb3QpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGRlc2NyaXB0b3JzOwpAQCAtMjkzLDE5ICszMDEsMjMgQEAgSlNWYWx1ZSBvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1l
bnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5h
cmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgb2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgw
KS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsKIH0KQEAg
LTMxMyw4ICszMjUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFy
Z3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blBy
b3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKIH0KQEAgLTMyMiw4ICszMzYsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVzZSB0aGUg
ZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxs
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9i
amVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwogfQpAQCAtMzMxLDE2ICszNDcsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUu
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5cyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93
blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9P
YmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4
ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKIH0KQEAgLTM2MCw0MCArMzgwLDQwIEBAIGJvb2wg
dG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChkZXNjcmlwdGlv
bi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBkZXNjLnNldEVudW1lcmFibGUodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5j
b25maWd1cmFibGUpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxl
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2bS5leGNlcHRpb24oKSkK
KyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmhh
c1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZSkpIHsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBkZXNjLnNldFZhbHVlKHZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZXNjLnNl
dFdyaXRhYmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0KSkgewogICAgICAgICBKU1ZhbHVlIGdldCA9
IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFnZXQuaXNV
bmRlZmluZWQoKSkgewogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC00MDMsMTIg
KzQyMywxMiBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5zZXRHZXR0ZXIoZ2V0KTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRp
b24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpKSB7CiAgICAg
ICAgIEpTVmFsdWUgc2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuc2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoIXNldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKQEAgLTQxOCw3ICs0MzgsNyBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5zZXRTZXR0
ZXIoc2V0KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoIWRlc2MuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKQEAgLTQ0NSw3ICs0NjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3BlcnRpZXMgY2Fu
IG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIpKTsKICAgICBKU09iamVjdCogb2JqID0gYXNP
YmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRl
c2NyaXB0b3I7CiAgICAgYXV0byBzdWNjZXNzID0gdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
ZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpOwpAQCAtNDUzLDcgKzQ3Myw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEFTU0VSVCgoZGVz
Y3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlzQWNjZXNz
b3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVmaW5lT3duUHJvcGVydHkob2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRy
dWUpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9i
aik7CkBAIC00NjEsMTYgKzQ4MSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAKIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvcGVydGllcykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5t
ZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9w
ZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMoYXNPYmplY3QocHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAg
VmVjdG9yPFByb3BlcnR5RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgbWFya0J1ZmZlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHByb3AgPSBwcm9wZXJ0aWVzLT5nZXQoZXhl
YywgcHJvcGVydHlOYW1lc1tpXSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc051bGwoKTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcCwgZGVzY3JpcHRvcikp
CkBAIC00OTAsOCArNTEzLDggQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhFeGVj
U3RhdAogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07
CiAgICAgICAgIGlmIChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcml2YXRlTmFtZShwcm9wZXJ0
eU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBkZXNjcmlwdG9yc1tpXSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yc1tpXSwgdHJ1ZSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAgICAgfQogICAgIHJldHVybiBvYmplY3Q7CkBAIC01MzEsNiArNTU0LDkgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2VhbChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVy
biBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmou
aXNPYmplY3QoKSkKQEAgLTUzOCwxNCArNTY0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsK
IAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkgewotICAgICAgICBvYmplY3QtPnNl
YWwoZXhlYy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+c2VhbCh2bSk7CiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1l
ZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVy
dGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
IGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2Rl
OjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4
ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJ
bmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1l
QXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKQEAgLTU1OSwxNCArNTg1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJs
ZV1dIGlzIHRydWUsIHNldCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAgICAgICAg
IGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKICAgICAgICAgLy8gYy4gQ2FsbCB0aGUgW1tE
ZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggUCwgZGVzYywgYW5k
IHRydWUgYXMgYXJndW1lbnRzLgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywg
dHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICB9CiAK
ICAgICAvLyAzLiBTZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8g
dG8gZmFsc2UuCi0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4
dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhl
Yyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8uCkBAIC01
NzUsMTUgKzYwMSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAKIEpTT2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiBvYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0
KG9iamVjdCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkp
KSB7Ci0gICAgICAgIG9iamVjdC0+ZnJlZXplKGV4ZWMtPnZtKCkpOworICAgICAgICBvYmplY3Qt
PmZyZWV6ZSh2bSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCiAgICAgLy8gMi4g
Rm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJv
bHMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Q
cm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9w
ZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVB
cnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewpAQCAtNjAxLDE0ICs2MzAsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0
cnVjdG9yRnJlZXplKEV4ZWNTdAogICAgICAgICAvLyBjLiBJZiBkZXNjLltbQ29uZmlndXJhYmxl
XV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAg
ZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBkLiBDYWxsIHRoZSBbW0Rl
ZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQg
dHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0o
KSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0
cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3Qt
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKICAgICAvLyAzLiBTZXQg
dGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0gICAg
b2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0
LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICAvLyA0LiBSZXR1cm4gTy4KQEAgLTYxNywxMiArNjQ2LDE0IEBAIEpTT2JqZWN0KiBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShFeGVjU3QKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gTy4KICAgICBKU1ZhbHVl
IG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0g
b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXNPYmplY3Qob2JqKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC02MzksNiArNjcwLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gdHJ1
ZS4KICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlz
T2JqZWN0KCkpCkBAIC02NDYsMTIgKzY4MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAK
ICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFsZWQoZXhlYy0+dm0oKSkpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZCh2bSkp
KTsKIAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywK
ICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRp
b25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3Bl
cnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNjcw
LDEzICs3MDQsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAog
ICAgIC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIGlz
IGZhbHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAgIC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIGZh
bHNlLgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaXNFeHRlbnNpYmxlKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3pl
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY4NCwxMiArNzIxLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc0Zy
b3plbihleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzRnJvemVuKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CkBAIC03MDksMTkgKzc0NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAg
Ly8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBv
YmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9i
ai5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogICAgIGJvb2wg
aXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTczNSwxMyArNzc0
LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIEpTQXJyYXkq
IG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3Bl
cnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBkb250
RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5TmFtZUFycmF5
IHByb3BlcnRpZXMoZXhlYywgcHJvcGVydHlOYW1lTW9kZSk7CiAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU0FycmF5KiBrZXlzID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWVNb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCBpbmxpbmUgSlNPYmplY3Qq
IGNvbnN0cnVjdE9iamVjdChFeGVjU3RhCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVj
dEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIGRlc2Ny
aXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+
dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRo
aXNPYmplY3QpCkBAIC0xMDEsNiArMTA0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7
CiAgICAgaWYgKCF0aGlzT2JqKQpAQCAtMTA5LDkgKzExNSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2Jq
ZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7
CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4
ZWMtPmFyZ3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIHdoaWxl
ICh0cnVlKSB7CkBAIC0xMjAsNyArMTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90bwogICAgICAgICBpZiAodiA9PSB0aGlzT2JqKQogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICB2ID0gYXNPYmpl
Y3QodiktPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgfQogfQpA
QCAtMTMxLDcgKzEzNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJv
dG8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgZ2V0ID0gZXhlYy0+YXJndW1l
bnQoMSk7CkBAIC0xNDAsNyArMTQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJpbnZhbGlkIGdldHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTYwLDcgKzE2NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIEpTVmFsdWUgc2V0ID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xNjksNyArMTc0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIHNl
dHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQo
MCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOwpAQCAtMTg1LDEyICsxOTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
RnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBK
U09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5U2xv
dCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRP
d25Qcm9wZXJ0eSk7CkBAIC0yMTIsMTIgKzIyMCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVy
dHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6
OkdldE93blByb3BlcnR5KTsKQEAgLTIzOSwxMiArMjUwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29sIGVudW1lcmFibGUg
PSB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKQEAgLTI1NCw5ICsyNjgs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogLy8gMTUuMi40
LjMgT2JqZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygpCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIExldCBPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyBUb09iamVjdCBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFzIHRoZSBhcmd1bWVudC4KICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMi4gTGV0IHRvU3RyaW5nIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyBwYXNzaW5n
ICJ0b1N0cmluZyIgYXMgdGhlIGFyZ3VtZW50LgpAQCAtMjkyLDcgKzMwOSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCwg
WyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU2xvdCkgLT4gSlNWYWx1
ZSB7CiAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgSlNWYWx1ZSBzdHJpbmdUYWcg
PSB0b1N0cmluZ1RhZ1Nsb3QuZ2V0VmFsdWUoZXhlYywgdG9TdHJpbmdUYWdTeW1ib2wpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nVGFnLmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgICAgICAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKHZtKTsKQEAg
LTMwNyw3ICszMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiAgICAgICAgIH0KIAogICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPnRvU3RyaW5nTmFtZSh0aGlzT2JqZWN0LCBleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5ld1N0
cmluZyA9IFdURjo6dHJ5TWFrZVN0cmluZygiW29iamVjdCAiLCBXVEZNb3ZlKHRhZyksICJdIik7
CiAgICAgICAgIGlmICghbmV3U3RyaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9y
dGVuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCwxMSArNDQsMTIgQEAg
TkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogewogICAgIC8vIGV4Y2Vw
dGlvbiBmb3IgdGhlIERhdGUgZXhjZXB0aW9uIGluIGRlZmF1bHRWYWx1ZSgpCiAgICAgVk0mIHZt
ID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBwMiA9IHYy
LnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogCiAgICAgaWYgKHAxLmlzU3RyaW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDExIEBAIHZvaWQgUHJvcGVy
dHlEZXNjcmlwdG9yOjpzZXRVbmRlZmluZWQoKQogR2V0dGVyU2V0dGVyKiBQcm9wZXJ0eURlc2Ny
aXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBpZiAobV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKHZtLCBnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU09i
amVjdCo+KG1fZ2V0dGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDIzICs1NiwyMyBAQCBQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0cnVjdG9y
KFZNJiB2CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VSZXZvY2Fi
bGVQcm94eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlByb3h5LnJldm9jYWJsZSBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCB0
d28gYXJndW1lbnRzOiB0aGUgdGFyZ2V0IGFuZCB0aGUgaGFuZGxlciIpKTsKIAotICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwogICAgIEpTVmFsdWUgdGFy
Z2V0ID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0KDEpOwogICAg
IFByb3h5T2JqZWN0KiBwcm94eSA9IFByb3h5T2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCB0YXJnZXQsIGhhbmRsZXIpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgUHJveHlSZXZva2UqIHJldm9rZSA9
IFByb3h5UmV2b2tlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJv
eHlSZXZva2VTdHJ1Y3R1cmUoKSwgcHJveHkpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0s
ICJwcm94eSIpLCBwcm94eSwgTm9uZSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIG1ha2VJ
ZGVudGlmaWVyKHZtLCAicmV2b2tlIiksIHJldm9rZSwgTm9uZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDEyICs1NCwxMyBAQCBQcm94eU9iamVjdDo6UHJveHlPYmplY3QoVk0m
IHZtLCBTdHJ1Y3R1CiBTdHJpbmcgUHJveHlPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgY29uc3Qg
UHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4ob2JqZWN0KTsK
ICAgICB3aGlsZSAocHJveHkpIHsKICAgICAgICAgY29uc3QgSlNPYmplY3QqIHRhcmdldCA9IHBy
b3h5LT50YXJnZXQoKTsKICAgICAgICAgaWYgKGlzQXJyYXkoZXhlYywgdGFyZ2V0KSkKICAgICAg
ICAgICAgIHJldHVybiB0YXJnZXQtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50b1N0cmluZ05h
bWUodGFyZ2V0LCBleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgcHJveHkgPSBqc0R5bmFtaWNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4odGFyZ2V0KTsK
QEAgLTE0NCw3ICsxNDUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0
YXRlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAg
SlNWYWx1ZSBnZXRIYW5kbGVyID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBBU0NJSUxpdGVyYWwoIidnZXQnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIG9iamVjdCBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKGdldEhh
bmRsZXIuaXNVbmRlZmluZWQoKSkKQEAgLTE1NSw3ICsxNTYsNyBAQCBzdGF0aWMgSlNWYWx1ZSBw
ZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVy
VG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5
TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY2VpdmVyKTsKICAgICBKU1Zh
bHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKQEAgLTE2OSw3
ICsxNzAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICByZXR1cm4gdHJhcFJlc3VsdDsKQEAgLTE3Nyw4ICsxNzgsMTAgQEAgc3RhdGljIEpT
VmFsdWUgcGVyZm9ybVByb3h5R2V0KEV4ZWNTdGF0ZQogCiBib29sIFByb3h5T2JqZWN0OjpwZXJm
b3JtR2V0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9y
bVByb3h5R2V0KGV4ZWMsIHRoaXMsIHNsb3QudGhpc1ZhbHVlKCksIHByb3BlcnR5TmFtZSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB1bnNpZ25lZCBpZ25vcmVkQXR0
cmlidXRlcyA9IDA7CiAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBpZ25vcmVkQXR0cmlidXRlcywg
cmVzdWx0KTsKQEAgLTIxMiw3ICsyMTUsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50
ZXJuYWxNZXRob2RHCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QgPSBoYW5kbGVy
LT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwg
ImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpLCBBU0NJSUxpdGVyYWwoIidnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3InIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxs
YWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJu
IHBlcmZvcm1EZWZhdWx0R2V0T3duUHJvcGVydHkoKTsKQEAgLTIyMSw3ICsyMjQsNyBAQCBib29s
IFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAgICAgYXJndW1lbnRzLmFwcGVu
ZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pT
VmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7
CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0Lmlz
VW5kZWZpbmVkKCkgJiYgIXRyYXBSZXN1bHQuaXNPYmplY3QoKSkgewpAQCAtMjMxLDcgKzIzNCw3
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKIAogICAgIFByb3Bl
cnR5RGVzY3JpcHRvciB0YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1Rhcmdl
dFByb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcik7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0LmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTI0NCw3ICsyNDcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
SW50ZXJuYWxNZXRob2RHCiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29yayBpZiAn
dGFyZ2V0JyBpcyBhbm90aGVyIFByb3h5LiBXZSBkb24ndCBoYXZlIGlzRXh0ZW5zaWJsZSBpbXBs
ZW1lbnRlZCBpbiBhIHdheSB0aGF0IGZpdHMgdy8gUHJveHlzLgogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0Mzc1CiAgICAgICAgIGJvb2wgaXNF
eHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUp
IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB0ZXN0IGZvciB0aGlzIGVy
cm9yLiBJJ20gbm90IHN1cmUgaG93IHRvIGJlY2F1c2UKQEAgLTI1OCwxMSArMjYxLDExIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICB9CiAKICAgICBib29s
IGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRyYXBSZXN1bHRB
c0Rlc2NyaXB0b3I7CiAgICAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgdHJhcFJlc3VsdCwg
dHJhcFJlc3VsdEFzRGVzY3JpcHRvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2U7CiAgICAgYm9vbCB2YWxpZCA9IHZh
bGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgbnVsbHB0ciwgcHJvcGVydHlO
YW1lLCBpc0V4dGVuc2libGUsCkBAIC0yODEsNyArMjg0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6
cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iu
aXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNl
dHRlciA9IHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iuc2xvd0dldHRlclNldHRlcihleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBzbG90
LnNldEdldHRlclNsb3QodGhpcywgdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5hdHRyaWJ1dGVzKCks
IGdldHRlclNldHRlcik7CiAgICAgfSBlbHNlIGlmICh0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmlz
RGF0YURlc2NyaXB0b3IoKSAmJiAhdHJhcFJlc3VsdEFzRGVzY3JpcHRvci52YWx1ZSgpLmlzRW1w
dHkoKSkKQEAgLTMyMCw3ICszMjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJv
cGVydHkoRXhlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgSlNWYWx1ZSBoYXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERh
dGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIEFTQ0lJTGl0ZXJhbCgiJ2hhcycg
cHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGhhc01ldGhvZC5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSgpOwpAQCAt
MzI5LDE3ICszMzIsMTcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4
ZQogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGlk
ZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhl
YywgaGFzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFz
Qm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAgUHJv
cGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgaXNQcm9wZXJ0eURlc2Ny
aXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yKTsgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCkg
ewogICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CkBAIC0zNDcs
NyArMzUwLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJv
b2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFzJyBtdXN0IHJldHVybiAndHJ1
ZScgZm9yIGEgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgb2JqZWN0IHdpdGggYSBjb25maWd1cmFi
bGUgcHJvcGVydHkiKSk7CkBAIC00MjAsNyArNDIzLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybVB1dChFeGVjU3RhdGUqIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlOwogICAgIEpTVmFsdWUgc2V0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4
ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+c2V0LCBBU0NJSUxpdGVy
YWwoIidzZXQnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJs
ZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0
YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAoc2V0TWV0aG9kLmlzVW5kZWZpbmVkKCkp
CkBAIC00MzIsMTAgKzQzNSwxMCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNT
dGF0ZSogCiAgICAgYXJndW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1lbnRzLmFw
cGVuZCh0aGlzVmFsdWUpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgc2V0
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0
cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNDczLDggKzQ3Niw5IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWMKIGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHB1dFZhbHVl
LCBib29sIHNob3VsZFRocm93KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsgCi0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZd
ICgpIHsKICAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtNTA4
LDcgKzUxMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVl
IGFwcGx5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJhcHBseSIpLCBBU0NJSUxpdGVyYWwoIidhcHBseScgcHJv
cGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGFwcGx5TWV0aG9k
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUxOSw3ICs1MjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBj
b25zdHJ1Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4o
bnVsbHB0ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CkBAIC01NTgsNyArNTYyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgY29uc3RydWN0
TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFr
ZUlkZW50aWZpZXIodm0sICJjb25zdHJ1Y3QiKSwgQVNDSUlMaXRlcmFsKCInY29uc3RydWN0JyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY29uc3RydWN0aWJsZSIpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChjb25z
dHJ1Y3RNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTY5LDE0ICs1NzMsMTQgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIH0KIAogICAgIEpTQXJyYXkq
IGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoYXJnQXJyYXkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZXhlYy0+
bmV3VGFyZ2V0KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjb25zdHJ1Y3RN
ZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
ZiAoIXJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXN1bHQgZnJvbSBQcm94eSBoYW5kbGVyJ3MgJ2Nv
bnN0cnVjdCcgbWV0aG9kIHNob3VsZCBiZSBhbiBvYmplY3QiKSk7CkBAIC02MTksNyArNjIzLDcg
QEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVsZXRlUHJv
cGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBl
LCBtYWtlSWRlbnRpZmllcih2bSwgImRlbGV0ZVByb3BlcnR5IiksIEFTQ0lJTGl0ZXJhbCgiJ2Rl
bGV0ZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2Fs
bGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBKU09iamVj
dCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5TWV0aG9k
LmlzVW5kZWZpbmVkKCkpCkBAIC02MjksMTEgKzYzMywxMSBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtRGVsZXRlKEV4ZWNTdGF0CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50
aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWxldGVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVh
bihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0
cmFwUmVzdWx0QXNCb29sKQpAQCAtNjQ3LDcgKzY1MSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBl
cmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5Myw3ICs2OTcsNyBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBwcmV2ZW50RXh0
ZW5zaW9uc01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5
cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAicHJldmVudEV4dGVuc2lvbnMiKSwgQVNDSUlMaXRlcmFs
KCIncHJldmVudEV4dGVuc2lvbnMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3Vs
ZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAocHJldmVudEV4dGVu
c2lvbnNNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTcwMiwxNiArNzA2LDE2IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW8KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUg
dHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgcHJldmVudEV4dGVuc2lvbnNNZXRob2QsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jv
b2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
ICh0cmFwUmVzdWx0QXNCb29sKSB7CiAgICAgICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0g
dGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkgewogICAg
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94
eSdzICdwcmV2ZW50RXh0ZW5zaW9ucycgdHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGl0
cyB0YXJnZXQgaXMgZXh0ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7
CkBAIC03NDYsNyArNzUwLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJs
ZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAg
IEpTVmFsdWUgaXNFeHRlbnNpYmxlTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNh
bGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJpc0V4dGVuc2libGUiKSwgQVND
SUlMaXRlcmFsKCInaXNFeHRlbnNpYmxlJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTc1NiwxNSArNzYw
LDE1IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1Jc0V4dGVuc2libGUoRXgKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaXNFeHRlbnNpYmxlTWV0aG9k
LCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBS
ZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIGlzVGFyZ2V0RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodHJhcFJl
c3VsdEFzQm9vbCAhPSBpc1RhcmdldEV4dGVuc2libGUpIHsKQEAgLTgxMywxNCArODE3LDE0IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGRlZmluZVByb3Bl
cnR5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
dm0ucHJvcGVydHlOYW1lcy0+ZGVmaW5lUHJvcGVydHksIEFTQ0lJTGl0ZXJhbCgiJ2RlZmluZVBy
b3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUi
KSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZWZpbmVQcm9wZXJ0
eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHREZWZp
bmVPd25Qcm9wZXJ0eSgpOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0b3JPYmplY3QgPSBjb25z
dHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1
bWVudHM7CkBAIC04MjgsMTEgKzgzMiwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVm
aW5lT3duUHJvcGVyCiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGlj
SlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGRlc2NyaXB0b3JPYmplY3QpOwogICAgIEpTVmFsdWUg
dHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZGVmaW5lUHJvcGVydHlNZXRob2QsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJlc3VsdEFz
Qm9vbCkKQEAgLTg0MCwxMSArODQ0LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZp
bmVPd25Qcm9wZXIKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlwdG9yOwog
ICAgIGJvb2wgaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVy
dHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0g
dGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBib29sIHNldHRpbmdDb25maWd1cmFibGVUb0ZhbHNlID0gZGVzY3JpcHRvci5jb25maWd1
cmFibGVQcmVzZW50KCkgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCk7CiAKQEAgLTkwMiw3
ICs5MDYsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBv
d25LZXlzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksIEFTQ0lJTGl0ZXJhbCgiJ293bktleXMn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQo
KTsKICAgICBpZiAob3duS2V5c01ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBAIC05MTMsNyArOTE3
LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7
CiAgICAgSlNWYWx1ZSBhcnJheUxpa2VPYmplY3QgPSBjYWxsKGV4ZWMsIG93bktleXNNZXRob2Qs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlID0gdHJhcFJl
c3VsdC5tb2RlKCk7CkBAIC05NDEsNyArOTQ1LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9y
bUdldE93blByb3BlcnR5TgogICAgICAgICAgICAgcmV0dXJuIGRvbnRFeGl0RWFybHk7CiAKICAg
ICAgICAgSWRlbnRpZmllciBpZGVudCA9IHZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBkb0V4aXRFYXJseTsKIAogICAgICAgICB1bmNo
ZWNrZWRSZXN1bHRLZXlzLmFkZChpZGVudC5pbXBsKCkpOwpAQCAtOTUwLDIxICs5NTQsMjEgQEAg
dm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIH07CiAKICAgICBj
cmVhdGVMaXN0RnJvbUFycmF5TGlrZShleGVjLCBhcnJheUxpa2VPYmplY3QsIGRvbnRUaHJvd0Fu
RXhjZXB0aW9uVHlwZUZpbHRlciwgQVNDSUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ293bktl
eXMnIG1ldGhvZCBtdXN0IHJldHVybiBhbiBhcnJheS1saWtlIG9iamVjdCBjb250YWluaW5nIG9u
bHkgU3RyaW5ncyBhbmQgU3ltYm9scyIpLCBhZGRQcm9wTmFtZSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXMoJnZtLCBwcm9wZXJ0
eU5hbWVNb2RlKTsKICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyh0YXJnZXQsIGV4ZWMsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9kZSk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25m
aWd1cmFibGVLZXlzOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldE5vbkNv
bmZpZ3VyYWJsZUtleXM7CiAgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6IHRhcmdl
dEtleXMpIHsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAg
IGJvb2wgaXNQcm9wZXJ0eURlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBpZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKLSAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoaXNQcm9wZXJ0eURlZmluZWQgJiYgIWRlc2NyaXB0
b3IuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICB0YXJnZXROb25Db25maWd1cmFibGVLZXlz
LmFwcGVuZChpZGVudC5pbXBsKCkpOwpAQCAtMTA1Myw3ICsxMDU3LDcgQEAgYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybVNldFByb3RvdHlwZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgc2V0UHJvdG90eXBlT2ZNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgInNldFByb3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ3NldFByb3RvdHlwZU9mJyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKQEAgLTEwNjQsMTEgKzEwNjgsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bVNldFByb3RvdHlwZShFeAogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHByb3RvdHlwZSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChl
eGVjLCBzZXRQcm90b3R5cGVPZk1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBS
ZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkgewpAQCAtMTA3
OCwxMyArMTA4MiwxMyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4
CiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh0YXJnZXRJ
c0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQ
cm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNhbWVWYWx1ZShleGVjLCBwcm90b3R5cGUsIHRhcmdl
dFByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJQcm94eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAgcmV0dXJuZWQgdHJ1ZSB3aGVu
IGl0cyB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUgYW5kIHRoZSBuZXcgcHJvdG90eXBlIHZhbHVl
IGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwcm90b3R5cGUgdmFsdWUuIEl0IHNob3Vs
ZCBoYXZlIHJldHVybmVkIGZhbHNlIikpOwpAQCAtMTExOCw3ICsxMTIyLDcgQEAgSlNWYWx1ZSBQ
cm94eU9iamVjdDo6cGVyZm9ybUdldFByb3RvdHlwZQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlT2ZNZXRob2Qg
PSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRp
Zmllcih2bSwgImdldFByb3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldFByb3RvdHlwZU9m
JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBKU09iamVjdCogdGFyZ2V0ID0g
dGhpcy0+dGFyZ2V0KCk7CkBAIC0xMTI4LDcgKzExMzIsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0
OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRz
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQg
PSBjYWxsKGV4ZWMsIGdldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhh
bmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAg
ICBpZiAoIXRyYXBSZXN1bHQuaXNPYmplY3QoKSAmJiAhdHJhcFJlc3VsdC5pc051bGwoKSkgewpA
QCAtMTEzNywxMyArMTE0MSwxMyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJv
dG90eXBlCiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlz
RXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICBp
ZiAodGFyZ2V0SXNFeHRlbnNpYmxlKQogICAgICAgICByZXR1cm4gdHJhcFJlc3VsdDsKIAogICAg
IEpTVmFsdWUgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICghc2FtZVZhbHVlKGV4
ZWMsIHRhcmdldFByb3RvdHlwZSwgdHJhcFJlc3VsdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdnZXRQcm90b3R5cGVPZicg
dHJhcCBmb3IgYSBub24tZXh0ZW5zaWJsZSB0YXJnZXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2
YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJvdG90eXBlIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0pOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
b25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1
bWVudHMsIG5ld1RhcmdldCkpOwpAQCAtMTM5LDE0ICsxMzksMTQgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0aGUgZmlyc3Qg
YXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAoIXRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmlidXRlcygp
ICYgQWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICAvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5IHNob3VsZCBub3QgdGhy
b3cgYW4gZXJyb3Igd2hlbiB0aGUgZGVmaW5lT3duUHJvcGVydHkgb3BlcmF0aW9uIGZhaWxzLgog
ICAgIGJvb2wgc2hvdWxkVGhyb3cgPSBmYWxzZTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVj
dC5nZXQgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAKICAg
ICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJv
cGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTIwMCw3
ICsyMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAKICAgICBhdXRvIGtleSA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMs
IGFzT2JqZWN0KHRhcmdldCksIGtleSkpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0Lmlz
RXh0ZW5zaWJsZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsK
IAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+aXNFeHRlbnNpYmxl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxl
KSk7CiB9CkBAIC0yNTcsNyArMjU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMgcmVx
dWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KHRhcmdldCk7CiAgICAgYm9vbCByZXN1bHQgPSBvYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQpAQCAtMjc0LDcgKzI3NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBKU09iamVj
dCogdGFyZ2V0T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
VmFsdWUgcmVjZWl2ZXIgPSB0YXJnZXQ7CkBAIC0zMDcsNyArMzA3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2Fu
dFNldCA9IGZhbHNlOwogICAgIGJvb2wgZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQcm90
b3R5cGUodm0sIGV4ZWMsIHByb3RvLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihkaWRTZXRQcm90b3R5cGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEzICsyMTYsMTMgQEAgaW5saW5l
IFJlZ0V4cEZsYWdzIHRvRmxhZ3MoRXhlY1N0YXRlKiBleAogICAgIGlmIChmbGFncy5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gTm9GbGFnczsKICAgICBKU1N0cmluZyogZmxhZ3NTdHJp
bmcgPSBmbGFncy50b1N0cmluZyhleGVjKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgZmxhZ3NTdHJpbmcpOwogICAgIGlmICghZmxhZ3NTdHJpbmcpIHsKLSAgICAgICAgQVNTRVJU
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRGbGFnczsKICAg
ICB9CiAKICAgICBSZWdFeHBGbGFncyByZXN1bHQgPSByZWdFeHBGbGFncyhmbGFnc1N0cmluZy0+
dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSW52YWxpZEZsYWdzOwog
ICAgIGlmIChyZXN1bHQgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICB0aHJvd1N5bnRheEVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVn
RXhwIGNvbnN0cnVjdG9yLiIpKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgSlNPYmplY3Qq
IHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmlzVW5kZWZpbmVk
KCkgPyBlbXB0eVN0cmluZygpIDogcGF0dGVybkFyZy50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVnRXhwRmxh
Z3MgZmxhZ3MgPSB0b0ZsYWdzKGV4ZWMsIGZsYWdzQXJnKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBz
dGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhw
LT5lcnJvck1lc3NhZ2UoKSkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdF
eHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIHN0
cnVjdHVyZSwgcmVnRXhwKTsKIH0KQEAgLTI1NSw2ICsyNTUsNyBAQCBzdGF0aWMgSlNPYmplY3Qq
IHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNT
dGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYg
YXJncywgIEpTT2JqZWN0KiBjYWxsZWUsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgcGF0dGVybkFyZyA9IGFyZ3MuYXQoMCk7CiAgICAgSlNWYWx1ZSBmbGFn
c0FyZyA9IGFyZ3MuYXQoMSk7CiAKQEAgLTI2Myw3ICsyNjQsNyBAQCBKU09iamVjdCogY29uc3Ry
dWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBpZiAobmV3VGFyZ2V0LmlzVW5kZWZpbmVk
KCkgJiYgY29uc3RydWN0QXNSZWdleHAgJiYgZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewogICAg
ICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gcGF0dGVybkFyZy5nZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+Y29uc3RydWN0b3IpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgaWYgKGNhbGxlZSA9PSBjb25zdHJ1Y3RvcikgewogICAgICAgICAg
ICAgLy8gV2Uga25vdyB0aGF0IHBhdHRlcm5BcmcgaXMgYSBvYmplY3Qgb3RoZXJ3aXNlIGNvbnN0
cnVjdEFzUmVnZXhwIHdvdWxkIGJlIGZhbHNlLgpAQCAtMjc0LDcgKzI3NSw3IEBAIEpTT2JqZWN0
KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoaXNQYXR0ZXJuUmVnRXhw
KSB7CiAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KHBhdHRl
cm5BcmcpLT5yZWdFeHAoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdF
eHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoIWZsYWdz
QXJnLmlzVW5kZWZpbmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDEyICsxMzMsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cENvbnN0cnVj
dG9yOjpyZQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSZWdFeHAoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBKU1Zh
bHVlIG1hdGNoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tYXRj
aFN5bWJvbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1hdGNoVmFs
dWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1hdGNoVmFsdWUudG9Cb29sZWFuKGV4
ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgSlNW
YWx1ZSBjb2xsZWN0TWF0Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZQogICAgIHN0YXRpYyB1bnNpZ25l
ZCBtYXhTaXplRm9yRGlyZWN0UGF0aCA9IDEwMDAwMDsKICAgICAKICAgICBKU0FycmF5KiBhcnJh
eSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gaXRlcmF0ZSA9IFsmXSAo
KSB7CkBAIC0yMzMsMTQgKzIzMywxNCBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwg
RXhlY1N0YXRlCiAKIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3RhdGUq
IGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMtPnJlZ0V4cCgp
OwogCiAgICAgQVNTRVJUKHJlZ0V4cC0+Z2xvYmFsKCkpOwogCi0gICAgVk0qIHZtID0gJmdsb2Jh
bE9iamVjdC0+dm0oKTsKLQogICAgIHNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgcyA9IHN0cmluZy0+
dmFsdWUoZXhlYyk7CkBAIC0yNDksMTQgKzI0OSwxNCBAQCBKU1ZhbHVlIFJlZ0V4cE9iamVjdDo6
bWF0Y2hHbG9iYWwoRXhlY1N0CiAgICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKSB7CiAgICAgICAg
IHVuc2lnbmVkIHN0cmluZ0xlbmd0aCA9IHMubGVuZ3RoKCk7CiAgICAgICAgIHJldHVybiBjb2xs
ZWN0TWF0Y2hlcygKLSAgICAgICAgICAgICp2bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25z
dHJ1Y3RvciwgcmVnRXhwLAorICAgICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhw
Q29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6
ZV90IHsKICAgICAgICAgICAgICAgICByZXR1cm4gYWR2YW5jZVN0cmluZ1VuaWNvZGUocywgc3Ry
aW5nTGVuZ3RoLCBlbmQpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIHJldHVy
biBjb2xsZWN0TWF0Y2hlcygKLSAgICAgICAgKnZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENv
bnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENv
bnN0cnVjdG9yLCByZWdFeHAsCiAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6ZV90IHsK
ICAgICAgICAgICAgIHJldHVybiBlbmQgKyAxOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEzICsxNTksMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9i
amVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHBhdHRl
cm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZW1wdHlTdHJpbmcoKSA6IGFyZzAudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIFJlZ0V4cEZs
YWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAgaWYgKCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgaWYgKGZs
YWdzID09IEludmFsaWRGbGFncykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFs
aWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKSk7CkBAIC0xODksMjEg
KzE4OSwyMiBAQCBzdGF0aWMgaW5saW5lIEZsYWdzU3RyaW5nIGZsYWdzU3RyaW5nKEV4CiAgICAg
c3RyaW5nWzBdID0gMDsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBnbG9iYWxWYWx1ZSA9
IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgaWdub3JlQ2FzZVZhbHVlID0gcmVn
ZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgbXVsdGlsaW5lVmFsdWUgPSByZWdl
eHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIHN0cmluZzsKICAgICBKU1ZhbHVlIHVuaWNvZGVWYWx1ZSA9IHJlZ2V4cC0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmljb2RlKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIHN0cmluZzsKICAgICBKU1ZhbHVlIHN0aWNreVZhbHVlID0gcmVnZXhwLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnN0aWNreSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBz
dHJpbmc7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CkBAIC0yMzgsMTcgKzIzOSwxNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1ZhbHVlIHNvdXJjZVZh
bHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
U3RyaW5nIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5mbGFncyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgU3RyaW5nIGZsYWdzID0gZmxhZ3NWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgJy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpKTsKQEAgLTMzOSw3ICszNDAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdF
eHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYW4gb2JqZWN0
IikpOwogCiAgICAgYXV0byBmbGFncyA9IGZsYWdzU3RyaW5nKGV4ZWMsIGFzT2JqZWN0KHRoaXNW
YWx1ZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBm
bGFncy5kYXRhKCkpKTsKQEAgLTQ3MiwxMiArNDczLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBSZWdFeHAqIHJlZ0V4
cCA9IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpOwogCiAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAg
IFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiBy
ZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29u
c3RydWN0b3IoKTsKQEAgLTU4NCw3ICs1ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHJlZ0V4cFByb3RvCiAgICAgLy8gMy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IFMg
YmUgPyBUb1N0cmluZyhzdHJpbmcpLgogICAgIEpTU3RyaW5nKiBpbnB1dFN0cmluZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIFN0cmluZyBpbnB1dCA9IGlucHV0U3Ry
aW5nLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoIWlucHV0LmlzTnVsbCgpKTsKIApAQCAtNTk5LDcg
KzYwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAv
LyAxMS4gTGV0IEEgYmUgQXJyYXlDcmVhdGUoMCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJl
IDAuCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAg
ICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0
cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4ZWMsIHNldFN0cnVj
dHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtNzIs
NyArNzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5j
dGlvbiA9IHNldC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGQpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBkb3VibGUgY29kZVBvaW50QXNEb3VibGUgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
ICAgICB1aW50MzJfdCBjb2RlUG9pbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY29kZVBvaW50
QXNEb3VibGUpOwpAQCAtMTIxLDEwICsxMjEsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFs
T2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICghZXhlYy0+YXJndW1l
bnRDb3VudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDgg
QEAgc3RhdGljIGJvb2wgaXNTdHJpbmdPd25Qcm9wZXJ0eShFeGVjU3RhdAogCiBib29sIFN0cmlu
Z09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3Ry
aW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9iamVjdCk7CiAK
ICAgICBpZiAoaXNTdHJpbmdPd25Qcm9wZXJ0eShleGVjLCB0aGlzT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpKSB7CkBAIC0xMjAsNyArMTIyLDcgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KEpTTwogICAgICAgICBib29sIGlzQ3VycmVudERlZmluZWQgPSB0aGlzT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50KTsKICAg
ICAgICAgQVNTRVJUKGlzQ3VycmVudERlZmluZWQpOwogICAgICAgICBib29sIGlzRXh0ZW5zaWJs
ZSA9IHRoaXNPYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdmFsaWRhdGVBbmRBcHBs
eVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5z
aWJsZSwgZGVzY3JpcHRvciwgaXNDdXJyZW50RGVmaW5lZCwgY3VycmVudCwgdGhyb3dFeGNlcHRp
b24pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc3
LDkgKzQ3NywxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAg
ICAgVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIEpTVmFsdWUgc2Vh
cmNoVmFsdWUsIENhbGxEYXRhJiBjYWxsRGF0YSwKICAgICBDYWxsVHlwZSBjYWxsVHlwZSwgU3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5nJiBz
b3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIHNvdXJjZUxlbiA9IHNv
dXJjZS5sZW5ndGgoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCA9IGFzUmVn
RXhwT2JqZWN0KHNlYXJjaFZhbHVlKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHJlZ0V4cE9iamVj
dC0+cmVnRXhwKCk7CkBAIC00ODgsNyArNDkwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5j
b2RlZEpTVmFsdWUgcmVwbAogICAgIGlmIChnbG9iYWwpIHsKICAgICAgICAgLy8gRVM1LjEgMTUu
NS40LjEwIHN0ZXAgOC5hLgogICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVj
LCAwKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Ok5vbmUgJiYgIXJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKQpAQCAtNTExLDcgKzUxMyw3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgaW50IGFy
Z0NvdW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSArIDI7CiAgICAgICAgIEpTRnVu
Y3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHJlcGxhY2VWYWx1ZSk7CiAgICAgICAg
IENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CkBAIC01MzksNyArNTQxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVkQ2FsbC5jYWxs
KCk7CiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3VsdC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsKQEAgLTU3OCw3
ICs1ODAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAg
ICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAg
ICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpAQCAtNjE4LDcgKzYyMCw3IEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBhcmdz
LmFwcGVuZChzdHJpbmcpOwogCiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChj
YWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1VuZGVmaW5lZCgp
LCBhcmdzKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBpbnQgcmVwbExlbiA9IHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpOwpAQCAtNjU4LDEyICs2
NjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdAogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIFJlZ0V4cCogcmVnRXhwID0gc2VhcmNoVmFsdWUtPnJlZ0V4cCgpOwogICAgIGlm
IChyZWdFeHAtPmdsb2JhbCgpKSB7CiAgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4xMCBzdGVwIDgu
YS4KICAgICAgICAgc2VhcmNoVmFsdWUtPnNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgcmV0dXJuIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZtLCBleGVjLCB0
aGlzVmFsdWUsIHRoaXNWYWx1ZS0+dmFsdWUoZXhlYyksIHJlZ0V4cCk7CiAgICAgfQpAQCAtNjg4
LDEyICs2OTEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25TdAog
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdSZWdFeHBT
ZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIEpTVmFsdWUg
c2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogeworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZzsK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxE
YXRhKHJlcGxhY2VWYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZTo6Tm9uZSkgewogICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC03MDEs
MTEgKzcwNiwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAg
ICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwgY2FsbFR5cGUs
IHJlcGxhY2VtZW50U3RyaW5nLCByZXBsYWNlVmFsdWUpOwogfQogCi1zdGF0aWMgQUxXQVlTX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goVk0mLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTU3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1
ZSByZXBsYWNlVmFsdWUpCitzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBs
YWNlVXNpbmdTdHJpbmdTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBq
c1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3Ry
aW5nJiBzdHJpbmcgPSBqc1N0cmluZy0+dmFsdWUoZXhlYyk7CiAgICAgU3RyaW5nIHNlYXJjaFN0
cmluZyA9IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IHNpemVfdCBtYXRjaFN0YXJ0ID0gc3RyaW5nLmZpbmQoc2VhcmNoU3RyaW5nKTsKQEAgLTcyMSwx
MiArNzI4LDEyIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobWF0Y2hTdGFydCkpOwogICAgICAgICBhcmdzLmFw
cGVuZChqc1N0cmluZyk7CiAgICAgICAgIHJlcGxhY2VWYWx1ZSA9IGNhbGwoZXhlYywgcmVwbGFj
ZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KIAogICAgIFN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ0ltcGwqIHN0cmlu
Z0ltcGwgPSBzdHJpbmcuaW1wbCgpOwpAQCAtODExLDE1ICs4MTgsMTggQEAgQUxXQVlTX0lOTElO
RSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlKAogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIHJlcGxhY2Uodm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIHJlcGxhY2VW
YWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVVzaW5nUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTgzMSw4
ICs4NDEsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxhY2VVc2luZ1N0
cmluZ1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0cmlu
Zyogc3RyaW5nID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBy
ZXR1cm4gcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKGV4ZWMtPnZtKCksIGV4ZWMsIHN0cmluZywg
ZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKQEAgLTk0MSw3ICs5NTQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgZG91YmxlIGRvdWJsZVBvc2l0aW9uID0gYXJndW1lbnQwLnRvSW50ZWdlcihleGVjKTsK
QEAgLTEwNTMsNyArMTA2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRo
aXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpbnQgbGVuID0g
cy5sZW5ndGgoKTsKQEAgLTExMTEsMjAgKzExMjQsMjEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
Ym9vbCBzcGxpdFN0cmluZ0J5TwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNrT2Jq
ZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAgLy8gMy4gTGV0IFMgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBnaXZpbmcgaXQgdGhlIHRoaXMgdmFsdWUgYXMgaXRzIGFy
Z3VtZW50LgogICAgIC8vIDcuIExldCBzIGJlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBT
LgogICAgIFN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5wdXQuaXNOdWxsKCkpOwogCiAgICAgLy8gNC4gTGV0
IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRlZCBhcyBpZiBieSB0aGUgZXhwcmVzc2lvbiBuZXcgQXJy
YXkoKQogICAgIC8vICAgIHdoZXJlIEFycmF5IGlzIHRoZSBzdGFuZGFyZCBidWlsdC1pbiBjb25z
dHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDUuIExldCBsZW5ndGhBIGJlIDAu
CkBAIC0xMTQxLDcgKzExNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgLy8gICAgb3RoZXJ3aXNlIGxldCBSID0gVG9TdHJpbmcoc2VwYXJhdG9yKS4K
ICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7
CiAgICAgU3RyaW5nIHNlcGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAxMC4gSWYgbGltID09IDAsIHJldHVybiBBLgpA
QCAtMTI1MCw3ICsxMjY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogICAgICAgICBsZW4gPSBqc1N0cmluZy0+bGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgdVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CiAgICAgfQpAQCAt
MTMwMyw3ICsxMzE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBK
U1N0cmluZyoganNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBK
U1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xMzc3LDEyICsxMzkxLDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2Jq
ZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAg
ICAgU3RyaW5nIHN0ciA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKENvbGxhdG9yKCkuY29sbGF0ZShzLCBzdHIp
KSk7CiB9CkBAIC0xNDAzLDcgKzE0MTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2Nh
bGVDYXNlKEV4ZWNTCiAgICAgY29uc3QgU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoc3RhdGUpOwog
CiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoUykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gT3B0aW1pemF0aW9u
IGZvciBlbXB0eSBzdHJpbmdzLgpAQCAtMTQxNCw3ICsxNDI4LDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjUwogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExv
Y2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKIAogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIC8vIDYuIExldCBsZW4gYmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiByZXF1ZXN0ZWRM
b2NhbGVzLgpAQCAtMTQ5OCw3ICsxNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxiaWc+Iiwg
cywgIjwvYmlnPiIpKTsKIH0KQEAgLTE1MTIsNyArMTUyNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8c21hbGw+IiwgcywgIjwvc21hbGw+IikpOwogfQpAQCAtMTUyNiw3ICsxNTQwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZp
YWxTdHJpbmcoZXhlYywgIjxibGluaz4iLCBzLCAiPC9ibGluaz4iKSk7CiB9CkBAIC0xNTQwLDcg
KzE1NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGI+IiwgcywgIjwvYj4iKSk7CiB9CkBAIC0x
NTU0LDcgKzE1NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHR0PiIsIHMsICI8L3R0PiIpKTsK
IH0KQEAgLTE1NjgsNyArMTU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8aT4iLCBzLCAiPC9p
PiIpKTsKIH0KQEAgLTE1ODIsNyArMTU5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3RyaWtl
PiIsIHMsICI8L3N0cmlrZT4iKSk7CiB9CkBAIC0xNTk2LDcgKzE2MTAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJj
aWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmlu
ZyhleGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQpAQCAtMTYxMCw3ICsxNjI0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKIH0KQEAgLTE2MjQsNyAr
MTYzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJn
dW1lbnQoMCk7CkBAIC0xNjQzLDcgKzE2NTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3Ry
aW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTY5OCw3ICsxNzEyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAg
LTE3MTcsNyArMTczMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNzY1LDcgKzE3NzksNyBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHVuc2lnbmVk
IGxlZnQgPSAwOwpAQCAtMTgyMywxOCArMTgzNywxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2bSwgZXhl
YywgYTApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNX
aXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25B
cmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE4NDQsNyArMTg1OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBlbHNlIHsKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3RhcnQgPSBj
bGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAs
IGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xODYxLDE4ICsxODc1LDE4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2Vh
cmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmVuZHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7CkBAIC0xODgz
LDcgKzE4OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAg
ICAgICAgIGVuZCA9IHN0ZDo6bWF4KDAsIGVuZFBvc2l0aW9uQXJnLmFzSW50MzIoKSk7CiAgICAg
ZWxzZSBpZiAoIWVuZFBvc2l0aW9uQXJnLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZW5kID0g
Y2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQoZW5kUG9zaXRpb25BcmcudG9JbnRlZ2VyKGV4ZWMp
LCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTg5MiwxMyArMTkwNiwx
NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVzSW1wbChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0cmluZyBzZWFyY2hTdHJp
bmcsIEpTVmFsdWUgcG9zaXRpb25BcmcpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKICAgICBpZiAocG9zaXRpb25B
cmcuaXNJbnQzMigpKQogICAgICAgICBzdGFydCA9IHN0ZDo6bWF4KDAsIHBvc2l0aW9uQXJnLmFz
SW50MzIoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1Rv
U2VhcmNoSW4ubGVuZ3RoKCk7CiAgICAgICAgIHN0YXJ0ID0gY2xhbXBBbmRUcnVuY2F0ZVRvVW5z
aWduZWQocG9zaXRpb25BcmcudG9JbnRlZ2VyKGV4ZWMpLCAwLCBsZW5ndGgpOwotICAgICAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KIApAQCAtMTkxNSwxOCArMTkzMCwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2bSwgZXhlYywg
YTApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAg
ICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyBj
YW5ub3QgYmUgYSBSZWdFeHAiKTsKIAogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0g
ZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xOTM2LDE3ICsxOTUxLDE5IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAg
IEFTU0VSVChjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKTsKIAogICAgIFN0cmluZyBz
dHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBhMC50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhl
Yy0+YXJndW1lbnQoMSk7CkBAIC0yMDAyLDE0ICsyMDE5LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIGZvcm0gPSBVTk9STV9O
RkM7CiAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGFuZCBpcyBu
b3QgdW5kZWZpbmVkLgogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkg
ewogICAgICAgICBTdHJpbmcgZm9ybVN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBp
ZiAoZm9ybVN0cmluZyA9PSAiTkZDIikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsMTEgKzk2LDE0IEBAIENhbGxUeXBlIFN5bWJvbENvbnN0cnVjdG9y
OjpnZXRDYWxsRGF0YSgKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzeW1ib2xDb25z
dHJ1Y3RvckZvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0cmlu
Zyogc3RyaW5nS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
U3RyaW5nIHN0cmluZyA9IHN0cmluZ0tleS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuc3lt
Ym9sUmVnaXN0cnkoKS5zeW1ib2xGb3JLZXkoc3RyaW5nKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHJldmlzaW9u
IDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTMgQEAgSlNBcnJheSogVGVtcGxh
dGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYgogICAgICAgICByZXR1cm4gY2FjaGVkOwogCiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgdW5zaWduZWQgY291bnQgPSB0ZW1wbGF0ZUtleS5jb29rZWRTdHJpbmdzKCku
c2l6ZSgpOwogICAgIEpTQXJyYXkqIHRlbXBsYXRlT2JqZWN0ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCBjb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBKU0FycmF5KiByYXdPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5k
ZXgpIHsKQEAgLTYwLDEyICs2MSwxMiBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRU
ZW1wbGF0ZU9iCiAgICAgfQogCiAgICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgcmF3
T2JqZWN0KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5yYXcsIHJhd09iamVjdCwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOwogCiAgICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgdGVt
cGxhdGVPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgbV90ZW1wbGF0ZU1hcC5zZXQodGVtcGxh
dGVLZXksIHRlbXBsYXRlT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVGhyb3dTY29wZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwy
NiArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUaHJvd1Njb3BlLmgi
CiAKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotI2lmIEVOQUJMRShU
SFJPV19TQ09QRV9WRVJJRklDQVRJT04pCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIExvZ3MgYWxsIFRo
cm93U2NvcGUgYWN0aXZpdHkgdG8gaGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0
aW9uIGZhaWx1cmUuCi1ib29sIHRyYWNlT24gPSBmYWxzZTsKLQotLy8gQSBtb3JlIHZlcmJvc2Ug
bG9nZ2luZyBvcHRpb24gdG8gZHVtcCB0aGUgQysrIHN0YWNrIHRyYWNlIGF0IHN0cmF0ZWdpYyBw
b2ludHMgdG8gYWlkIGRlYnVnZ2luZy4KLWJvb2wgdHJhY2VXaXRoU3RhY2tUcmFjZXMgPSBmYWxz
ZTsKLQotLy8gRGlzYWJsZWQgdGVtcG9yYXJpbHkgdW50aWwgYWxsIGtub3duIHZlcmlmaWNhdGlv
biBmYWlsdXJlcyBhcmUgZml4ZWQuCi1ib29sIHZlcmlmaWNhdGlvbk9uID0gZmFsc2U7Ci0KLXVu
c2lnbmVkIHRyYWNlQ291bnQgPSAwOwotfTsKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZF
UklGSUNBVElPTikKIAogLyoKICAgICBUaHJvd1Njb3BlIHZlcmlmaWNhdGlvbiB3b3JrcyB0byBz
aW11bGF0ZSBleGNlcHRpb24gdGhyb3dzIGFuZCBjYXRjaCBjYXNlcyB3aGVyZQpAQCAtMjIwLDcg
KzIwNyw3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogCiAgICAgYi4gVHVybiBvbiBUaHJv
d1Njb3BlIHRyYWNpbmcKICAKLSAgICAgICBKdXN0IHNldCB0cmFjZU9uPXRydWUgYXQgdGhlIHRv
cCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJlYnVpbGQuIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQK
KyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50cz10cnVlIGluIHRoZSBW
TSwgYW5kIHJlYnVpbGQuIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQKICAgICAgICBzZWUgYSB0cmFj
ZSBvZiBUaHJvd1Njb3BlcyBiZWluZyBlbnRlcmVkIGFuZCBleGl0ZWQgYXMgd2VsbCBhcyB0aGVp
ciBkZXB0aCBlLmcuCiAKICAgICBUaHJvd1Njb3BlIFsxXSBFbnRlcjogbGxpbnRfc2xvd19wYXRo
X2pmYWxzZSBAIC9Wb2x1bWVzL0RhdGEvd3M2L09wZW5Tb3VyY2UvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoxMDMyCkBAIC0yMzQsNyArMjIxLDcgQEAgdW5z
aWduZWQgdHJhY2VDb3VudCA9IDA7CiAKICAgICBjLiBUdXJuIG9uIFRocm93U2NvcGUgc3RhY2sg
ZHVtcHMKIAotICAgICAgIEp1c3Qgc2V0IHRyYWNlV2l0aFN0YWNrVHJhY2VzPXRydWUgYXQgdGhl
IHRvcCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJlYnVpbGQuCisgICAgICAgSnVzdCBzZXQgVk06
Om1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCBpbiB0aGUgVk0s
IGFuZCByZWJ1aWxkLgogICAgICAgIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQgc2VlIGEgc3RhY2sg
dHJhY2VzIGF0IHZhcmlvdXMgcmVsZXZhbnQgVGhyb3dTY29wZSBldmVudHMuCiAKICAgICBkLiBV
c2luZyB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjaygpCkBAIC0yNDksMzMgKzIzNiwxOCBAQCB1
bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKICAgICAgICBpLmUuIHRoZSBvbmUgdGhhdCBwcmVjZWRl
ZCB0aGUgdGhyb3dTY29wZVByaW50SWZOZWVkQ2hlY2soKSB0aGF0IHByaW50ZWQgYSBsaW5lLgog
Ki8KIAotVGhyb3dTY29wZTo6VGhyb3dTY29wZShWTSYgdm0sIFRocm93U2NvcGVMb2NhdGlvbiBs
b2NhdGlvbikKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3ByZXZpb3VzU2NvcGUodm0ubV90b3BU
aHJvd1Njb3BlKQotICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKLSAgICAsIG1fZGVwdGgobV9w
cmV2aW91c1Njb3BlID8gbV9wcmV2aW91c1Njb3BlLT5tX2RlcHRoICsgMSA6IDApCitUaHJvd1Nj
b3BlOjpUaHJvd1Njb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikK
KyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUVudHJ5
LCBsb2NhdGlvbikKIHsKLSAgICBtX3ZtLm1fdG9wVGhyb3dTY29wZSA9IHRoaXM7Ci0KLSAgICBp
ZiAodHJhY2VPbikgewotICAgICAgICBkYXRhTG9nKCI8IiwgdHJhY2VDb3VudCsrLCAiPiBUaHJv
d1Njb3BlIFsiLCBtX2RlcHRoLCAiXSBFbnRlcjogIiwgbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAi
IEAgIiwgbG9jYXRpb24uZmlsZSwgIjoiLCBsb2NhdGlvbi5saW5lKTsKLSAgICAgICAgaWYgKG1f
dm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgICAgICBkYXRhTG9nKCIsIG5lZWRzIGNo
ZWNrIik7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0KLSAgICAgICAgaWYgKHRyYWNlV2l0aFN0
YWNrVHJhY2VzKQotICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7Ci0gICAgfQotCi0g
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFbnRyeSk7
CisgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25F
dmVudDo6VGhyb3dTY29wZUVudHJ5LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKIH0KIAogVGhyb3dT
Y29wZTo6flRocm93U2NvcGUoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BUaHJv
d1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUpOwog
CiAgICAgaWYgKCFtX2lzUmVsZWFzZWQpCi0gICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKFNpdGU6OlNjb3BlRXhpdCk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhjZXB0
aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFeGl0LCBt
X2RlcHRoLCBtX2xvY2F0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgd2UgcmVsZWFz
ZWQgdGhlIHNjb3BlLCB0aGF0IG1lYW5zIHdlJ3JlIGxldHRpbmcgb3VyIGNhbGxlcnMgZG8gdGhl
CiAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjay4gSG93ZXZlciwgYmVjYXVzZSBvdXIgY2FsbGVy
IG1heSBiZSBhIExMSW50IG9yIEpJVApAQCAtMjk3LDI3ICsyNjksMjUgQEAgVGhyb3dTY29wZTo6
flRocm93U2NvcGUoKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwog
ICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQotICAgICAgICBzaW11bGF0
ZVRocm93KCk7CisgICAgICAgIHNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQ6OlRocm93U2Nv
cGVFeGl0KTsKIAotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFj
ZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEV4aXQ6ICIsIG1fbG9jYXRp
b24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24u
bGluZSk7CisgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBs
b2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fbG9jYXRpb24p
OwogICAgICAgICBpZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKICAgICAgICAgICAgIGRh
dGFMb2coIiwgd2l0aCByZXRocm93Iik7CiAgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlv
bkNoZWNrKQogICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOwogICAgICAgICBk
YXRhTG9nKCJcbiIpOwogCi0gICAgICAgIGlmICh0cmFjZVdpdGhTdGFja1RyYWNlcykKKyAgICAg
ICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcykKICAgICAg
ICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KLQotICAgIG1fdm0ubV90b3BUaHJv
d1Njb3BlID0gbV9wcmV2aW91c1Njb3BlOwogfQogCiB2b2lkIFRocm93U2NvcGU6OnRocm93RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYg
KG1fdm0uZXhjZXB0aW9uKCkgJiYgbV92bS5leGNlcHRpb24oKSAhPSBleGNlcHRpb24pCi0gICAg
ICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlRocm93KTsKKyAg
ICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25F
dmVudDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIAogICAgIG1fdm0udGhyb3dF
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KQEAgLTMyNSw3ICsyOTUsNyBAQCB2b2lkIFRo
cm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0CiBKU1ZhbHVlIFRocm93U2NvcGU6OnRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKIHsKICAgICBpZiAo
IWVycm9yLmlzQ2VsbCgpIHx8ICFqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KGVycm9yLmFzQ2Vs
bCgpKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6
VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVk
KEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7CiAgICAgCiAgICAg
cmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOwogfQpAQCAtMzMzLDcgKzMw
Myw3IEBAIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1MKIEpTT2JqZWN0
KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmopCiB7CiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KG9iaikpCi0gICAgICAg
IHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlRocm93KTsKKyAgICAg
ICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVu
dDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIAogICAgIHJldHVybiBtX3ZtLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIG9iaik7CiB9CkBAIC0zNDEsNTUgKzMxMSwyNCBAQCBKU09iamVj
dCogVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlCiB2b2lkIFRocm93U2NvcGU6OnByaW50
SWZOZWVkQ2hlY2soY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1
bnNpZ25lZCBsaW5lKQogewogICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKQotICAg
ICAgICBkYXRhTG9nKCI8IiwgdHJhY2VDb3VudCsrLCAiPiBOZWVkIGV4Y2VwdGlvbiBjaGVjayBh
dCAiLCBmdW5jdGlvbk5hbWUsICIgQCAiLCBmaWxlLCAiOiIsIGxpbmUsICJcbiIpOworICAgICAg
ICBsb2dFdmVudChFeGNlcHRpb25FdmVudDo6TmVlZEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25F
dmVudExvY2F0aW9uKGZ1bmN0aW9uTmFtZSwgZmlsZSwgbGluZSkpOwogfQogCi12b2lkIFRocm93
U2NvcGU6OnNpbXVsYXRlVGhyb3coKQordm9pZCBUaHJvd1Njb3BlOjpzaW11bGF0ZVRocm93KEV4
Y2VwdGlvbkV2ZW50IGV2ZW50KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BUaHJv
d1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUpOwor
ICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RXZlbnQgPSBldmVudDsKICAgICBtX3ZtLm1f
c2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uID0gbV9sb2NhdGlvbjsKICAgICBtX3ZtLm1fc2lt
dWxhdGVkVGhyb3dQb2ludERlcHRoID0gbV9kZXB0aDsKICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlv
bkNoZWNrID0gdHJ1ZTsKIAotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwi
LCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIFRocm93IGZyb206
ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIs
IG1fbG9jYXRpb24ubGluZSwgIlxuIik7Ci0gICAgICAgIGlmICh0cmFjZVdpdGhTdGFja1RyYWNl
cykKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2
ZW50KEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9sb2NhdGlvbik7CisgICAgICAgIGlmIChtX3Zt
Lm1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCiAgICAgICAgICAgICBXVEZS
ZXBvcnRCYWNrdHJhY2UoKTsKICAgICB9CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6dmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoVGhyb3dTY29wZTo6U2l0ZSBzaXRlKQotewotICAg
IGlmICghdmVyaWZpY2F0aW9uT24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChVTkxJS0VM
WShtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKSkgewotICAgICAgICBhdXRvIGZhaWxEZXB0aCA9
IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGg7Ci0gICAgICAgIGF1dG8mIGZhaWxMb2Nh
dGlvbiA9IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb247Ci0KLSAgICAgICAgYXV0
byBzaXRlTmFtZSA9IFtdIChTaXRlIHNpdGUpIC0+IGNvbnN0IGNoYXIqIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoc2l0ZSkgewotICAgICAgICAgICAgY2FzZSBTaXRlOjpTY29wZUVudHJ5OgotICAg
ICAgICAgICAgICAgIHJldHVybiAiRW50cnkiOwotICAgICAgICAgICAgY2FzZSBTaXRlOjpTY29w
ZUV4aXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFeGl0IjsKLSAgICAgICAgICAgIGNhc2Ug
U2l0ZTo6VGhyb3c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJUaHJvdyI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZGF0YUxvZygKLSAgICAg
ICAgICAgICJGQUlMRUQgZXhjZXB0aW9uIGNoZWNrIHZlcmlmaWNhdGlvbjpcbiIKLSAgICAgICAg
ICAgICIgICAgRXhjZXB0aW9uIHRocm93biBmcm9tIFRocm93U2NvcGUgWyIsIGZhaWxEZXB0aCwg
Il0gIiwgc2l0ZU5hbWUoc2l0ZSksICI6ICIsIGZhaWxMb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBmYWlsTG9jYXRpb24uZmlsZSwgIjoiLCBmYWlsTG9jYXRpb24ubGluZSwgIlxuIgotICAg
ICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgaW4gVGhyb3dTY29wZSBbIiwgbV9kZXB0aCwgIl06
ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIs
IG1fbG9jYXRpb24ubGluZSwgIlxuIgotICAgICAgICAgICAgIlxuIik7Ci0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spOwotICAgIH0KLX0KLQotI2Vu
ZGlmIC8vIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCisjZW5kaWYgLy8gRU5BQkxF
KEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmgJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsODggKzI2LDY0IEBACiAjaWZuZGVmIFRocm93U2NvcGVf
aAogI2RlZmluZSBUaHJvd1Njb3BlX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIlZNLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogCi0jaWYgRU5BQkxFKFRIUk9X
X1NDT1BFX1ZFUklGSUNBVElPTikKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNB
VElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7CitjbGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4
Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBUaHJvd1Njb3Bl
KFZNJiwgVGhyb3dTY29wZUxvY2F0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBUaHJvd1Nj
b3BlKFZNJiwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
flRocm93U2NvcGUoKTsKIAogICAgIFRocm93U2NvcGUoY29uc3QgVGhyb3dTY29wZSYpID0gZGVs
ZXRlOwogICAgIFRocm93U2NvcGUoVGhyb3dTY29wZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBWTSYg
dm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0Kik7CiAKLSAgICBpbmxpbmUgRXhjZXB0aW9uKiBleGNlcHRpb24oKQotICAgIHsKLSAg
ICAgICAgbV92bS5tX25lZWRFeGNlcHRpb25DaGVjayA9IGZhbHNlOwotICAgICAgICByZXR1cm4g
bV92bS5leGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCByZWxlYXNlKCkgeyBt
X2lzUmVsZWFzZWQgPSB0cnVlOyB9CisgICAgdm9pZCByZWxlYXNlKCkgeyBtX2lzUmVsZWFzZWQg
PSB0cnVlOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SWZOZWVkQ2hlY2so
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5l
KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNpbXVsYXRlVGhyb3coKTsKKyAgICB2b2lkIHNpbXVs
YXRlVGhyb3coRXhjZXB0aW9uRXZlbnQpOwogCi0gICAgZW51bSBjbGFzcyBTaXRlIHsKLSAgICAg
ICAgU2NvcGVFbnRyeSwKLSAgICAgICAgU2NvcGVFeGl0LAotICAgICAgICBUaHJvdwotICAgIH07
Ci0gICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChTaXRlKTsKLQot
ICAgIFZNJiBtX3ZtOwotICAgIFRocm93U2NvcGUqIG1fcHJldmlvdXNTY29wZTsKLSAgICBUaHJv
d1Njb3BlTG9jYXRpb24gbV9sb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBtX2RlcHRoOwogICAgIGJv
b2wgbV9pc1JlbGVhc2VkIHsgZmFsc2UgfTsKIH07CiAKICNkZWZpbmUgREVDTEFSRV9USFJPV19T
Q09QRSh2bV9fKSBcCi0gICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpUaHJvd1Njb3Bl
TG9jYXRpb24oX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pKQorICAgIEpTQzo6VGhy
b3dTY29wZSgodm1fXyksIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbihfX0ZVTkNUSU9OX18s
IF9fRklMRV9fLCBfX0xJTkVfXykpCiAKICNkZWZpbmUgdGhyb3dTY29wZVByaW50SWZOZWVkQ2hl
Y2soc2NvcGVfXykgXAogICAgIHNjb3BlX18ucHJpbnRJZk5lZWRDaGVjayhfX0ZVTkNUSU9OX18s
IF9fRklMRV9fLCBfX0xJTkVfXykKIAotI2Vsc2UgLy8gbm90IEVOQUJMRShUSFJPV19TQ09QRV9W
RVJJRklDQVRJT04pCisjZWxzZSAvLyBub3QgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklD
QVRJT04pCiAKLWNsYXNzIFRocm93U2NvcGUgeworY2xhc3MgVGhyb3dTY29wZSA6IHB1YmxpYyBF
eGNlcHRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAgVGhyb3dTY29wZShWTSYgdm0pCi0gICAgICAg
IDogbV92bSh2bSkKKyAgICBBTFdBWVNfSU5MSU5FIFRocm93U2NvcGUoVk0mIHZtKQorICAgICAg
ICA6IEV4Y2VwdGlvblNjb3BlKHZtKQogICAgIHsgfQorICAgIFRocm93U2NvcGUoY29uc3QgVGhy
b3dTY29wZSYpID0gZGVsZXRlOworICAgIFRocm93U2NvcGUoVGhyb3dTY29wZSYmKSA9IGRlZmF1
bHQ7CiAKLSAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0gICAgCi0gICAgdm9p
ZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7
IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsgfQotICAgIEpTVmFsdWUgdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBtX3Zt
LnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsgfQotICAgIEpTT2JqZWN0KiB0aHJvd0V4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopIHsgcmV0dXJuIG1fdm0udGhyb3dF
eGNlcHRpb24oZXhlYywgb2JqKTsgfQotICAgIAotICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkg
eyByZXR1cm4gbV92bS5leGNlcHRpb24oKTsgfQotICAgIHZvaWQgcmVsZWFzZSgpIHsgfQotICAg
IAotcHJpdmF0ZToKLSAgICBWTSYgbV92bTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdGhyb3dF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBtX3ZtLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsgfQorICAgIEFMV0FZU19JTkxJTkUg
SlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikg
eyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgcmVsZWFzZSgpIHsgfQogfTsKIAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtX18pIFwKICAgICBKU0M6OlRocm93U2NvcGUoKHZtX18pKQogCi0jZW5kaWYgLy8gRU5B
QkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9O
X1NDT1BFX1ZFUklGSUNBVElPTikKIAogQUxXQVlTX0lOTElORSB2b2lkIHRocm93RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEV4Y2VwdGlvbiogZXhjZXB0aW9u
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dT
Y29wZUxvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5oCShub25leGlzdGVudCkKQEAgLTEsNDMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7
Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKCkgeyB9Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkK
LSAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAgICAgICAsIGZpbGUoZmls
ZSkKLSAgICAgICAgLCBsaW5lKGxpbmUpCi0gICAgeyB9Ci0gICAgCi0gICAgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRy
IH07Ci0gICAgdW5zaWduZWQgbGluZSB7IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA1MzgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04NzMsNCArODczLDI2IEBAIHNpemVfdCBWTTo6Y29tbWl0dGVkU3RhY2tCeXRlQ291bnQoKQog
I2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKK3Zv
aWQgVk06OnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50
IGV2ZW50LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiYgbG9jYXRpb24p
Cit7CisgICAgaWYgKCFtX3ZlcmlmeUV4Y2VwdGlvbkV2ZW50cykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFVOTElLRUxZKG1fbmVlZEV4Y2VwdGlvbkNoZWNrKSkgeworICAgICAgICBhdXRv
IHRocm93RXZlbnQgPSBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudDsKKyAgICAgICAgYXV0byB0
aHJvd0RlcHRoID0gbV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGg7CisgICAgICAgIGF1dG8mIHRo
cm93TG9jYXRpb24gPSBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKKworICAgICAgICBk
YXRhTG9nKAorICAgICAgICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sgdmVyaWZpY2F0aW9u
OlxuIgorICAgICAgICAgICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20gWyIsIHRocm93RGVw
dGgsICJdICIsIHRocm93RXZlbnQsICI6ICIsIHRocm93TG9jYXRpb24sICJcbiIKKyAgICAgICAg
ICAgICIgICAgaXMgdW5jaGVja2VkIGF0IFsiLCBkZXB0aCwgIl0gIiwgZXZlbnQsICI6ICIsIGxv
Y2F0aW9uLCAiXG4iCisgICAgICAgICAgICAiXG4iKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9uZWVkRXhjZXB0aW9uQ2hlY2spOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1
MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5j
bHVkZSAiQ29udHJvbEZsb3dQcm9maWxlci5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hl
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVu
dExvY2F0aW9uLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgogI2luY2x1ZGUgIkhlYXAuaCIKQEAgLTQ4LDcg
KzUwLDYgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTb3VyY2VDb2Rl
LmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCi0jaW5jbHVkZSAiVGhyb3dTY29wZUxvY2F0aW9uLmgi
CiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCkBAIC04Miw2ICs4Myw3IEBAIGNs
YXNzIENvbW1vbklkZW50aWZpZXJzOwogY2xhc3MgQ3VzdG9tR2V0dGVyU2V0dGVyOwogY2xhc3Mg
RXhlY1N0YXRlOwogY2xhc3MgRXhjZXB0aW9uOworY2xhc3MgRXhjZXB0aW9uU2NvcGU7CiBjbGFz
cyBIYW5kbGVTdGFjazsKIGNsYXNzIFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9maWxlckxv
ZzsKQEAgLTEwOSw3ICsxMTEsNiBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBSZWdFeHA7CiAj
ZW5kaWYKIGNsYXNzIFN5bWJvbDsKLWNsYXNzIFRocm93U2NvcGU7CiBjbGFzcyBVbmxpbmtlZENv
ZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRXZhbENvZGVCbG9jazsKIGNsYXNzIFVubGlua2VkRnVu
Y3Rpb25FeGVjdXRhYmxlOwpAQCAtNDQwLDEyICs0NDEsMTAgQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZXN0b3JlUHJldmlvdXNFeGNlcHRpb24oRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgc2V0RXhj
ZXB0aW9uKGV4Y2VwdGlvbik7IH0KIAotICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fZXhj
ZXB0aW9uID0gbnVsbHB0cjsgfQogICAgIHZvaWQgY2xlYXJMYXN0RXhjZXB0aW9uKCkgeyBtX2xh
c3RFeGNlcHRpb24gPSBudWxscHRyOyB9CiAKICAgICBFeGVjU3RhdGUqKiBhZGRyZXNzT2ZDYWxs
RnJhbWVGb3JDYXRjaCgpIHsgcmV0dXJuICZjYWxsRnJhbWVGb3JDYXRjaDsgfQogCi0gICAgRXhj
ZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQogICAgIEpT
Q2VsbCoqIGFkZHJlc3NPZkV4Y2VwdGlvbigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlND
ZWxsKio+KCZtX2V4Y2VwdGlvbik7IH0KIAogICAgIEV4Y2VwdGlvbiogbGFzdEV4Y2VwdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdEV4Y2VwdGlvbjsgfQpAQCAtNjQxLDExICs2NDAsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CiAgICAgICAgIG1fbGFz
dEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgICB9CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24o
KSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIHZvaWQgY2xlYXJFeGNlcHRpb24o
KSB7IG1fZXhjZXB0aW9uID0gbnVsbHB0cjsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBK
U09iamVjdCopOwogCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisg
ICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVu
dCwgdW5zaWduZWQgZGVwdGgsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24mKTsKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwogI2VuZGlm
CkBAIC02NzAsMTEgKzY3NSwyMyBAQCBwcml2YXRlOgogCiAgICAgRXhjZXB0aW9uKiBtX2V4Y2Vw
dGlvbiB7IG51bGxwdHIgfTsKICAgICBFeGNlcHRpb24qIG1fbGFzdEV4Y2VwdGlvbiB7IG51bGxw
dHIgfTsKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQotICAgIFRocm93U2Nv
cGUqIG1fdG9wVGhyb3dTY29wZSB7IG51bGxwdHIgfTsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24g
bV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb247CisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04pCisgICAgRXhjZXB0aW9uU2NvcGUqIG1fdG9wRXhjZXB0aW9uU2NvcGUg
eyBudWxscHRyIH07CisgICAgRXhjZXB0aW9uRXZlbnQgbV9zaW11bGF0ZWRUaHJvd1BvaW50RXZl
bnQ7CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2Nh
dGlvbjsKICAgICB1bnNpZ25lZCBtX3NpbXVsYXRlZFRocm93UG9pbnREZXB0aCB7IDAgfTsKICAg
ICBtdXRhYmxlIGJvb2wgbV9uZWVkRXhjZXB0aW9uQ2hlY2sgeyBmYWxzZSB9OworCisgICAgLy8g
TG9ncyBhbGwgZXhjZXB0aW9uIGFjdGl2aXR5IHRvIGhlbHAgZGVidWcgdGhlIHNvdXJjZSBvZiBh
IHZlcmlmaWNhdGlvbiBmYWlsdXJlLgorICAgIGJvb2wgbV90cmFjZUV4Y2VwdGlvbkV2ZW50cyB7
IGZhbHNlIH07CisKKyAgICAvLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1w
IHRoZSBDKysgc3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5n
LgorICAgIGJvb2wgbV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcyB7IGZhbHNl
IH07CisKKyAgICAvLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1bnRpbCBhbGwga25vd24gdmVyaWZp
Y2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KKyAgICBib29sIG1fdmVyaWZ5RXhjZXB0aW9uRXZl
bnRzIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fZXhjZXB0aW9uRXZlbnRDb3VudCB7IDAg
fTsKICNlbmRpZgogCiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsK
QEAgLTcwMCw2ICs3MTcsMTAgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
Q2hpY2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUlu
dHJpbnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICAvLyBG
cmllbmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5LgorICAgIGZyaWVuZCBj
bGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOworICAgIGZyaWVuZCBjbGFz
cyBFeGNlcHRpb25TY29wZTsKICAgICBmcmllbmQgY2xhc3MgVGhyb3dTY29wZTsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrTWFwU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01h
cCogd2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRlKGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwog
ICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTY5LDcgKzY5LDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtNYXApOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9u
ID0gd2Vha01hcC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTc4LDE3ICs3
OCwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKIAog
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpZiAoIW5leHRJdGVtLmlzT2JqZWN0KCkpIHsK
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUga2V5ID0gbmV4dEl0ZW0uZ2V0KGV4
ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0KGV4ZWMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigxKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmds
b2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU1dlYWtTZXQqIHdlYWtT
ZXQgPSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsKICAgICBKU1Zh
bHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh3ZWFrU2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHdlYWtT
ZXQtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFkZCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDUzODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw5ICszMDEsMTAgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5n
IGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgZGF0YUxvZyhhcmdTdHIpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDggKzkxOCw4IEBACiAjZGVmaW5lIEVOQUJM
RV9NQVNNX1BST0JFIDAKICNlbmRpZgogCi0jaWZuZGVmIEVOQUJMRV9USFJPV19TQ09QRV9WRVJJ
RklDQVRJT04KLSNkZWZpbmUgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklGSUNBVElPTiAoIWRlZmlu
ZWQoTkRFQlVHKSkKKyNpZm5kZWYgRU5BQkxFX0VYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04K
KyNkZWZpbmUgRU5BQkxFX0VYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04gKCFkZWZpbmVkKE5E
RUJVRykpCiAjZW5kaWYKIAogLyogUGljayB3aGljaCBhbGxvY2F0b3IgdG8gdXNlOyB3ZSBvbmx5
IG5lZWQgYW4gZXhlY3V0YWJsZSBhbGxvY2F0b3IgaWYgdGhlIGFzc2VtYmxlciBpcyBjb21waWxl
ZCBpbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvQ2F0
Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3J1bnRpbWUvQ2F0Y2hTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNkZWZpbmUgV2Vi
Q29yZV9GV0RfQ2F0Y2hTY29wZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0Y2hTY29w
ZS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0NETVNlc3Npb25DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lvbiAyMDUz
ODIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMiArMTExLDEzIEBAIGJvb2wgQ0RN
U2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKIAogICAgICAgICBWTSYgdm0gPSBjbGVh
cktleVZNKCk7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgSlNHbG9iYWxPYmplY3Q6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpKTsKICAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihjbGVhcktleVZNKCkpOwogICAgICAgICBKU1ZhbHVlIGtleXNEYXRhT2JqZWN0ID0gSlNP
TlBhcnNlKGV4ZWMsIHJhd0tleXNTdHJpbmcpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkgfHwgIWtleXNEYXRhT2JqZWN0KSB7CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSB8fCAha2V5c0RhdGFPYmplY3QpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNETVNlc3Np
b25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogaW52YWxpZCBKU09OIiwgdGhpcyk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24gMjA1Mzgy
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDkgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpwdXRGbwogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yQWRkKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxJREJLZXk+
IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRlTW9kZSwg
SW5saW5lS2V5Q2hlY2sgaW5saW5lS2V5Q2hlY2ssIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYg
ZWMpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6
OnB1dE9yQWRkIik7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCkBAIC0yNzAsOSArMjczLDkgQEAgUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPcgogICAgIH0KIAogICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKICAgICAgICAgLy8gQ2xlYXIgdGhlIERPTSBleGNlcHRpb24gZnJvbSB0aGUgc2Vy
aWFsaXplciBzbyB3ZSBjYW4gZ2l2ZSBhIG1vcmUgdGFyZ2V0ZWQgZXhjZXB0aW9uLgotICAgICAg
ICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogCiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUNsb25lRXJy
b3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBzdG9yZSBy
ZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3QgYmUgY2xvbmVk
LiIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1
ZUlEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMDUzODIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTcsNyArODU3LDkgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKAogICAgIC8vIHVzaW5nIHN0ZXBzIHRvIGFzc2lnbiBh
IGtleSB0byBhIHZhbHVlIHVzaW5nIGEga2V5IHBhdGguCiAgICAgVGhyZWFkU2FmZURhdGFCdWZm
ZXIgaW5qZWN0ZWRSZWNvcmRWYWx1ZTsKICAgICBpZiAodXNlZEtleUlzR2VuZXJhdGVkICYmICFv
YmplY3RTdG9yZUluZm8tPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKGRhdGFiYXNlVGhyZWFkVk0oKSk7CisgICAgICAgIFZNJiB2bSA9IGRhdGFiYXNl
VGhyZWFkVk0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBhdXRvIHZhbHVl
ID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgp
LCBvcmlnaW5hbFJlY29yZFZhbHVlLmRhdGEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZCgpKSB7CkBAIC04NzEsNyArODczLDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cGVy
Zm9ybVB1dE9yQWRkKAogICAgICAgICB9CiAKICAgICAgICAgYXV0byBzZXJpYWxpemVkVmFsdWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUo
KSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICBpZiAoZGF0YWJhc2VUaHJlYWRF
eGVjU3RhdGUoKS5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHkoY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZvcm1QdXRP
ckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Q29uc3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJpYWxpemUgcmVjb3Jk
IHZhbHVlIGFmdGVyIGluamVjdGluZyByZWNvcmQga2V5IikpLCB1c2VkS2V5KSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDE1ICs1MDAsMTcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxT
Y3JpcHQoY29uc3QgU3RyaQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250
cm9sbGVyLmdsb2JhbE9iamVjdCgqbV9pc29sYXRlZFdvcmxkKSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0aW9uVmFsdWUgPSBn
bG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImdlbmVyYXRlIikpOwogICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkg
ewogICAgICAgICBVUkwgc2NyaXB0VVJMOwogICAgICAgICBzY3JpcHRDb250cm9sbGVyLmV2YWx1
YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpz
Y3JpcHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTUyNyw5ICs1MjksOSBAQCBib29sIFNEUFByb2Nlc3Nvcjo6
Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAgICAgYXJnTGlzdC5hcHBlbmQoSlNDOjpqc1N0cmluZyhl
eGVjLCBhcmd1bWVudCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3Qp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3Igc2NyaXB0
IHRocmV3IGluIGZ1bmN0aW9uICVzIiwgZnVuY3Rpb25OYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjAsMTcgKzE2MCwxOSBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVS
CiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3Jp
cHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVu
dCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xv
YmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICAKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+
Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2lu
UmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5jdGlvbigp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzY3JpcHRDb250cm9sbGVyLmV2YWx1
YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKHF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2Ny
aXB0KCkpLCB3b3JsZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVw
IC0gRXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50
IHNjcmlwdCIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIApAQCAtMTg4LDE1ICsxOTAsMTggQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVu
dDo6aW5zdGFsbAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7
CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IG1fcGFyZW50RWxlbWVu
dC0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250
cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICAKICAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVu
dCIgZnVuY3Rpb24uCiAgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9i
YWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNy
ZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBKU0M6OkpTT2Jq
ZWN0KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhl
Yyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNh
bGxUeXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09
IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCkBAIC0yMDksMzIgKzIxNCwzMiBAQCBib29sIFF1aWNrVGlt
ZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJp
bmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRv
SlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7CiAgICAgSlNDOjpKU1Zh
bHVlIHJlcGxhY2VtZW50ID0gY2FsbChleGVjLCByZXBsYWNlbWVudE9iamVjdCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgPHZpZGVv
PiBjcmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVl
ID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCAidmlkZW8iKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmICF2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBtX21lZGlhRWxlbWVudCA9IEpTSFRNTFZpZGVv
RWxlbWVudDo6dG9XcmFwcGVkKHZhbHVlKTsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpIHsK
ICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIDx2aWRlbz4gZWxlbWVu
dCBjcmVhdGVkIGJ5IFF1aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0LiIsIHRoaXMp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gR2V0IHRo
ZSBzY3JpcHRpbmcgaW50ZXJmYWNlLgogICAgIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2NyaXB0T2JqZWN0IikpOwotICAg
IGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CiAgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0g
ICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2NyaXB0T2JqZWN0KSB7CiAg
ICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCBzY3JpcHQgb2JqZWN0IGNy
ZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudC4iLCB0aGlzKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4
Miw5IEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBpbmRleCwgRGljdGkKIAogYm9vbCBB
cnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbmcmIHZhbHVlKSBjb25zdAogeworICAg
IFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC05MCw3ICs5Myw3IEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBp
bmRleCwgU3RyaW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdmFsdWUgPSBpbmRleGVk
VmFsdWUudG9XVEZTdHJpbmcobV9leGVjKTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBA
QCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluCiAKICAgICBKU09iamVj
dCogb2JqZWN0ID0gIG1fZGljdGlvbmFyeS5pbml0aWFsaXplck9iamVjdCgpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZGljdGlvbmFyeS5leGVjU3RhdGUoKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncyk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC02OSwxMCArNzEsMTAgQEAg
Ym9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbgogICAgICAgICBpZiAoc3Ry
aW5nS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgKml0KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKExJS0VMWSghc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgbWFwLnNldChzdHJpbmdLZXksIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTMgKzkwLDE0IEBAIEpTVmFsdWUg
dG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBKU0dsb2JhbE8KIAogICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CiAgICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKHZtLmFwaUxvY2soKSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgc3dpdGNoIChrZXktPnR5cGUo
KSkgewogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAgICAgYXV0byYgaW5BcnJheSA9
IGtleS0+YXJyYXkoKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGluQXJyYXkuc2l6ZSgpOwog
ICAgICAgICBhdXRvIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIDAsICZn
bG9iYWxPYmplY3QsIHNpemUpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICAgICAgb3V0QXJyYXktPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaSwg
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbkFycmF5LmF0KGkpLmdldCgpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNlc3Npb25D
dXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE1ICs1
NSwxNSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwCiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1aW50MTZfdCBzdGF0dXMgPSBjb252ZXJ0PHVpbnQx
Nl90PihzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0
aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5
VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSB9OwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5j
b21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHN0YXR1cywgbmV3VG90YWwsIG5ld0xpbmVJ
dGVtcywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTg4LDE5ICs4
OCwxOSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwCiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1aW50MTZfdCBzdGF0dXMgPSBjb252ZXJ0PHVpbnQx
Nl90PihzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBcnJh
eVZhbHVlIG5ld1NoaXBwaW5nTWV0aG9kcyB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkgfTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgRGljdGlvbmFyeSBuZXdUb3RhbCA9IHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSB9Owot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBBcnJheVZhbHVlIG5ld0xpbmVJdGVtcyB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMykgfTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGltcGwuY29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oc3RhdHVzLCBuZXdTaGlwcGlu
Z01ldGhvZHMsIG5ld1RvdGFsLCBuZXdMaW5lSXRlbXMsIGVjKTsKICAgICBzZXRET01FeGNlcHRp
b24oJnN0YXRlLCBlYyk7CkBAIC0xMjUsMTEgKzEyNSwxMSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlT
ZXNzaW9uOjpjb21wbGV0ZVBheW1lCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBE
aWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApIH07Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFy
cmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1w
bC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24obmV3VG90YWwsIG5ld0xpbmVJdGVtcywg
ZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTEgQEAgdm9pZCBKU0F1ZGlvVHJhY2s6
OnZpc2l0QWRkaXRpb25hbENoaWxkcgogdm9pZCBKU0F1ZGlvVHJhY2s6OnNldEtpbmQoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQo
KS5zZXRLaW5kKHN0cmluZyk7CiAjZWxzZQpAQCAtNTYsOCArNTksMTEgQEAgdm9pZCBKU0F1ZGlv
VHJhY2s6OnNldEtpbmQoRXhlY1N0YXRlJiBzdAogdm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1
YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICB3cmFwcGVkKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDcgKzgwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogCiAgICAgdW5zaWduZWQgYmxvYlBhcnRzTGVuZ3RoID0gMDsKICAgICBKU09iamVjdCog
YmxvYlBhcnRzID0gdG9KU1NlcXVlbmNlKGV4ZWMsIGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCks
IGJsb2JQYXJ0c0xlbmd0aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoYmxvYlBhcnRzKTsKIApAQCAtMTAxLDcg
KzEwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAg
ICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgZW5kaW5ncyBwcm9wZXJ0eSBhbmQgdmFsaWRhdGUg
aXQuCiAgICAgICAgIGJvb2wgY29udGFpbnNFbmRpbmdzID0gZGljdGlvbmFyeS5nZXQoImVuZGlu
Z3MiLCBlbmRpbmdzKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChjb250YWluc0VuZGlu
Z3MpIHsKQEAgLTExMSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTCiAKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHku
CiAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7Ci0gICAgICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvYlBhcnRzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYmxvYlBhcnRzLT5nZXQoJmV4ZWMsIGkp
OwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9
IHRvQXJyYXlCdWZmZXIoaXRlbSkpCkBAIC0xMzIsNyArMTMyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5k
KGJsb2IpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBpdGVt
LnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgYmxvYkJ1aWxkZXIuYXBwZW5kKHN0cmluZywgZW5kaW5ncyk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzU1LDcgKzM1NSw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQ
cm9wZXIKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHByb3BlcnR5
TmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPENT
U1ZhbHVlPiBjc3NWYWx1ZSA9IHdyYXBwZWQoKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5
TmFtZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJ
SG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDggKzY4LDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9z
dDo6aW5zcGVjdGVkTwogc3RhdGljIEpTQXJyYXkqIGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhl
Y1N0YXRlJiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudExpc3RlbmVySW5m
byYgbGlzdGVuZXJJbmZvKQogewogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBoYW5kbGVyc0NvdW50ID0gbGlzdGVuZXJJ
bmZvLmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBv
dXRwdXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NyArODAsNyBAQCBib29sIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCFhbGdvcml0aG1OYW1lLmNvbnRhaW5zT25seUFTQ0lJKCkpIHsKQEAgLTEwNiwxMiArMTA2
LDE0IEBAIHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICAvLyBG
WElNRTogVGVhY2ggSlNEaWN0aW9uYXJ5IGhvdyB0byByZXR1cm4gSlNWYWx1ZXMsIGFuZCB1c2Ug
dGhhdCB0byBnZXQgaGFzaCBlbGVtZW50IHZhbHVlLgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
ZGljdGlvbmFyeS5leGVjU3RhdGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gZGljdGlvbmFyeS5pbml0aWFsaXplck9iamVjdCgpOwogCiAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFzaCIpOwogCiAgICAgSlNW
YWx1ZSBoYXNoID0gZ2V0UHJvcGVydHkoZXhlYywgb2JqZWN0LCAiaGFzaCIpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzaC5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CkBAIC0xMzQsMTYgKzEzNiwxNiBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+CiAgICAgfQogCiAgICAgSlNWYWx1ZSBpdiA9IGdldFByb3BlcnR5KGV4ZWMs
IHZhbHVlLmdldE9iamVjdCgpLCAiaXYiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxnb3JpdGht
QWVzQ2JjUGFyYW1zKTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgaXZEYXRhOwotICAgIGlm
ICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGl2LCBpdkRhdGEpKSB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0g
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGl2LCBpdkRhdGEpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGlmIChpdkRhdGEuc2Vjb25kICE9
IDE2KSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihl
eGVjLCAiQUVTLUNCQyBpbml0aWFsaXphdGlvbiBkYXRhIG11c3QgYmUgMTYgYnl0ZXMiKSk7CkBA
IC0xNjgsNyArMTcwLDcgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
PgogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNLZXlH
ZW5QYXJhbXMpOwogCiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0
ZSwgdmFsdWUuZ2V0T2JqZWN0KCksICJsZW5ndGgiKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICByZXN1bHQtPmxlbmd0aCA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0
YXRlLCBsZW5ndGhWYWx1ZSwgRW5mb3JjZVJhbmdlKTsKQEAgLTE4OSwxMCArMTkxLDEwIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkg
anNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zKTsKIAotICAgIGlmICgh
Z2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVt
ZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0
LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNj
b3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7CiB9CkBAIC0yMTAsMTMgKzIxMiwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeSgmc3RhdGUsIHZhbHVl
LmdldE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxn
b3JpdGhtSG1hY0tleVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0
aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gZ2V0
SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50
OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOwor
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAg
cmVzdWx0LT5oYXNMZW5ndGggPSBqc0RpY3Rpb25hcnkuZ2V0KCJsZW5ndGgiLCByZXN1bHQtPmxl
bmd0aCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKQEAgLTIzNiwxNiArMjM4LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcg
Q3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zKTsKIAogICAgIEpTVmFsdWUgbW9kdWx1c0xl
bmd0aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgIm1vZHVs
dXNMZW5ndGgiKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAv
LyBGSVhNRTogV2h5IG5vIEVuZm9yY2VSYW5nZT8gRmlsZWQgYXMgPGh0dHBzOi8vd3d3LnczLm9y
Zy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjM3Nzk+LgogICAgIHJlc3VsdC0+bW9kdWx1
c0xlbmd0aCA9IGNvbnZlcnQ8dWludDMyX3Q+KHN0YXRlLCBtb2R1bHVzTGVuZ3RoVmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIEpTVmFsdWUgcHVibGljRXhwb25lbnRWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0ZSwgdmFs
dWUuZ2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxVaW50OEFycmF5PiBwdWJsaWNFeHBvbmVudEFy
cmF5ID0gdG9VaW50OEFycmF5KHB1YmxpY0V4cG9uZW50VmFsdWUpOwpAQCAtMjc5LDEzICsyODEs
MTMgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGlj
dGlvbmFyeSBqc0RpY3Rpb25hcnkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8g
cmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zKTsKIAot
ICAgIGlmICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFz
aFJlcXVpcmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFy
eSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICBKU1ZhbHVlIGxhYmVsVmFsdWUgPSBnZXRQ
cm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxhYmVsIik7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmVzdWx0LT5oYXNMYWJlbCA9ICFsYWJlbFZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CkBAIC0yOTMsMTAgKzI5NSwxMCBAQCBzdGF0aWMgUmVm
UHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGxhYmVsRGF0YTsKLSAgICBpZiAoIWNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBsYWJlbFZhbHVlLCBsYWJlbERhdGEp
KSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9
IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBsYWJlbFZhbHVlLCBsYWJlbERh
dGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJlc3VsdC0+
bGFiZWwuYXBwZW5kKGxhYmVsRGF0YS5maXJzdCwgbGFiZWxEYXRhLnNlY29uZCk7CiAKQEAgLTMx
NiwxMCArMzE4LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4K
ICAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkp
OwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQ
YXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0
LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0o
anNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tl
eVNlcmlhbGl6YXRpb25KV0suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Sy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIGJvb2wgZ2V0SlNB
cnJheUZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhbiBhcnJheSBmb3IgXCIlc1wiIEpT
T04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSwxMCArODUsMTAg
QEAgc3RhdGljIGJvb2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlk
ZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5nZXRTdHJpbmcoZXhlYywg
cmVzdWx0KSkgewogICAgICAgICAvLyBDYW4gZ2V0IGFuIG91dCBvZiBtZW1vcnkgZXhjZXB0aW9u
LgotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmc6OmZvcm1hdCgiRXhwZWN0ZWQgYSBz
dHJpbmcgdmFsdWUgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBib29sIGdldEJvb2xlYW5Gcm9tSlNP
TihFeGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAo
IWpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgZm9yIFwiJXNcIiBK
U09OIGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ4LDcgKzE0OCw3
IEBAIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6SlNDcnlwdG9LZXkKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGpzb25WYWx1ZSA9
IEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFqc29uVmFsdWUgfHwgIWpzb25WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC0y
OTgsNyArMjk4LDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uYwog
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ga2V5T3BzLT5nZXRJbmRleChtX2V4ZWMsIGkp
OwogICAgICAgICAgICAgU3RyaW5nIG9wZXJhdGlvbjsKICAgICAgICAgICAgIGlmICghanNWYWx1
ZS5nZXRTdHJpbmcobV9leGVjLCBvcGVyYXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFt
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiSldLIGtleV9vcHMgYXR0cmlidXRlIGNvdWxkIG5vdCBiZSBwcm9jZXNz
ZWQiKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzIwLDcg
KzMyMCw3IEBAIHZvaWQgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAo
bV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBTdHJpbmcgandrVXNlU3Ry
aW5nOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBK
U0NyeXB0b0sKIAogICAgIFN0cmluZyBrZXlCYXNlNjRVUkw7CiAgICAgaWYgKCFnZXRTdHJpbmdG
cm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImsiLCBrZXlCYXNlNjRVUkwpKSB7Ci0gICAg
ICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFzY29wZS5leGNl
cHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiU2VjcmV0IGtleSBkYXRhIGlzIG5vdCBwcmVzZW50IGlzIEpXSyIpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDIwLDcgKzQyMCw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0
ZUV4cG9uZW50OwogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVj
LCBtX2pzb24uZ2V0KCksICJuIiwgbW9kdWx1cykpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1aXJlZCBK
V0sgXCJuXCIgbWVtYmVyIGlzIG1pc3NpbmciKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KQEAgLTQzMSwxMyArNDMxLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRh
PiBKU0NyeXB0b0sKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImUiLCBleHBvbmVudCkpIHsKLSAgICAgICAgaWYgKCFt
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJS
ZXF1aXJlZCBKV0sgXCJlXCIgbWVtYmVyIGlzIG1pc3NpbmciKSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1f
ZXhlYywgbV9qc29uLmdldCgpLCAiZCIsIG1vZHVsdXMpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21w
b25lbnRzOjpjcmVhdGVQdWJsaWMobW9kdWx1cywgZXhwb25lbnQpOwogICAgIH0KQEAgLTQ0Niwz
OCArNDQ2LDM4IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAg
ICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsK
ICAgICBWZWN0b3I8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQ
cmltZUluZm9zOwogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywg
bV9qc29uLmdldCgpLCAicCIsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAgICAg
ICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJp
dmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9t
SlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRwIiwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JU
RXhwb25lbnQpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1v
ZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlmICghZ2V0
QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAicSIsIHNlY29u
ZFByaW1lSW5mby5wcmltZUZhY3RvcikpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNy
ZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQog
CiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0
KCksICJkcSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAg
aWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5
RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZh
dGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpT
T04obV9leGVjLCBtX2pzb24uZ2V0KCksICJxaSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRD
b2VmZmljaWVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUo
bW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgSlNBcnJh
eSogb3RoZXJQcmltZUluZm9KU0FycmF5OwogICAgIGlmICghZ2V0SlNBcnJheUZyb21KU09OKG1f
ZXhlYywgbV9qc29uLmdldCgpLCAib3RoIiwgb3RoZXJQcmltZUluZm9KU0FycmF5KSkgewotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YSht
b2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50LCBmaXJzdFByaW1lSW5mbywgc2Vjb25k
UHJpbWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOwogICAgIH0KQEAgLTQ4NSwyNCArNDg1LDI0IEBA
IHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG90aGVyUHJpbWVJbmZvSlNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87CiAgICAgICAg
IEpTVmFsdWUgZWxlbWVudCA9IG90aGVyUHJpbWVJbmZvSlNBcnJheS0+Z2V0SW5kZXgobV9leGVj
LCBpKTsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgaWYgKCFlbGVtZW50LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSldLIFwib3RoXCIgYXJyYXkgbWVt
YmVyIGlzIG5vdCBhbiBvYmplY3QiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMs
IGFzT2JqZWN0KGVsZW1lbnQpLCAiciIsIGluZm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgICAg
ICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBwcmltZSBmYWN0b3IgZm9yIGEgcHJpbWUgaW4gXCJv
dGhcIiBkaWN0aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09i
amVjdChlbGVtZW50KSwgImQiLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewotICAgICAgICAg
ICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBnZXQgZmFjdG9yIENSVCBleHBvbmVudCBmb3IgYSBwcmlt
ZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4
ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAidCIsIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBp
ZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1f
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0b3IgQ1JUIGNvZWZmaWNp
ZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC01MTksNyArNTE5LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGp3a0tleVR5cGU7CiAg
ICAgaWYgKCFnZXRTdHJpbmdGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImt0eSIsIGp3
a0tleVR5cGUpKSB7Ci0gICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1f
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVxdWlyZWQgSldLIFwia3R5XCIgbWVtYmVyIGlz
IG1pc3NpbmciKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTU0OSw2ICs1
NDksOSBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JPY3RldFNlcXVlbmNlKEV4CiAKIHN0YXRp
YyB2b2lkIGJ1aWxkSlNPTkZvclJTQUNvbXBvbmVudHMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiBkYXRhLCBKU0M6OkpTT2JqZWN0KiByZXN1
bHQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhZGRUb0pTT04oZXhlYywgcmVzdWx0LCAia3R5Iiwg
IlJTQSIpOwogICAgIGFkZFRvSlNPTihleGVjLCByZXN1bHQsICJuIiwgYmFzZTY0VVJMRW5jb2Rl
KGRhdGEubW9kdWx1cygpKSk7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJlc3VsdCwgImUiLCBiYXNl
NjRVUkxFbmNvZGUoZGF0YS5leHBvbmVudCgpKSk7CkBAIC01NzAsOSArNTczLDggQEAgc3RhdGlj
IHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyhKUwogICAgIGlmIChkYXRhLm90aGVyUHJp
bWVJbmZvcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBKU0FycmF5KiBvdGggPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXplKCk7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgSlNPYmplY3QqIGpzUHJpbWVJbmZvID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYyk7CkBAIC02OTgsOCArNzAwLDkgQEAgc3RhdGljIHZvaWQgYWRkSldLQWxnb3JpdGhtVG9K
U09OKEV4ZWNTdAogc3RhdGljIHZvaWQgYWRkVXNhZ2VzVG9KU09OKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIGpzb24sIENyeXB0b0tleVVzYWdlIHVzYWdlcykKIHsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU0FycmF5KiBrZXlPcHMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAsIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CkBAIC03MzgsMTMgKzc0MSwxMyBAQCBTdHJpbmcg
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogCiAgICAgYWRkSldLQWxnb3JpdGhtVG9KU09O
KGV4ZWMsIHJlc3VsdCwga2V5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCiAgICAgYWRkQm9vbFRvSlNPTihleGVjLCByZXN1bHQsICJleHQiLCBrZXkuZXh0cmFjdGFi
bGUoKSk7CiAKICAgICBhZGRVc2FnZXNUb0pTT04oZXhlYywgcmVzdWx0LCBrZXkudXNhZ2VzQml0
bWFwKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAo
aXM8Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+KCprZXlEYXRhKSkKQEAgLTc1NSw3ICs3NTgs
NyBAQCBTdHJpbmcgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpCiAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIktleSBkb2Vzbid0IHN1cHBv
cnQgZXhwb3J0S2V5IikpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICByZXR1cm4gSlNPTlN0cmluZ2lm
eShleGVjLCByZXN1bHQsIDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw5IEBAIFJlZlB0cjxFbGVtZW50PiBKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIFJlZjxKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9pc29sYXRl
ZFdvcmxkLT52bSgpKTsKKyAgICBWTSYgdm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIGlmICghbV9jb25zdHJ1Y3RvcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC04OSw4ICs5MSwxMSBAQCBSZWZQdHI8RWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50
ZXJmYWNlCiAgICAgSlNWYWx1ZSBuZXdFbGVtZW50ID0gY29uc3RydWN0KHN0YXRlLCBtX2NvbnN0
cnVjdG9yLmdldCgpLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsIGNvbnRleHQp
OwogCi0gICAgaWYgKHNob3VsZENsZWFyRXhjZXB0aW9uID09IFNob3VsZENsZWFyRXhjZXB0aW9u
OjpDbGVhciAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHN0YXRlLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIGlmIChzaG91bGRDbGVhckV4Y2VwdGlvbiA9PSBTaG91bGRDbGVhckV4
Y2VwdGlvbjo6Q2xlYXIgJiYgc2NvcGUuZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgYXV0byBjYXRj
aFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8ICFuZXdFbGVtZW50LmlzRW1wdHkoKSk7CiAKICAgICBpZiAobmV3RWxlbWVudC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTIzLDcgKzEyOCw3IEBAIHZvaWQg
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwKICAgICBBU1NFUlQoY29udGV4dC0+
aXNEb2N1bWVudCgpKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCAqbV9pc29sYXRlZFdvcmxkKTsKICAgICBFeGVjU3Rh
dGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgaWYgKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CkBAIC0xNDIs
NyArMTQ3LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbAogCiAg
ICAgbV9jb25zdHJ1Y3Rpb25TdGFjay5yZW1vdmVMYXN0KCk7CiAKLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEVsZW1lbnQqIHdyYXBwZWRFbGVtZW50ID0gSlNFbGVtZW50Ojp0
b1dyYXBwZWQocmV0dXJuZWRFbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
RWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBzdGF0aWMgSlNPYmplY3QqIGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjYWxsYmFjayA9IHBy
b3RvdHlwZS5nZXQoJnN0YXRlLCBpZCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmIChjYWxsYmFjay5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTg4LDcgKzg4LDcgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6
ZGVmaW5lKAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcg
bG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRv
QXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBKU1ZhbHVlIEpTQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAgICAgfQogCiAgICAgSlNWYWx1ZSBwcm90b3R5
cGVWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90
b3R5cGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBp
ZiAoIXByb3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVj
dG9yJ3MgcHJvdG90eXBlIG11c3QgYmUgYW4gb2JqZWN0IikpOwpAQCAtMTI5LDI1ICsxMjksMjUg
QEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogCiAgICAgaWYgKGF1
dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBw
cm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2Fs
bGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNr
KGNvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBpZiAoYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21F
bGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVy
ZmFjZS0+c2V0RGlzY29ubmVjdGVkQ2FsbGJhY2soZGlzY29ubmVjdGVkQ2FsbGJhY2spOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmIChhdXRvKiBh
ZG9wdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlw
ZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSkp
CiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2Fs
bGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFj
ayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0
dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgaWYgKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAg
ICBhdXRvIHZhbHVlID0gY29udmVydE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgY29u
c3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib2Jz
ZXJ2ZWRBdHRyaWJ1dGVzIikpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIGVsZW1l
bnRJbnRlcmZhY2UtPnNldEF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyaWJ1dGVDaGFuZ2Vk
Q2FsbGJhY2ssICp2YWx1ZSk7CkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIEpTVmFsdWUgd2hl
bkRlZmluZWRQcm9taXNlKEV4ZWNTdAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAg
ICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3Ry
aW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXZhbGlkYXRlQ3Vz
dG9tRWxlbWVudE5hbWVBbmRUaHJvd0lmTmVlZGVkKHN0YXRlLCBsb2NhbE5hbWUpKQpAQCAtMTkx
LDEzICsxOTEsMTUgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAog
CiBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp3aGVuRGVmaW5lZChFeGVjU3RhdGUm
IHN0YXRlKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLnZt
KCkpOworCiAgICAgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8m
IHByb21pc2VEZWZlcnJlZCA9ICpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCk7CiAgICAgSlNWYWx1ZSBwcm9taXNlID0gd2hlbkRlZmluZWRQcm9taXNlKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHdyYXBwZWQoKSk7CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoc3RhdGUsIGdsb2JhbE9iamVjdCwgcHJv
bWlzZURlZmVycmVkKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gcHJvbWlz
ZURlZmVycmVkLnByb21pc2UoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDggKzExOSwxMSBAQCBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDCiAK
IFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZyhl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBTdHJpbmdWaWV3IHZp
ZXcgeyBzdHJpbmcgfTsKIApAQCAtMTg3LDEwICsxOTAsMTEgQEAgZG91YmxlIHZhbHVlVG9EYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBFeGNlcHRpb24qIGV4
Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4oZXhjZXB0aW9uVmFsdWUpOwogICAg
IGlmICghZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmxhc3RFeGNlcHRp
b24oKTsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigpOwogICAgICAgICBp
ZiAoIWV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNr
KTsKICAgICB9CkBAIC0yMDAsMTUgKzIwNCwxOCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRp
b25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMt
PnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENh
bGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1h
eENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwot
ICAgIGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAKICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1p
Y0Nhc3Q8SlNET01XaW5kb3cqPihnbG9iYWxPYmplY3QpKSB7CkBAIC0yMzksOCArMjQ2LDggQEAg
dm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogCiAgICAgICAgIC8vIFdl
IG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRo
ZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCiAgICAgICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlz
IG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB2bS5jbGVhckxhc3RFeGNl
cHRpb24oKTsKICAgICB9CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBA
IC0yNTYsOCArMjYzLDEwIEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
RXgKIAogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9y
dEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQogCkBAIC0zNDEsNyArMzUwLDcgQEAgdm9p
ZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAg
aWYgKCFlYyB8fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIWVjIHx8IHNjb3BlLmV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjKSk7CkBAIC0zNTIsNyArMzYxLDcgQEAg
dm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZQogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0g
ICAgaWYgKCFlYy5jb2RlIHx8IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmICghZWMuY29k
ZSB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYy5jb2RlLCBlYy5t
ZXNzYWdlKSk7CkBAIC0zNjIsMTUgKzM3MSwxNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSogZXhlCiAKIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBK
U1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwo
IlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmlu
ZWQoKTsKQEAgLTUwOSw3ICs1MjAsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4
ZWNTdGF0ZSYgCiAgICAgfQogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKQEAgLTU1Niw3ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9T
bWFsbGVyVUludChFeGVjU3RhdGUmCiAgICAgfQogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKQEAgLTY0MiwxMSArNjUzLDE0IEBAIHVpbnQx
Nl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmEKIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtbG9uZwogaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwogCiAgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMy
LCBrTWF4SW50MzIpOwogfQpAQCAtNjcyLDI3ICs2ODYsMzYgQEAgdWludDMyX3QgdG9VSW50MzJD
bGFtcChFeGVjU3RhdGUmIHN0YXRlLAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNl
cy11bnNpZ25lZC1sb25nCiB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwogCiAgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJ
bnQzMik7CiB9CiAKIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwg
a0pTTWF4SW50ZWdlcik7CiB9CiAKIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtK
U01heEludGVnZXIpOwogfQpAQCAtODU2LDIxICs4NzksMjEgQEAgdm9pZCByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoSlNDOjpFeAogCiB2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKQogewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2Up
OwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRo
cm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIEFTU0VSVCghc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFN0cmlu
ZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2Fn
ZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
LSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MDIsNyArNTAyLDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5j
ZShKU0M6OgogICAgIH0KIAogICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKQEAgLTUxMSw3ICs1MTEsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1Nl
cXVlbmNlKEpTQzo6CiAgICAgfQogCiAgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIo
JmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJu
IG9iamVjdDsKQEAgLTU1NCw4ICs1NTQsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rv
ci5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKQEAgLTU2NCw4ICs1NjcsMTEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2
ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7
Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHZlY3RvcltpXS5nZXQoKSkpOwpAQCAtNjQ5LDE0ICs2NTUsMTcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IEpTQzo6SlNWYWx1ZSBqc0Zyb3plbkFycmF5KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IHZlY3RvcikgewogICAgICAgICBsaXN0LmFwcGVuZChKU1ZhbHVlVHJhaXRzPFQ+OjphcnJh
eUpTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAg
IH0KICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgbnVsbHB0ciwg
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JG
cmVlemUoZXhlYywgYXJyYXkpOwogfQpAQCAtNjk3LDMyICs3MDYsNDAgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IE5hdGl2ZVZhbHVlVAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFs
dWVUcmFpdHM8U3RyaW5nPiB7CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgU3RyaW5nJiBpbmRleGVk
VmFsdWUpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFs
dWUgPSBqc1ZhbHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhh
ZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0K
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPHVuc2lnbmVkPiB7CiAg
ICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0M6OkpTVmFsdWUganNWYWx1ZSwgdW5zaWduZWQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9VSW50
MzIoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAg
IHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1
Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0
aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9h
dCYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
aW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b0Zsb2F0KCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFl
eGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwog
ICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4g
ewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGRvdWJsZSYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b051
bWJlcigmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCkBAIC03NTksMTEgKzc3
NiwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8VD4gdG9OYXRpdmVBCiAgICAgfQog
CiAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFs
dWUsIFsmcmVzdWx0XShKU0M6OlZNJiwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFs
dWUganNWYWx1ZSkgeworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1
bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAgICAgVCBjb252ZXJ0ZWRWYWx1ZTsKLSAgICAgICAgaWYgKCFOYXRpdmVWYWx1ZVRyYWl0czxU
Pjo6bmF0aXZlVmFsdWUoKnN0YXRlLCBqc1ZhbHVlLCBjb252ZXJ0ZWRWYWx1ZSkpCisgICAgICAg
IGJvb2wgc3VjY2VzcyA9IE5hdGl2ZVZhbHVlVHJhaXRzPFQ+OjpuYXRpdmVWYWx1ZSgqc3RhdGUs
IGpzVmFsdWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwg
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
OwogICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKICAgICB9KTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
MSArNzUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cAogewog
ICAgIEFTU0VSVChleGVjU3RhdGUpOwogICAgIEFTU0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA9PSAyKTsKKyAgICBWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0g
ZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAg
ICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgYXV0byBmdW5jdGlvbk5hbWUgPSBleGVj
U3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFT
U0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhl
Y1N0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0
YSgpLCBmdW5jdGlvbk5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0KIApAQCAtODcsMTEgKzg5LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRlclQKIHsKICAgICBBU1NF
UlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0g
Mik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJmYWNlTmFtZSA9IGV4ZWNTdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJU
KCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1dG8gYXR0cmlidXRlTmFtZSA9IGV4ZWNTdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFl
eGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUs
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwg
YXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0VGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFJlZjxKU0dsb2JhbE9iamVjdENhbGxiYWNrPiBw
cm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxP
YmplY3QtPnZtKCkpOworICAgICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtNjQsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnJ1blRhc2soZXhlYywgbV90YXNrKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV90YXNrLT5ydW4oZXhlYyk7Ci0gICAgICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjA1LDcgKzIwNSw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgaXRlcmF0b3JGb3JFYWNoKEpTQzoK
ICAgICAgICAgYXBwZW5kRm9yRWFjaEFyZ3VtZW50cyhzdGF0ZSwgd3JhcHBlci0+Z2xvYmFsT2Jq
ZWN0KCksIGFyZ3VtZW50cywgdmFsdWUpOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHdyYXBw
ZXIpOwogICAgICAgICBKU0M6OmNhbGwoJnN0YXRlLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxE
YXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpq
c1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Q
cm9taXNlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5LDE0IEBAIHZv
aWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0aW9uQ28KIAogdm9pZCByZWplY3RQcm9t
aXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlRGVmZXJyZWQmIHByb21pc2VEZWZlcnJlZCkK
IHsKLSAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNWYWx1ZSBlcnJv
ciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgSlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgm
c3RhdGUsICZnbG9iYWxPYmplY3QsICZwcm9taXNlRGVmZXJyZWQpLT5yZWplY3QoZXJyb3IpOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwxNSBAQCB2b2lkIHJlamVjdFByb21pc2VX
aXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAKIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VG
dW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJvbWlz
ZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCopKQogewor
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0g
KkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKICAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVkJiBwcm9taXNlRGVmZXJyZWQgPSAqSlND
OjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7CiAgICAg
cHJvbWlzZUZ1bmN0aW9uKCZzdGF0ZSwgJnByb21pc2VEZWZlcnJlZCk7CiAKICAgICByZWplY3RQ
cm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3QsIHByb21pc2VEZWZl
cnJlZCk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VO
VVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcHJvbWlzZURlZmVy
cmVkLnByb21pc2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NSwxMSArNzUsMTQgQEAgYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJv
cGVydHlCeUluZAogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5n
IHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNw
cAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEzICsxOTcsMTUgQEAgcHVibGlj
OgogICAgIHZvaWQgY2FsbCgpCiAgICAgewogICAgICAgICBSZWY8SlNET01XaW5kb3dNaWNyb3Rh
c2tDYWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9nbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAgSlNNYWluVGhyZWFk
RXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7CiAKLSAgICAgICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTQsNiArMzU0LDkgQEAgYm9vbCBKU0RPTVdpbmRvdzo6cHJldmVudEV4
dGVuc2lvbnMoSlNPYgogCiB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtl
ICJ2YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBw
cm9wZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRp
b24gKDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCkBAIC0zNjcsNyArMzcwLDcgQEAgdm9pZCBK
U0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJgogI2VuZGlmCiAKICAgICBTdHJpbmcg
bG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9u
ID0gd3JhcHBlZCgpLmxvY2F0aW9uKCkpCkBAIC0zOTEsMTUgKzM5NCwxOCBAQCBKU1ZhbHVlIEpT
RE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6Om9w
ZW4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgQXRv
bWljU3RyaW5nIHRhcmdldCA9IHRhcmdldFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBBdG9t
aWNTdHJpbmcoIl9ibGFuayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIDog
dGFyZ2V0VmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIHdpbmRv
d0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSB3cmFw
cGVkKCkub3Blbih1cmxTdHJpbmcsIHRhcmdldCwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUpKTsKQEAgLTQ1NSwxMCAr
NDYxLDEwIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGUKICAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cmluZyBk
aWFsb2dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKHN0YXRlKTsKQEAg
LTQ5NiwxNiArNTAyLDE2IEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERPTVdp
bmQKICAgICAgICAgfQogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUu
YXJndW1lbnQodHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZl
cnMpOwogICAgIH0KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAmbWVzc2FnZVBvcnRzLCAmYXJyYXlCdWZmZXJz
KTsKIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0
cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgp
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKQEAgLTUzMCw3ICs1MzYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93
OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRl
bnRTZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgpLmRvY3Vt
ZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghYWN0
aW9uKQpAQCAtNTU1LDcgKzU2MSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldEludGVydmFs
KEV4ZWNTdGEKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9s
aWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+Y29udGVu
dFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVs
ZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3Vt
ZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCwxMSArNTgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIGRvdWJsZSBzdGFydFRpbWUoZXhlYy51
bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcigmZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
ZG91YmxlIGVuZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b051bWJlcigmZXhlYykp
OwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNh
c3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTg3LDcgKzg3LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlmICh2YWx1ZUFyZ3Vt
ZW50LmlzQ2VsbCgpICYmIHZhbHVlQXJndW1lbnQuYXNDZWxsKCktPmluaGVyaXRzKHN0ZDo6cmVt
b3ZlX3BvaW50ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBlOjppbmZvKCkpKSB7CiAKICAgICAgICAg
QXJyYXlCdWZmZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVyKHZhbHVlQXJndW1lbnQpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghZGF0YSkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9u
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsMzIgKzQ1LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmEK
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdp
bGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUu
dG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgeFZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIngiKSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVgg
PSAheFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHggPSB4VmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBKU1ZhbHVlIHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ5IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBib29sIGNhblByb3ZpZGVZID0gIXlWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAg
IGRvdWJsZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWiA9ICF6VmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeiA9IHpWYWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJv
dmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTg0LDMyICs4NywzNSBA
QCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uCiAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVs
ZCBhbiBvYmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KCZzdGF0
ZSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZUFscGhhID0g
IWFscGhhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYWxwaGEgPSBhbHBo
YVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQmV0YSA9ICFiZXRhVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYmV0YSA9IGJldGFWYWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFs
dWUgZ2FtbWFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJnYW1tYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwogICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNhblByb3ZpZGVB
bHBoYSAmJiAhY2FuUHJvdmlkZUJldGEgJiYgIWNhblByb3ZpZGVHYW1tYSkKQEAgLTE3MCw2ICsx
NzYsOSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFsKEV4CiAKIEpTVmFs
dWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcgdHlwZSA9IHN0YXRlLmFy
Z3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgYm9vbCBidWJi
bGVzID0gc3RhdGUuYXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgYm9vbCBjYW5j
ZWxhYmxlID0gc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CkBAIC0xNzcsMTUg
KzE4NiwxNSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNCiAgICAg
Ly8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0
aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgc3RhbmRhcmQg
SmF2YVNjcmlwdCBjb252ZXJzaW9uLgogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2Nl
bGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5h
cmd1bWVudCgzKSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2Vs
ZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNjZWxlcmF0aW9uQXJndW1lbnQoc3RhdGUu
YXJndW1lbnQoNCksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlPiByb3Rh
dGlvblJhdGUgPSByZWFkUm90YXRpb25SYXRlQXJndW1lbnQoc3RhdGUuYXJndW1lbnQoNSksIHN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBi
b29sIGludGVydmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51
bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNw
cAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0
aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0
cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIGZpbmFsUmVz
dWx0KSBjb25zdAogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAg
SWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMsIHBy
b3BlcnR5TmFtZSk7CiAgICAgYm9vbCBwcm9wZXJ0eUZvdW5kID0gbV9pbml0aWFsaXplck9iamVj
dC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgWyZdIChib29sIHBy
b3BlcnR5Rm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gYm9vbCB7CkBAIC04Niw3ICs4OCw3
IEBAIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAgICAgICAgZmlu
YWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0pOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b25UaHJvd247CiAgICAgcmV0dXJuIHByb3BlcnR5Rm91bmQgPyBQcm9wZXJ0eUZvdW5kIDogTm9Q
cm9wZXJ0eUZvdW5kOwogfQpAQCAtMTUxLDE3ICsxNTMsMjAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6
OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCiB7
CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0
aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYykpOwogICAgIH0KQEAgLTIyMSw2ICsyMjYsOSBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29u
dmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiByZXN1bHQp
CiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgcmVzdWx0LmNsZWFyKCk7
CiAKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTIyOCwxMiArMjM2LDEy
IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhl
YywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBp
dGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuYWRkKGl0ZW1WYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTI5NywxNyArMzA1LDIwIEBAIHZvaWQgSlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGUKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252
ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8UmVmUHRyPE1l
ZGlhU3RyZWFtPj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVl
bmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBK
U1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBzdHJlYW0gPSBKU01lZGlh
U3RyZWFtOjp0b1dyYXBwZWQoaXRlbVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIw
Myw5IEBAIGlubGluZSBib29sIEpTRGljdGlvbmFyeTo6Z2V0KGNvbnN0IGNoYXIKIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZXN1bHQ+CiBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5
UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQoY29uc3QgY2hhciog
cHJvcGVydHlOYW1lLCBUKiBjb250ZXh0LCB2b2lkICgqc2V0dGVyKShUKiBjb250ZXh0LCBjb25z
dCBSZXN1bHQmKSkgY29uc3QKIHsKKyAgICBKU0M6OlZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6OkpTVmFs
dWUgdmFsdWU7CiAgICAgR2V0UHJvcGVydHlSZXN1bHQgZ2V0UHJvcGVydHlSZXN1bHQgPSB0cnlH
ZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICBzd2l0Y2ggKGdldFByb3BlcnR5
UmVzdWx0KSB7CkBAIC0yMTIsNyArMjE1LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJl
c3VsdCBKU0RpY3RpbwogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAgICBjb252ZXJ0VmFs
dWUobV9leGVjLCB2YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQs
IHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxNiArMTUz
LDE2IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dCgKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNCkpCiAgICAgICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKICAgICBhdXRvIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8aW50MzJfdD4o
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8gaGVpZ2h0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMyksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gd3JhcHBlZCgpLmdl
dENTU0NhbnZhc0NvbnRleHQoV1RGTW92ZShjb250ZXh0SWQpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksNyArNzksMTIgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCkpOworICAgIFZN
JiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAv
LyBTZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkaXNwYXRjaGluZy1ldmVudHMgc3Bl
YyBvbiBjYWxsaW5nIGhhbmRsZUV2ZW50LgorICAgIC8vICJJZiB0aGlzIHRocm93cyBhbiBleGNl
cHRpb24sIHJlcG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQgc2hvdWxkIG5vdCBwcm9wYWdhdGUgdGhl
CisgICAgLy8gZXhjZXB0aW9uLgogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5q
c0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikK
QEAgLTEwOSw2ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdAogICAgIC8vIElmIGpzRnVuY3Rpb24gaXMgbm90IGFjdHVhbGx5IGEgZnVuY3Rpb24sIHNl
ZSBpZiBpdCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFjZSBhbmQgdXNlIHRo
YXQKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaGFuZGxl
RXZlbnRGdW5jdGlvbiA9IGpzRnVuY3Rpb24tPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5l
eGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICAg
ICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigp
OworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSho
YW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgfQogCkBAIC0xMjEsNyArMTM0LDYg
QEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBFdmVu
dCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7CiAgICAgICAgIGds
b2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAotICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2
bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmpl
Y3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBK
U01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKQEAgLTEzOCw3ICsxNTAsNyBAQCB2b2lk
IEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAgICAgaWYgKGlzPFdv
cmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKICAgICAgICAgICAg
IGF1dG8gc2NyaXB0Q29udHJvbGxlciA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0gICAgICAgICAgICBib29sIHRlcm1pbmF0
b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVk
RXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKSk7CisgICAgICAgICAgICBib29s
IHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoc2NvcGUuZXhjZXB0aW9uKCkgJiYgaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAg
ICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBzY3JpcHRDb250cm9sbGVyLT5pc1Rl
cm1pbmF0aW5nRXhlY3V0aW9uKCkpCiAgICAgICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+
Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAs
NyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAg
ICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMg
PSB0b0pTU2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNMZW5ndGgpOwotICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJU
KGJsb2JQYXJ0cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcihl
eGVjLCBzY29wZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUiLCBudWxscHRyLCAiRE9NU3RyaW5nIik7
CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmcudG9XVEZTdHJpbmcoJmV4ZWMpLnJlcGxhY2Uo
Jy8nLCAnOicpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFR5cGU7CkBAIC04Nyw3ICs4Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgLy8g
QXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAgICAgICAgIFN0cmluZyB0eXBlOwog
ICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwotICAgICAgICBpZiAoZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICAgICAgbm9ybWFsaXplZFR5cGUgPSBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUodHlwZSk7
CkBAIC05NSw3ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlMKICAgICAgICAgLy8gT25seSB0cnkgdG8gcGFyc2UgdGhlIGxhc3RNb2RpZmllZCBkYXRlIGlm
IHRoZXJlIHdhcyBub3QgYW4gaW52YWxpZCB0eXBlIGFyZ3VtZW50LgogICAgICAgICBpZiAodHlw
ZS5pc0VtcHR5KCkgfHwgICFub3JtYWxpemVkVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGRpY3Rpb25hcnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBsYXN0TW9kaWZpZWQpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRl
bSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlm
IChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQpAQCAtMTE4
LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAg
ICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAg
ICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzdHJpbmcs
IEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9u
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOSBAQCBzdGF0aWMgdm9pZCBz
ZXRNYXhpbXVtQWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRp
b25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4KICAgICBh
dXRvIG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOwogCkBAIC04Miw3ICs4NSw3
IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MKIAogICAgIC8vIEdp
dmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAg
ICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4
Y2VwdGlvbigpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20g
dGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShleGVj
LCBvYmplY3QpOwpAQCAtOTksMTkgKzEwMiwyMiBAQCBzdGF0aWMgUmVmUHRyPFBvc2l0aW9uT3B0
aW9ucz4gY3JlYXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBBcmd1bWVudHM6
IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRp
b25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0
ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRv
IHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9z
aXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVu
dCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIHBvc2l0aW9u
T3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJU
KHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTEyMSwxOSArMTI3LDIyIEBAIEpTVmFsdWUgSlNHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRj
aFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBBcmd1
bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxsYmFjayA9
IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAg
ICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNr
PEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5h
cmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIHBv
c2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
QVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lv
biAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBzdGF0aWMgSlNW
YWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAvLyBIVE1MQWxsQ29sbGVjdGlvbnMgYXJl
IHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLgogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CkBAIC02NSw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgLy8gU3Vw
cG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgU3RyaW5nIHN0cmlu
ZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5k
ZXgoKnN0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24uaXRlbShp
bmRleC52YWx1ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0
aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKE9wdGlv
bmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RG
U3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0
aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShXRUJHTCkKIHN0YXRp
YyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmUHRyPENh
bnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1Zh
bHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoaW5pdGlh
bGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVj
dCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CiAgICAgCiAgICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsKQEAgLTgzLDcgKzg2LDcgQEAgSlNW
YWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogI2lmIEVOQUJMRShXRUJHTCkK
ICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAgICAg
ICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKQEAg
LTExMCwxNCArMTEzLDE0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlT
dXAKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSB3cmFwcGVkKCk7CiAgICAgY29u
c3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVO
QUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJ
ZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAg
aWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewogICAgICAgICBT
dHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1MRWxlbWVudD4o
dm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50U3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4ZWMsIG5ld1Rhcmdl
dFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnRJ
bnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAtOTgsMTIgKzk4LDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBBU1NFUlQoZWxlbWVudFdyYXBw
ZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFsdWUgbmV3UHJvdG90eXBlID0gbmV3VGFy
Z2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAgaWYgKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
T2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRXcmFwcGVyVmFs
dWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmplY3QsICZl
eGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQgKi8pOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlv
blN0YWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE4ICs2MywxOCBA
QCBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgCiAgICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgMCwgMCk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRklY
TUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5nIHRpdGxlID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAgICAgdXJs
ID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05NywxOCArOTcsMTggQEAgSlNWYWx1
ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdAogICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0
YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksIDAsIDApOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIEZJWE1FOiB0aXRs
ZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
U3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgIHVybCA9IHZhbHVl
VG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIEpTVmFsdWUgSlNJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIG5hbWUg
PSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgb3B0
aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CkBAIC02NiwxNyArNjYsMTcgQEAgSlNWYWx1
ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgIGJvb2wgYXV0b0luY3JlbWVu
dCA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
ICAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAo
IWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBrZXlQYXRo
ID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsKLSAgICAgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBhdXRvSW5jcmVtZW50ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYXV0b0luY3JlbWVudCIpKS50b0Jv
b2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZp
c2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZy
b250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAg
SlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmICghZ2xvYmFs
T2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAg
LTExMiw5ICsxMTUsOSBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6
CiAgICAgICAgIGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFtZSksCiAgICAgICAgIG1fc291cmNl
VVJMLCBtX3NvdXJjZVBvc2l0aW9uLCBvdmVycmlkZUxpbmVOdW1iZXIpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTEyMywxNCArMTI2LDEzIEBAIEpTT2Jq
ZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICBpZiAobV9vcmlnaW5hbE5v
ZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsKICAgICAgICAgICAgIC8vIEVuc3VyZSB0
aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlz
dGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBh
c3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+dm0o
KSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdpbmFsTm9kZSkpKTsK
KyAgICAgICAgICAgIHNldFdyYXBwZXIodm0sIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBZGQgdGhl
IGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQogICAgICAgICAvLyAoYW5kIHRoZSBk
b2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNj
b3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPnZtKCksIGpz
Q2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlz
dGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CisgICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+
c2V0U2NvcGUodm0sIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVy
U2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CiAgICAgfQogICAgIHJl
dHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsMTEgKzEwNywxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBpbml0aWF0b3IsIE5ha2VkUHRy
PEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICAKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRT
dGF0ZShleGVjKTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpsaW5r
QW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgbW9kdWxlS2V5LCBpbml0aWF0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0xMzEs
OCArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAgICB+SlNNYWluVGhyZWFkRXhlY1N0YXRlKCkKICAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc19tYWluVGhyZWFkU3RhdGUtPnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzX21haW5UaHJlYWRTdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogCiAgICAgICAgIGJvb2wgZGlkRXhpdEphdmFTY3JpcHQgPSBzX21haW5UaHJlYWRT
dGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50
OjpkYXRhKEV4ZWNTdGF0ZSYgCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3Nh
Z2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0gc3RhdGUuYXJndW1l
bnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBib29sIGNhbkJ1YmJs
ZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwogICAgIGJvb2wgY2Fu
Y2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOwpAQCAtMTE2
LDE2ICsxMTksMTYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZQog
ICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lc3NhZ2VQb3J0QXJyYXk+
KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlCdWZmZXJB
cnJheT4oKTsKICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZmZXJzKTsKLSAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcoc3RhdGUudm0oKSwgc3RhdGUuYXJndW1lbnQoMykpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSBkYXRhQXJnKHZtLCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBNZXNz
YWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+d3JhcHBlZCgpOwogICAgIGV2ZW50LmluaXRNZXNz
YWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBv
cmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIFdURk1vdmUobWVzc2FnZVBvcnRz
KSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCBqc0V2ZW50LCBkYXRhQXJn
LmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+bV9kYXRhLnNldCh2bSwganNFdmVudCwgZGF0YUFy
Zy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAko
cmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3MywxMiBAQCB2b2lkIGZp
bGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlCiAgICAgLy8gVmFsaWRhdGlvbiBvZiBz
ZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQuMS4xMy4KICAgICB1bnNpZ25lZCBsZW5n
dGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2Uoc3RhdGUsIHZhbHVl
LCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2JqZWN0cywgcGVyIEhU
TUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRD
dXN0b20uaAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFy
cmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CiAgICAgICAgIGF1dG8gbWVzc2FnZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2Nr
Q29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVW
YWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlY2lzaW9uUG9pbnQgZGVjaXNpb25Q
b2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtOTgs
NyArOTgsNyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWludDhfdCBuYXRp
dmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBEZWNpc2lvbjo6QWxsb3c7CiAKICAgICBEZWNp
c2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9uPihuYXRpdmVWYWx1ZSkgfTsKQEAg
LTExOSw4ICsxMTksMTEgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRl
YwogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9u
IGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUpIH07Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHdyYXBwZWQoKS5zZXREZWNpc2lvbihkZWNpc2lvbik7CkBAIC0x
MzMsOCArMTM2LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjp1bmIK
IAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVj
aXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRlLCB2
YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd3JhcHBlZCgpLnNl
dFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVlc3REZWNpc2lvbik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0OSwxMiBAQCB1aW50MTZf
dCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9
IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFs
T2JqZWN0KCksIG5vZGUpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVy
OjpGSUxURVJfUkVKRUNUOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2Vw
dGlvbjsKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBK
U0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0Tm9kZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIFJldGhyb3cgZXhjZXB0aW9uLgog
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHJldHVybmVkRXhjZXB0aW9uKTsK
QEAgLTYyLDcgKzYzLDcgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUq
IAogICAgIH0KIAogICAgIHVpbnQxNl90IHJlc3VsdCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU05vZGUu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzUs
NiArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRh
bDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9
IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKIAogICAgIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6
dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKQEAgLTQ2LDcgKzUwLDcgQEAgVmVj
dG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxObwogICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFwcGVkKCkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgICAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwx
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhl
Y3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFzdGF0
ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lO
VEFYX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFN0
cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIC8vIE5vdyBhc3NlbWJsZSB0aGUgbGlzdCBvZiBTUUwgYXJndW1lbnRzCkBAIC02Mywx
NSArNjYsMTUgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAg
ICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtODEsNyArODQsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNh
Y3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0CiAgICAg
ICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBK
U1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVCiAgICAgICAgIHJldHVybiB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTYgKzc5LDE5IEBAIGJvb2wgSlNTdG9yYWdlOjpk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAogdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdlKj4ob2JqZWN0KTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2Jq
ZWN0LT53cmFwcGVkKCkubGVuZ3RoKGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLmtleShpLCBlYykpKTsKICAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC05Nyw2ICsxMDAsOSBAQCB2b2lk
IEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiAKIGJvb2wgSlNTdG9yYWdlOjpw
dXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9tIHB1dCBpZiB0aGUgb2JqZWN0
IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlzIG5hbWUuCiAgICAgLy8gU2lu
Y2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBjYW5HZXRJdGVtc0Zvck5hbWUo
KSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgLy8gdGhlIG5hdGl2ZSBwcm9w
ZXJ0eSBzbG90cyBtYW51YWxseS4KQEAgLTExMCw3ICsxMTYsNyBAQCBib29sIEpTU3RvcmFnZTo6
cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0
cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRo
ZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFuZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAog
ICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBn
ZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIKICAgICAgICAgLy8gcHV0
RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90
ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw4ICs0NCwxMSBAQCB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlCiB2b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdl
KHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRl
b1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw4ICs0MywxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRy
CiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRv
JiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNl
bHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3Rh
dGUmIHN0CiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFn
ZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEwICsxMDUsMTAgQEAg
SlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZAogCiAgICAgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9
IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRJ
bmRleGVkUGFyYW1ldGVyKHBuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIHRvSlMoJmV4ZWMsIGds
b2JhbE9iamVjdCgpLCBpbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEw
ICsxOTksMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViRwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNv
bnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbzsKICAgICBzd2l0Y2ggKG9iamVj
dFR5cGUpIHsKQEAgLTMzNSw3ICszMzUsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4
dCA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcgbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNp
b24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKICAgICByZXR1cm4gdG9KUygmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwpAQCAtMzU3LDEzICszNTcsMTMgQEAgSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7
CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQz
Migmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQz
Migmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2Vi
R0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC0zODQs
NyArMzg0LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNv
bnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0
ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTQwOCw3ICs0MDgsNyBAQCBKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgaWYgKCFwcm9ncmFtICYmICFz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgdW5zaWduZWQgcG5hbWUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7CiAgICAgaWYg
KGVjKSB7CkBAIC00MzcsNyArNDM3LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRT
aGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtNDk2
LDYgKzQ5Niw5IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIGJvb2wgdG9WZWN0b3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtNTA4LDcgKzUxMSw3IEBA
IGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0MKICAgICAKICAgICBmb3Ig
KGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU0M6OkpTVmFsdWUg
diA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50
b051bWJlcigmc3RhdGUpKTsKICAgICB9CkBAIC01NTYsMTEgKzU1OSwxMSBAQCBzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgfSBlbHNlCiAgICAgICAgIGluZGV4
ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwogICAgIAotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8
RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTcwNyw3ICs3MTAsNyBAQCBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChECiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICAKICAgICBib29sIHRyYW5zcG9zZSA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFy
cmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlw
dG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTQgQEAgZW51bSBjbGFzcyBDcnlwdG9LZXlGb3JtYXQg
ewogCiBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpT
VmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcjsKLSAgICBp
ZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigm
c3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IEpTQ3J5cHRvQWxnb3JpdGht
RGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0
aG1JZGVudGlmaWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNlcHRpb24o
KSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkK
QEAgLTgxLDcgKzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUo
RQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmlu
ZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGtleUZvcm1hdFN0
cmluZyA9PSAicmF3IikKICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXc7CkBA
IC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUo
RQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAg
ICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0ZSwgaSk7CiAgICAg
ICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5cHQiKQogICAgICAgICAgICAgcmVzdWx0
IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAgLTE0NSwxNiArMTQ4LDE0IEBAIEpTVmFsdWUg
SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3Bl
LmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAg
ICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
IAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMTY3LDEwICsxNjgs
MTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeAogICAgIH0KIAog
ICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRh
dGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkg
ewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2Vz
cyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3Vj
Y2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTIw
MSwxNiArMjAyLDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAg
aWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpT
Q3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlm
ICgha2V5KQpAQCAtMjIzLDEwICsyMjIsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0
bzo6ZGVjcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJy
ZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKQEAgLTI1NiwxNiArMjU1LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNp
Z24oRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0
aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRo
bSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtl
eSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwog
ICAgIGlmICgha2V5KQpAQCAtMjc4LDEwICsyNzUsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRs
ZUNyeXB0bzo6c2lnbihFeGVjUwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0g
RGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKTsKQEAgLTMxMSwxNiArMzA4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlw
dG86OnZlcmlmeShFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBh
bGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFs
Z29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgmc3RhdGUsIGFsZ29yaXRobS0+aWRl
bnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0
ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0
b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0zMzMsMTYgKzMyOCwxNiBAQCBKU1ZhbHVlIEpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9u
RGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBzaWduYXR1cmUpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNz
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJh
dGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBk
YXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nl
c3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgzKSwgZGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1
Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRy
PERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC0zNzIsMjIgKzM2NywyMCBA
QCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlCiAgICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFs
Z29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGht
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
aWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0
ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsK
ICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpj
cmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTQxNywz
MCArNDEwLDI4IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2UKICAg
ICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVB
bGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYg
KCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvckdlbmVyYXRlS2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7
CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGV4dHJhY3Rh
YmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
IAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlw
dG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMiksIGtleVVzYWdl
cyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
ICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0g
SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTQ4
NCw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAga2V5U2VyaWFsaXphdGlvbiA9
IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLPigmc3RhdGUsIGp3
a1N0cmluZyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNDk3LDExICs0ODgsMTEgQEAgc3RhdGljIHZvaWQgaW1wb3J0
S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogCiAgICAgT3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtUGFp
cj4gcmVjb25jaWxlZFJlc3VsdCA9IGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZUFsZ29yaXRo
bShhbGdvcml0aG0uZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkpOwogICAgIGlmICghcmVjb25jaWxl
ZFJlc3VsdCkgewotICAgICAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdvcml0aG0gc3BlY2lmaWVkIGluIGtleSBpcyBub3Qg
Y29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0S2V5IGFzIGFyZ3VtZW50IikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBhbGdvcml0aG0gPSByZWNvbmNpbGVkUmVzdWx0LT5hbGdvcml0aG07CkBAIC01MTMsMTUgKzUw
NCwxNSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgQVNT
RVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlRXh0cmFj
dGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBr
ZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2FnZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBrZXlEYXRhID0ga2V5U2VyaWFsaXphdGlvbi0+
a2V5RGF0YSgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKQEAgLTUzOSw0NSArNTMwLDQ0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OmltcG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5
cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1Zh
bHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZv
cm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVy
YXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9u
RGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEp
OworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0
cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAgICBpZiAoIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDIpLmlzTnVsbCgpKSB7CiAgICAgICAgIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmICgh
YWxnb3JpdGhtKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICAgICAg
aWYgKCFhbGdvcml0aG0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAg
ICAgfQorCiAgICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZp
ZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBpZiAoIXBhcmFtZXRl
cnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKCFw
YXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0K
ICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFy
Z3VtZW50Q291bnQoKSA+PSA0KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVz
YWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7
Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFy
Z3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTU5MCw3ICs1ODAsNyBAQCBKU1Zh
bHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoCiAgICAgfTsKIAogICAgIFdlYkNv
cmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBkYXRhLCBXVEZNb3ZlKGFsZ29yaXRobSks
IFdURk1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoc3Vj
Y2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVk
LT5wcm9taXNlKCk7CkBAIC02MTcsNyArNjA3LDcgQEAgc3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4
ZWNTdGF0ZSYgc3RhdGUsIAogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SldLOiB7
CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNl
cmlhbGl6ZSgmc3RhdGUsIGtleSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29u
dmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZmZXI7CkBAIC02NDAs
MTAgKzYzMCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3Jt
YXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlw
dG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFr
ZXkpCkBAIC02NTksNyArNjQ5LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhw
b3J0S2V5KAogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1h
dCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFj
aykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJl
dHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTY3NCwxMCArNjY0LDEwIEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNy
eXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9y
bWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8g
c3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVk
KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTY5NCwxNiAr
Njg0LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICB9
CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUs
IGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlm
ICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAg
ICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3Jh
cHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC03NDYsMTYgKzczNCwxNiBAQCBKU1ZhbHVlIEpT
V2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlG
b3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3Mg
PSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtl
eUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAg
IGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAg
ICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5RGF0YTsKLSAgICBpZiAoIWNyeXB0b09w
ZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlEYXRhKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1
bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQpAQCAtNzY4LDQ0ICs3NTYsNDEgQEAg
SlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgIH0KIAogICAgIGF1
dG8gdW53cmFwQWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXVud3JhcEFsZ29yaXRobSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0aG0pOworICAgIGlmICghdW53cmFwQWxnb3JpdGht
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAgYXV0byB1bndyYXBB
bGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQ
YXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIHVud3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCF1bndyYXBBbGdvcml0aG1Q
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpOwor
ICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gdW53cmFwcGVk
S2V5QWxnb3JpdGhtOwogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiB1bndy
YXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzOwogICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoNCkuaXNOdWxsKCkpIHsKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtID0gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQp
KTsKLSAgICAgICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0aG0pOworICAgICAgICBpZiAoIXVud3JhcHBlZEtl
eUFsZ29yaXRobSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9
CisKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleSgmc3RhdGUsIHVu
d3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycykgewot
ICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpOwor
ICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZXh0
cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsK
ICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xl
YW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAg
ICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDcpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9L
ZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcykp
IHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIGF1
dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1
bWVudCg2KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBw
cm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCkpOwpAQCAtODE5LDExICs4MDQsMTUgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNy
eXB0bzo6dW53cmFwS2V5KAogICAgICAgICBhdXRvIGltcG9ydEZhaWx1cmVDYWxsYmFjayA9IFt3
cmFwcGVyXSgpIG11dGFibGUgewogICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIp
OwogICAgICAgICB9OworCisgICAgICAgIFZNJiB2bSA9IGRvbUdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgICAg
IEV4ZWNTdGF0ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAg
ICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihy
ZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCB1bndy
YXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZN
b3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNr
KSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0
IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5nIHNj
cmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0byBX
ZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAgc3RhdGUuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmZXhl
Yywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZleGVjKSk7CiAKICAgICBT
dHJpbmcgc2NyaXB0VVJMID0gZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygm
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogCiAgICAgLy8gU2VlIHNlY3Rpb24gNC44LjIgc3RlcCAxNCBvZiBXZWJXb3JrZXJzIGZv
ciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dv
cmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTMgKzYyLDE2
IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKIAogSlNWYWx1ZSBK
U1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAg
ICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3RyaW5nKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtODcsNyArOTAs
NyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQoCiAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+
IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkt
PndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICghYWN0aW9uKQogICAgICAg
ICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC0xMDQsNyArMTA3LDcgQEAgSlNWYWx1ZSBKU1dvcmtl
ckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRB
Y3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCB3cmFwcGVkKCku
Y29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDAp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIEpTQzo6SlNWYWx1ZSBSZWFk
YWJsZVN0cmVhbURlZmF1bHRDb250cm8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBhdXRvIGZ1bmN0aW9uID0gb2JqZWN0LmdldCgmc3RhdGUsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHByb3BlcnR5TmFtZSkpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFmdW5jdGlv
bi5pc0Z1bmN0aW9uKCkpIHsKQEAgLTcwLDE5ICs3MCwyMyBAQCBKU0M6OkpTVmFsdWUgUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvCiAKIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlcjo6aXNDb250cm9sbGVkUmVhZGFibGVTdHJlYW1Mb2NrZWQoKSBjb25zdAogewotICAgIGF1
dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jaygmc3RhdGUpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xv
YmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0
YSk7CisgICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAgICAgYXV0byByZWFk
YWJsZVN0cmVhbSA9IG1fanNDb250cm9sbGVyLT5nZXQoJnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0
aW5OYW1lcygpLmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1lKCkpOwotICAgIEFT
U0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFz
Y29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBhdXRvIGlzTG9ja2VkID0gZ2xvYmFsT2JqZWN0KCkt
PmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV9p
c1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0KCk7CisgICAgYXV0byBpc0xvY2tlZCA9
IGdsb2JhbE9iamVjdC0+YnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1J
bnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1Mb2NrZWRGdW5jdGlvbi5nZXQoKTsKIAogICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQocmVhZGFibGVTdHJlYW0pOwogICAgIGF1dG8gcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHN0YXRl
LCBpc0xvY2tlZCwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwotICAgIEFTU0VSVCgh
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
CiAgICAgcmV0dXJuIHJlc3VsdC5pc1RydWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyLmgJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCAr
NzQsMTIgQEAgaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBSZWFkYWJsZVN0cmVhbQogCiBpbmxp
bmUgYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1ZXVlKFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyPiYmIGJ1ZmZlcikKIHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUg
PSAqZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrZXIoJnN0YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVj
dCgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSA9ICpnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrZXIodm0pOwogCiAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgZXJyb3Ioc3RhdGUsIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoJnN0YXRlKSk7CkBAIC04NCw4ICs4OCw4IEBAIGlubGluZSBi
b29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2wKICAgICBhdXRvIGxlbmd0aCA9IGJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpOwogICAgIGF1dG8gY2h1bmsgPSBKU0M6OlVpbnQ4QXJyYXk6OmNyZWF0
ZShXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAgQVNTRVJUKGNodW5rKTsKLSAgICBl
bnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGNodW5rLmdldCgpKSk7
Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgZW5xdWV1ZShzdGF0ZSwg
dG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgY2h1bmsuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFj
dGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdv
cmxkLCBDb250ZW50U2VjdXJpdHlQb2xpY3kqIHBvbGljeSkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIGlmIChnZXRDYWxsRGF0YSh2LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2YWwoZXhlYykpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHYudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+
KG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRlZFdvcmxkKSk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChFeGVjU3RhdGUm
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3QmIHZh
bHVlKQogewogICAgIGF1dG8mIHZtID0gc2NyaXB0U3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwog
ICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3Jp
cHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKSwgdG9KUygmc2NyaXB0U3Rh
dGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7Ci0gICAgaWYgKHNjcmlwdFN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3RhdGUsIHNjcmlwdFN0
YXRlLmV4Y2VwdGlvbigpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDcgKzM4OSw5
IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgc2hvdWxkVGVybWluYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOworICAgICAgICBWTSYgdm0gPSBtX2V4
ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIHZvaWQgdGhy
b3dTdGFja092ZXJmbG93KCkKQEAgLTI0NDgsNiArMjQ1MCw5IEBAIHByaXZhdGU6CiAKIERlc2Vy
aWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogeworICAg
IFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZl
Y3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAgVmVjdG9yPEpTT2Jq
ZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwpAQCAtMjQ2OCw3ICsyNDczLDcgQEAgRGVzZXJp
YWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgogICAgICAgICAgICAgICAgIGdvdG8g
ZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAwLCBtX2dsb2JhbE9iamVjdCwgbGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgZ290
byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dEFycmF5KTsKICAgICAg
ICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChvdXRBcnJheSk7CkBAIC0yNzA2LDEzICsy
NzExLDE2IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpT
Q29udGV4dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhvcmlnaW5Db250ZXh0
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNM
b2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRvSlMoZXhlYywgYXBp
VmFsdWUpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1
ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCBudWxscHRyLCBu
dWxscHRyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAg
ICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkp
OwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgKmV4Y2VwdGlv
biA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKKyAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAg
IEFTU0VSVChzZXJpYWxpemVkVmFsdWUpOwpAQCAtMjc0MSwxMiArMjc0OSwxNSBAQCBKU1ZhbHVl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiBKU1ZhbHVlUmVmIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmIGRlc3RpbmF0aW9uQ29udGV4dCwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoZGVz
dGluYXRpb25Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4
Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1Jl
ZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlQo
dmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZShjbwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5n
bG9iYWxFeGVjKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTQzo6ZXZhbHVh
dGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9iYWxTY29wZVdy
YXBwZXItPmdsb2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCkBAIC0xNDQsOSArMTQ0
LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAg
U3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7CiAgICAgICAgIERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGVycm9yOwogICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxT
Y29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgc291cmNlVVJMLCBlcnJvciwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkpIHsK
LSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVj
LCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7Ci0gICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9
IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Nj
b3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTAyNCw3ICsxMDI0
LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogICAgICAgICBt
eSAkbmVlZEV4Y2VwdGlvbkNoZWNrID0gMDsKICAgICAgICAgZm9yZWFjaCBteSAkbWVtYmVyIChA
eyRkaWN0aW9uYXJ5LT5tZW1iZXJzfSkgewogICAgICAgICAgICAgaWYgKCRuZWVkRXhjZXB0aW9u
Q2hlY2spIHsKLSAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSlcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiI7CiAgICAgICAgICAgICAg
ICAgJHJlc3VsdCAuPSAiICAgICAgICByZXR1cm4gTnVsbG9wdDtcbiI7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0aGlzIHRvIHNo
YXJlIGEgbG90IG1vcmUgY29kZSB3aXRoIEpTVmFsdWVUb05hdGl2ZS4KQEAgLTMxMjcsNyArMzEy
Nyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKSBp
ZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlz
U3RhdGljKSB7CkBAIC0zMjI1LDcgKzMyMjUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkoIW5h
dGl2ZVZhbHVlKSkge1xuIik7CkBAIC0zMjM2LDcgKzMyMzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7
XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpCiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBW
ZWN0b3I8JG5hdGl2ZUVsZW1lbnRUeXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJndW1lbnRzPCRuYXRp
dmVFbGVtZW50VHlwZT4oKnN0YXRlLCAkYXJndW1lbnRJbmRleCk7XG4iKTsKLSAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFsdWUgPSAi
V1RGTW92ZSgkbmFtZSkiOwpAQCAtNDAxNyw3ICs0MDE3LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiRpbmRlbnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZTwkY2xhc3NOYW1lPigq
c3RhdGUsICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsK
KyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlm
IChVTkxJS0VMWSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRuYW1lXCIsIFwiJHZp
c2libGVJbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKQEAgLTQwNDAsNyArNDA0MCw3IEBAIHN1
YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkge1xu
Iik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9
ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRp
b24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
Iik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICAgICAgaWYgKFVOTElLRUxZKCEkbmFtZSkpXG4iKTsKQEAgLTQwODMsNyArNDA4Myw3
IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIp
OwogICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CiAgICAgICAgICAg
ICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00
NDY0LDcgKzQ0NjQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgp
CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAKICAgICAgICAgaWYg
KCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikp
IHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4i
KTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgIH0KIApAQCAtNTI3
OCw3ICs1Mjc4LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlw
ZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWlj
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2ludGVyZmFjZU5hbWV9
SW5pdCBldmVudEluaXQ7CkBAIC01Mjg3LDcgKzUyODcsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2ls
bCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJP
YmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAgICAgICAgQVNTRVJU
KCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZy
b20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKQEAgLTU0MzAsNyArNTQzMCw3IEBAIEVORAog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVk
QXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0
cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KVxuIik7CisgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVE
T01PYmplY3QuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
QWN0aXYKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
cG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAxLDcgKzIwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG8K
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbm90aGVyRnVu
Y3Rpb24oV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0IGV2ZW50
SW5pdDsKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIAogICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
CiAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxk
IGFuIG9iamVjdC4KICAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlh
bGl6ZXJWYWx1ZS50b09iamVjdChzdGF0ZSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFs
aXplciBvYmplY3QuCiAgICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KHN0YXRlLCBpbml0
aWFsaXplck9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9u
IDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLml0
ZW0oV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsOCBAQCBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yODUsNyArMjg2LDcgQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRSZWd1bGFyQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5Niw3ICsyOTcsOCBAQCBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMDQsNyArMzA2
LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNiw3
ICszMTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxP
YmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zMjQsNyArMzI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNB
bmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzM3LDcgKzM0MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NSw3ICszNDksNyBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcyLDcgKzM3Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmEKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZWd1bGFyT3BlcmF0aW9uKFdU
Rk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00MTYsNyArNDIwLDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYQogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJ
bnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMxLDEwICsyMzEsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikgOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02NjMs
OSArNjYzLDEwIEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW0KIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjc4LDcgKzY3OSw4IEBAIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTY4Niw3ICs2ODgsNyBAQCBib29s
IHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3ICs3MDEsOCBAQCBib29sIHNldEpT
VGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MTYsNyArNzE5LDggQEAgYm9v
bCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeAogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzM5LDkgKzc0Mywx
MCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNv
cmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzU0LDcgKzc1OSw4IEBAIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc2Miw3ICs3NjgsNyBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRT
dXBwbGVtZW50YWxTdHIyKGltcGwsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTc3NSw3ICs3ODEsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1l
bnRhbFN0cjMoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVy
ZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC03OTIsNyArNzk5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VT
dXBwbGVtZW50YWxOb2RlKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtODUyLDcgKzg2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtOTMwLDcgKzkzOCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1
bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDggQEAgYm9vbCBzZXRKU1Rl
c3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEzIEBAIHRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJh
bCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIzID0gc3RhdGUtPmFy
Z3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgyKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8g
b2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmNh
c3RlZFRoaXMtPmRvY3VtZW50KCksIFdURk1vdmUoc3RyMSksIFdURk1vdmUoc3RyMiksIFdURk1v
dmUoc3RyMyksIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3Bw
CShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsOCBAQCBi
b29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTIxNSw3ICsyMTYsNyBAQCBib29s
IHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNw
cAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEs
NyArMzYxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNjksNyArMzcwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODAsNyArMzgxLDggQEAgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODgsNyArMzkw
LDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljRXhj
ZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
OTksNyArNDAxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MDcsNyArNDEwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTgsNyArNDIxLDggQEAgYm9vbCBz
ZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00
MjcsNyArNDMxLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw5NyArNTI1
LDk3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4KICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhvdXRE
ZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9u
VmFsdWVXaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGVudW1l
cmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RP
Ymo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0Iikp
LCBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmluZ1dpdGhEZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKSwgImRlZmF1
bHRTdHJpbmciKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxT
dHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRoRGVmYXVs
dCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKSwgZmFsc2Up
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJv
b2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0
T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3MiKSkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJl
c3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3Vi
bGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91Ymxl
ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGUiKSksIFNob3Vs
ZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9
IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0Iikp
LCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJpY3RlZERvdWJsZVdp
dGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJp
Y3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZl
cnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBO
dWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0
aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93
Tm9uRmluaXRlOjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNv
bnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpLCBT
aG91bGRBbGxvd05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVnZXJDbGFtcGVkID0g
Y29udmVydE9wdGlvbmFsPGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpLCBDbGFtcCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50OF90Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFs
bFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0T3B0aW9uYWw8dWludDhfdD4o
c3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSksIEVuZm9yY2VSYW5nZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDx1aW50
OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNp
b24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICBhdXRvIGludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2Vy
IikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0
T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNp
b24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlciA9IGNvbnZlcnRPcHRpb25hbDx1aW50MzJfdD4o
c3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ1bnNpZ25lZEludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90PihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50
ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBsYXJnZUludGVn
ZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIiKSksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFs
PGludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24s
IDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90
PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnNp
Z25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDAp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvKiBudWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
Im51bGxhYmxlTm9kZSIpKSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBhbnlWYWx1ZSA9IGNvbnZl
cnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSksIGpzVW5kZWZpbmVkKCkpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRl
LCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55
VHlwZWRlZlZhbHVlIikpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyID0g
Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51
bGw+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25h
cnkgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoZW51
bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aEVt
cHR5U3RyaW5nRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHN0
cmluZ1dpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1bHQpLCBXVEZNb3Zl
KGJvb2xlYW5XaXRob3V0RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpLCBXVEZN
b3ZlKHJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZSksIFdURk1v
dmUocmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3Vi
bGVXaXRoRGVmYXVsdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZSh1bnJlc3Ry
aWN0ZWRGbG9hdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3Zl
KHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlckNsYW1w
ZWQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbFVuc2ln
bmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJXaXRoRGVmYXVsdCks
IFdURk1vdmUodW5zaWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXJXaXRoRGVm
YXVsdCksIFdURk1vdmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUludGVnZXJXaXRoRGVm
YXVsdCksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkTGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSksIFdURk1vdmUoYW55
VmFsdWUpLCBXVEZNb3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlNZW1iZXIudmFsdWUo
KSB9OwpAQCAtNjMxLDEzICs2MzEsMTMgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpE
aWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byByZXF1
aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVp
cmVkRW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29u
dmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byogbm9u
TnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJub25OdWxs
YWJsZU5vZGUiKSksIElzTnVsbGFibGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXF1aXJlZERpY3Rpb25hcnlNZW1i
ZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGlj
dGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hv
dWxkTm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBX
VEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVk
RGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02NTUsNyArNjU1LDcgQEAgdGVtcGxhdGU8
PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RP
Ymo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0
RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIp
KSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxs
IHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1
bHQpIH07CkBAIC02NzMsNyArNjczLDcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVE
aWN0aW9uYXJ5TgogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVt
ZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1l
cmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRp
b25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIEFsdGVy
bmF0ZURpY3Rpb25hcnlOYW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShi
b29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC0zMDkwLDkgKzMwOTAsMTAgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0T2JqOjpzZXRTdGF0aWNT
dHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMx
MDMsNyArMzEwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHQK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMTgs
NyArMzEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMjYsNyAr
MzEyOSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJ
S0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTM5LDcgKzMx
NDIsOCBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTQ3LDcgKzMxNTEs
NyBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEJ5dGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTMxNTgsNyArMzE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSog
c3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMx
NjYsNyArMzE3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zMTc3LDcgKzMxODIsOCBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0
cihFeGVjU3RhdGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zMTg1LDcgKzMxOTEsNyBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihF
eGVjU3RhdGUqIHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE5Niw3ICszMjAyLDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIwNCw3ICszMjExLDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+
KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENsYW1wZWRTaG9ydEF0dHIoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIxNSw3ICszMjIyLDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIyMyw3ICszMjMxLDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmZvcmNlUmFu
Z2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MzIzNCw3ICszMjQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVj
UwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI0
Miw3ICszMjUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjUwog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNTMsNyArMzI2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
TG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTMyNjEsNyArMzI3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9u
Z0F0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNzIsNyArMzI4Miw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyODAsNyArMzI5MSw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdMb25n
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjkxLDcg
KzMzMDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjk5LDcgKzMz
MTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtMzMxMCw3ICszMzIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzMxOCw3ICszMzMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdB
dHRyKEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMzMjksNyArMzM0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihF
eGVjU3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTMzMzcsNyArMzM1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVj
U3RhdGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwu
c2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zMzQ4LDcgKzMzNjIsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNT
dGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMzY5LDcgKzMzODQsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIo
RXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
MzkzLDcgKzM0MDksOCBAQCBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVj
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDE0
LDcgKzM0MzEsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDIyLDcg
KzM0NDAsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcgKzM0NTEsOCBAQCBi
b29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDQxLDcgKzM0NjAsNyBAQCBib29s
IHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
VG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDUyLDcgKzM0NzEsOCBAQCBib29sIHNldEpT
VGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDYwLDcgKzM0ODAsNyBAQCBib29sIHNldEpTVGVz
dE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPEFsdGVybmF0
ZUVudW1OYW1lPigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ3Myw3ICszNDkzLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ5NCw3ICszNTE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
cmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzUwMiw3ICszNTI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVh
dGUoRXhlY1N0YXRlKiBzdGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTM1MTMsNyArMzUzNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0
cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTM1MjEsNyArMzU0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihF
eGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0
cmluZ2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNTMyLDcgKzM1NTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0
dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
NTQwLDcgKzM1NjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIo
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0
ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMzU1MSw3ICszNTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRl
Z3JhbEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzU1OSw3ICszNTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3Jh
bEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNTcwLDcgKzM1OTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNTc4LDcgKzM2MDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVuc2lnbmVkSW50ZWdyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0
ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU4OSw3ICsz
NjE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU5Nyw3ICszNjI0
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwOCw3ICszNjM1LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzYxNiw3ICszNjQ0LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2MjcsNyArMzY1NSw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTM2MzUsNyArMzY2NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhz
dGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjQ2LDcgKzM2NzUsOCBAQCBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjU0LDcgKzM2ODQsNyBAQCBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NjUsNyArMzY5NSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2NzMsNyArMzcwNCw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0
cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIs
IFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2ODQsNyArMzcx
NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2OTIsNyArMzcyNCw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29y
ZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzAzLDcgKzM3MzUsOCBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzExLDcgKzM3NDQsNyBAQCBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MjMsNyArMzc1Niw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3MzEsNyArMzc2NSw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzQzLDcgKzM3NzcsOCBAQCBib29s
IHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzUxLDcgKzM3ODYsNyBAQCBib29sIHNl
dEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQz
MkFycmF5KHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewogICAgICAgICB0aHJv
d0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5
cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOwpAQCAtMzc2Niw3ICszODAxLDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc3NCw3ICszODEwLDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtMzc4NSw3ICszODIxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzc5Myw3ICszODMwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2Vw
dGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODA0LDcgKzM4NDEs
OCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODEzLDcgKzM4NTEsNyBA
QCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0
aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODI1
LDcgKzM4NjMsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODM0LDcg
KzM4NzMsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UgZWM7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODQ2LDcgKzM4ODUsOCBAQCBib29sIHNldEpTVGVzdE9i
alN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zODU0LDcgKzM4OTQsNyBAQCBib29sIHNldEpTVGVzdE9ialN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjUsNyArMzkwNSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4NzQsNyArMzkxNSw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNl
dHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2Vw
dGlvbihzdGF0ZSwgZWMpOwpAQCAtMzg4Niw3ICszOTI3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
dXN0b21BdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzkwMSw3ICszOTQzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbmZv
byhFeGVjU3RhdGUqIHN0YXRlLAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzkxNiw3ICszOTU5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtp
dGZvbyhFeGVjU3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzkzMSw3ICszOTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzkzOSw3ICszOTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3Rh
dGVBdHRyaWJ1dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0
ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzk1MCw3ICsz
OTk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzk1OCw3ICs0MDA0
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBhY3Rp
dmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5NjksNyArNDAxNSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5OTMsNyArNDA0MCw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMTQsNyArNDA2Miw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMzgsNyArNDA4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQwNjIsNyArNDExMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQwODYsNyArNDEzNyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQxMTAsNyArNDE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZEMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQxMzIsNyArNDE4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMShFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQxNDAsNyArNDE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
MShFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE1Myw3ICs0MjA3LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE2MSw3ICs0MjE2LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxB
dHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTc0LDcg
KzQyMjksOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MTgyLDcgKzQy
MzgsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQxOTUsNyArNDI1MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyNENvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQyMTIsNyArNDI2OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyNUNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQyMjksNyArNDI4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRy
NkNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQyNDUsNyArNDMwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNT
dGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTQyNjIsNyArNDMyMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0
ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQy
ODYsNyArNDM0Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXQK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTAs
NyArNDM3Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTgsNyAr
NDM4MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC00MzI5LDcgKzQzOTIsOCBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSog
c3RhdGUsIEVuCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC00MzM3LDcgKzQ0MDEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3Rh
dGUsIEVuCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC00MzQ4LDcgKzQ0MTIsOCBAQCBib29sIHNldEpTVGVzdE9ialJlcGxhY2Vh
YmxlQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MzYzLDcgKzQ0MjgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC00MzcxLDcgKzQ0MzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1Nl
dHRhYmxlQXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzgyLDcgKzQ0NDgs
OCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzkwLDcgKzQ0NTcsNyBA
QCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldE51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQwMSw3ICs0NDY4LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQwOSw3ICs0NDc3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZVVTVlN0cmluZ1NldHRhYgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZVVTVlN0
cmluZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ0MjAsNyArNDQ4OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJp
bmdWYWx1ZShFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQ0MjgsNyArNDQ5Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdW
YWx1ZShFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQzOSw3ICs0NTA4LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3ICs0NTE3LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0
T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0NjAsNyArNDUzMCw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0NjksNyArNDU0MCw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKICAgICBSZWY8VGVzdE5vZGU+IGZvcndhcmRlZElt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKICAgICBh
dXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDgwLDcgKzQ1NTEsOCBAQCBib29sIHNldEpTVGVz
dE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDkxLDcgKzQ1NjMsNyBAQCBib29sIHNldEpTVGVzdE9i
alB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRv
JiBpbXBsID0gKmZvcndhcmRlZEltcGw7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNDUwMiw3ICs0NTc0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdpZmllckF0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDUxMCw3ICs0NTgzLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdp
ZmllckF0dHJpYnV0ZShFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTQ2LDcgKzQ2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRl
c3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRl
c3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC00NTY5LDcgKzQ2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92
ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNDYyNywxMCArNDcwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFvYmpBcmcpKQpAQCAtNDY2OCwxMCArNDc0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJ5dGVB
cmcgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5h
cmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzA5LDEwICs0NzgyLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1
bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc1MCwxMCArNDgyMywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc5
MSwxMCArNDg2NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpB
cmcpKQpAQCAtNDgzMiw3ICs0OTA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSB2YWx1ZVRvU3Ry
aW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNF
bXB0eVN0cmluZyhXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC00ODUyLDcgKzQ5MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlc29sdmVy
ID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZXIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAs
ICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJh
bWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7CkBAIC00ODk4LDcgKzQ5NzEsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1l
dGhvZChXVEZNb3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKQEAgLTQ5MjAsNyArNDk5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAg
ICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBh
cnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVu
dW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk0NCw3ICs1MDE3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIE9wdGlvbmFsPFRl
c3RPYmo6OkVudW1UeXBlPiBlbnVtQXJnOwogICAgIGlmICghZW51bUFyZ1ZhbHVlLmlzVW5kZWZp
bmVkKCkpIHsKICAgICAgICAgZW51bUFyZyA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3Rh
dGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIWVudW1BcmcpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0
T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5NzAsNyArNTA0Myw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgZW51bUFyZyA9IFRl
c3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8g
b3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdW
YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0
QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5OTUsNyArNTA2OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0
ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC01MDIwLDcgKzUwOTMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0
cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01MDQwLDcgKzUxMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVl
VG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE51bGxhYmxlVVNW
U3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTUwNjAsNyArNTEzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gdmFs
dWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmlu
Z0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA4MCw3ICs1MTUzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTc5LDcgKzUyNTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dp
dGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTE5OSw3ICs1MjcyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdX
aXRoQ2FjaGUoc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3Vt
ZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTUyMTksMTMg
KzUyOTIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZh
bHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3RlbmVyIiwgIkV2ZW50
TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9C
b29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hZGRFdmVudExpc3Rl
bmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyNDUsMTMgKzUzMTgs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBj
dXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAi
bGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgIkV2ZW50TGlz
dGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29s
ZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZW1vdmVFdmVudExpc3Rl
bmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyODQsNyArNTM1Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0
YXRlT2JqKCpzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01MzIxLDcgKzUzOTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24oKnN0YXRlLCBlYykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0K
QEAgLTUzODAsNyArNTQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVP
YmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlv
bihzdGF0ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CiB9CkBAIC01NDAwLDcgKzU0NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAqY29udGV4dCkpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CkBAIC01NDg2LDcgKzU1NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTA0LDcgKzU1NzcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUob3B0
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MjQs
MTAgKzU1OTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhXVEZNb3Zl
KG5vbk9wdCksIFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU1NDcsMTMgKzU2MjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQg
PSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3Vt
ZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgy
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3
b09wdGlvbmFsQXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSksIFdURk1vdmUob3B0
MikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTcx
LDcgKzU2NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0
ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTg5LDcgKzU2NjIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NjA3LDcgKzU2ODAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nKFdU
Rk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTU2MjUsNyArNTY5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVy
YWwoImZvbyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdB
bmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY0Myw3ICs1NzE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWQoKSA/IEF0b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0
b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NjEsNyArNTczNCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NzksNyArNTc1Miw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3ZlKHN0cikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Njk3LDcgKzU3NzAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNO
dWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTU3MTUsNyArNTc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0
eVN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJ
c0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTU3MzMsNyArNTgwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBlbXB0eVN0cmluZygpIDogdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NTEsNyArNTgyNCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0
cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC01NzY5LDcgKzU4NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTc4Nyw3ICs1
ODYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIg
PSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dO
b25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODA1LDcgKzU4NzgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8aW50NjRfdD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKFdURk1v
dmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTU4MjMsNyArNTg5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbnVtYmVyID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg0MSw3ICs1OTE0LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVu
c2lnbmVkTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg1OSw3ICs1OTMyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhX
VEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01ODc3LDcgKzU5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDxWZWN0b3I8U3RyaW5nPj4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODk1LDcgKzU5NjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9OYXRpdmVBcnJheTxT
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoV1RGTW92
ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC01OTEzLDcgKzU5ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGJvb2w+
KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKFdURk1vdmUo
YikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTMx
LDcgKzYwMDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShXVEZNb3ZlKGIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjAwOSw3ICs2
MDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIFJl
ZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyID0gbnVsbHB0cjsKICAgICBpZiAoIXN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIHJlc29sdmVyID0g
SlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoIXJlc29sdmVyKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0
aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOwpAQCAt
NjA1Miw3ICs2MTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09i
amVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKQEAgLTYxMTYsNyArNjE4OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwpAQCAtNjI0OSw3ICs2MzIyLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRo
cm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRl
c3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1
dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUob2JqQXJnKSwg
V1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNjI3NSw3ICs2MzQ4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1l
dGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1
bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI5NSw3ICs2MzY4LDcgQEAgc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjMxNSw3ICs2Mzg4LDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjM3OCw3ICs2NDUxLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhv
ZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTY0MTgsNyArNjQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0
b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDM4LDcg
KzY1MTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJf
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDU4LDcgKzY1MzEsNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFy
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NTQ2
LDcgKzY2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFy
ZyA9IG51bGxwdHI7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51
bGwoKSkgewpAQCAtNjU3OCw3ICs2NjUxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1
dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBX
VEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNjYyNCw3ICs2Njk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpDbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFyZyA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJnKSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY2NDksNyArNjcyMiw3IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92
ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY2NjYsNyArNjczOSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlw
ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUodHlwZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzA5LDEwICs2Nzgy
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDEpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RX
aXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3MzIsMTAgKzY4
MDUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PHVpbnQxNl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdU
Rk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNjc1NSw3ICs2ODI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1bnNpZ25lZExvbmdT
ZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVW5zaWduZWRMb25n
U2VxdWVuY2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Nzc2LDcgKzY4NDksNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05h
dGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMp
LCBlYykpOwogCkBAIC02ODIxLDEwICs2ODk0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcg
PSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJy
YXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoV1RGTW92
ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02ODQ0LDcgKzY5MTcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJp
bmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjkyNyw3ICs3MDAwLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDMoV1RGTW92ZSh2YWx1ZSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02OTQ3LDcgKzcw
MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5jb252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwMTIsMTAgKzcwODUsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRz
PFN0cmluZz4oKnN0YXRlLCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52YXJpYWRp
Y1N0cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzAzNSwxMCArNzEwOCwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PGRvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBWZWN0b3I8ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91YmxlPigqc3RhdGUs
IDEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKFdU
Rk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC03MDg3LDEwICs3MTYwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9
IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05v
bkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBiID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUoYikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MTM3LDcgKzcy
MTAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoV1RGTW92ZShh
KSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtNzE4NCw3ICs3MjU3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBP
cHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KFdURk1v
dmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTcyMTAsNyArNzI4Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNv
bnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3Zlcmxv
YWRlZEZ1bmN0aW9uKFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczMjQsNyArNzM5Nyw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUo
c3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcz
NDcsNyArNzQyMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczOTAsNyArNzQ2Myw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdU
Rk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTc0MTEsNyArNzQ4NCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0NTAsNyAr
NzUyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5pdCA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6
OkRpY3Rpb25hcnk+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KGluaXQudmFsdWUoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyKSkKICAgICAgICAgcmV0
dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiYXJyYXlC
dWZmZXIiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZm
ZXIiKTsKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25z
dHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUJ1ZmZlclZpZXcgPSB0
b0FycmF5QnVmZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyVmlldykpCiAgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImFycmF5QnVmZmVyVmll
dyIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlclZp
ZXciKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNv
bnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IHN0YXRlLT5h
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKHN0
cmluZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpAQCAtMTQx
LDcgKzE0MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAg
ICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnND
b25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwog
ICAgIFZlY3RvcjxpbnQzMl90PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1lbnRzPGludDMyX3Q+
KCpzdGF0ZSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdzKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShy
ZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25z
dHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAg
ICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4oKSA6IHRvTmF0aXZl
QXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC04OCw3ICs4OCw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJyaWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE92ZXJyCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJ
bnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDggQEAgYm9vbCBzZXRK
U1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjU5LDcgKzI2MCw3IEBAIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFZhbHVlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3MCw3ICsyNzEsOCBAQCBib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yNzgsNyArMjgwLDcgQEAgYm9vbCBzZXRKU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyAr
MTMyLDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUt
PmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAidGVzdENhbGxiYWNrIiwg
IlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwpAQCAtMzYwLDcgKzM2MCw4IEBAIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjgsNyArMzY5LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2ln
bmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTM3OSw3ICszODAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFs
aXplCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzg3LDcgKzM4OSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVT
ZXJpYWxpemUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3Rh
dGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTgsNyArNDAwLDgg
QEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNiw3ICs0
MDksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MTcsNyArNDIwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c0F0dHJXaXRoU2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNiw3ICs0MzAsNyBAQCBib29sIHNldEpTVGVzdFR5
cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00MzgsNyArNDQyLDggQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0Niw3ICs0NTEsNyBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0
aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1Nyw3ICs0
NjIsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0CiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDY2
LDcgKzQ3Miw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHQKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtNDkxLDcgKzQ5Nyw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byB4ID0gc3Rh
dGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8aW50MzJfdD4oKSA6IHRvTmF0
aXZlQXJyYXk8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxMSwxOSArNTE3LDE5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gaGVpZ2h0ID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSks
IFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IGJsdXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgyKSwgU2hvdWxk
QWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gY29sb3Ig
PSBzdGF0ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8gT3B0
aW9uYWw8ZmxvYXQ+KCkgOiBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCg0KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuc2V0U2hhZG93KFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCksIFdU
Rk1vdmUoYmx1ciksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKGFscGhhKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU0Myw3ICs1NDksNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2Ny
aXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
aW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01NjMsNyArNTY5LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1
ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MywxMCArNTg5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJn
MSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcy
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYyMiw3
ICs2MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
YXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXko
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVu
Y3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02NDUsNyArNjUxLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gdmFsdWVzID0gdG9O
YXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZh
bHVlcyksIGVjKSk7CiAKQEAgLTY2Nyw3ICs2NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNl
QXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFy
Z2V0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1
aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJ
KHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsMTIgQEAgYm9vbCBfTlBOX0ludm9rZURl
ZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RP
YmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAK
ICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXA7CkBAIC0xOTMsNyArMTk3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURl
ZmF1bHQoTlBQLCBOUE9iamVjdCogbwogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0
aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsgICAgICAgIAogICAgIH0KIApAQCAtMjI1LDggKzIyOSwxMyBAQCBib29sIF9OUE5fSW52
b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmpl
Y3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9i
amVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU1ZhbHVlIGZ1
bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAt
MjQwLDcgKzI0OSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4K
IAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rp
b24gY2FsbC4KICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0Viwg
cmVzdWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNjAs
MTQgKzI2OSwxOCBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywgTlBTCiAg
ICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3Ry
aW5nVG9VVEYxNihzKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBK
U0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1h
a2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVl
IHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdFN0cmlu
ZyksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChl
eGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtMjg0LDEwICsyOTcsMTQgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5Q
UCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3Qt
PmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
ICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHBy
b3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAg
ICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRl
bnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMjk1LDcgKzMxMiw3IEBAIGJvb2wgX05Q
Tl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIHJlc3VsdCA9IG9i
ai0+aW1wLT5nZXQoZXhlYywgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtMzE4LDggKzMzNSwxMiBAQCBib29sIF9OUE5fU2V0UHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9i
amVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVy
UmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAg
ICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAgLTMyNyw3ICszNDgsNyBAQCBib29sIF9OUE5f
U2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0
aG9kVGFibGUoKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlh
bnQsIHJvb3RPYmplY3QpLCBzbG90KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvYmot
PmltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVy
KCksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBm
YWxzZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzQ2LDI3
ICszNjcsMzIgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAg
ICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVj
dCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIElkZW50aWZpZXJS
ZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKICAgICAg
ICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1By
b3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygp
KSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFv
YmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBp
ZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIo
ZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb2JqLT5pbXAt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+
bnVtYmVyKCkpOwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zODEsMTcgKzQwNywyMSBAQCBib29sIF9OUE5fSGFzUHJvcGVydHko
TlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVj
dC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Cisg
ICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAg
IGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHko
ZXhlYywgaS0+bnVtYmVyKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIApAQCAtNDE0LDEwICs0NDQsMTQgQEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2Jq
ZWN0KiBvLCBOUAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5p
bXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmco
KSkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgCkBAIC00NDMsOCArNDc3LDEyIEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9i
amVjdCogbywgTlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwot
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmpl
Y3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKIAog
ICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmlt
cCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtNDU4LDcgKzQ5
Niw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAg
KmlkZW50aWZpZXIgPSBpZGVudGlmaWVyczsKICAgICAgICAgKmNvdW50ID0gc2l6ZTsKIAotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC00NzksOSArNTE3LDEz
IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0
LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkBAIC00OTYsNyArNTM4
LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjbwogICAgICAgICAK
ICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgICAgIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9j
L2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlk
Z2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDEzIEBAIHZv
aWQgQ0luc3RhbmNlOjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW4KIAogdm9pZCBDSW5zdGFuY2U6
Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhj
ZXB0aW9uU3RyaW5nKCkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwu
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0NhdGNoU2NvcGUuaD4K
ICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC0x
MjksOCArMTMwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QK
IAogc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6RXhjZXB0
aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNlcHRpb24pOwogfQog
CkBAIC0zMzQsOSArMzM3LDEyIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5n
ICopbmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9u
IG9iamVjdC4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3Qg
PSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKIAogICAg
IEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKQEAgLTM2OSwxMCArMzc1LDEyIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmlu
ZyAqKXNjcmkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4g
bmlsOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIGF1dG8gZ2xvYmFsT2Jq
ZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAg
ICAgCiAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRl
Ojpwcm9maWxlZEV2YWx1YXRlKGV4ZWMsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgbWFr
ZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIApAQCAtMzg2LDE3ICsz
OTQsMTkgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNPYmplY3Qq
Pihbc2VsZiBfaW1wXSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAm
dmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKIAotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIH0KIH0KIApAQCAtNDA1LDIyICs0MTUsMjUgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5T
U3RyaW5nICopa2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKLQogICAgIGlkIHJlc3VsdE9iajsKICAgICB7CisgICAgICAgIGF1dG8gZ2xvYmFsT2Jq
ZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgYXV0byYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlz
IGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwog
ICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBl
eGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxl
YXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKLSAgICAgICAgCisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIEpTQzo6
SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CiAgICAgICAgICAg
ICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNW
YWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9v
dE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNDM3LDE1ICs0NTAsMTcgQEAgLSAodm9p
ZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawogICAgIGlmICghW3NlbGYgX2lzU2Fm
ZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxm
IF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
fQogfQogCkBAIC00NTQsMTUgKzQ2OSwxNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNT
dHJpbmcgKilrZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1
cm4gTk87CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9i
amVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBd
LT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhr
ZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShl
eGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkwLDE2ICs1
MDcsMTggQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9i
YWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVj
LCBpbmRleCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29s
ZShleGVjKTsKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9
CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09i
amNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0g
cm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNTEyLDE1ICs1MzEsMTcgQEAgLSAo
dm9pZClzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIGlmICghW3NlbGYgX2lz
U2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtz
ZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBp
bmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlw
ZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAg
ICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUlXaXRo
Tm9VcHBlcgogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZWNT
dGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3RyaW5nPiYg
dmVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQodmVjdG9yLmlzRW1wdHkoKSk7CiAg
ICAgaWYgKCFhcnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0KSkKICAgICAgICAg
cmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwpAQCAt
NzEsNyArNzQsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0g
YXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8
fCAhdmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAgICAgCiAgICAgICAgIC8vIERvbWFp
bnMgc2hvdWxkIGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KQEAgLTg3LDExICs5MCwx
NCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAKIHN0YXRpYyBz
dGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1
ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5
cGUpKGNvbnN0IFN0cmluZyYpKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXR5cGVWYWx1ZS5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgSlNPYmplY3QqIG9i
amVjdCA9IHR5cGVWYWx1ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIWlz
SlNBcnJheShvYmplY3QpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCkBAIC0xMDAsNyArMTA2LDcgQEAgc3RhdGlj
IHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmZXhl
YywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5UcmlnZ2VyRmxhZ3NBcnJh
eTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUudG9XVEZTdHJpbmcoJmV4
ZWMpOwpAQCAtMTE2LDEyICsxMjIsMTUgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBl
RmxhZ3MoRXhlYwogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVj
U3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2Vy
KQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxl
T2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInRyaWdnZXIi
KSk7Ci0gICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXRy
aWdnZXJPYmplY3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyOwogICAgIAogICAgIGNv
bnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOwotICAgIGlmICghdXJs
RmlsdGVyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5p
c1N0cmluZygpKQorICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigp
IHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXI7CiAKICAgICBTdHJp
bmcgdXJsRmlsdGVyID0gdXJsRmlsdGVyT2JqZWN0LnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTEz
MSwxMSArMTQwLDExIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MK
ICAgICB0cmlnZ2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsKIAogICAgIGNvbnN0IEpTVmFsdWUg
dXJsRmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOwotICAg
IGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdXJsRmls
dGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQorICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYg
IXNjb3BlLmV4Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKICAg
ICAgICAgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgPSB1cmxGaWx0ZXJDYXNlVmFs
dWUudG9Cb29sZWFuKCZleGVjKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFs
dWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgInJlc291cmNlLXR5cGUiKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHJl
c291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigp
ICYmIHJlc291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxh
Z3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5m
bGFncywgcmVhZFJlc291cmNlVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKICAg
ICAgICAgICAgIHJldHVybiB0eXBlRmxhZ3NFcnJvcjsKQEAgLTE0Myw3ICsxNTIsNyBAQCBzdGF0
aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CiAKICAgICBj
b25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlwZSIpKTsKLSAgICBpZiAoIWV4ZWMu
aGFkRXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCFz
Y29wZS5leGNlcHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
YXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0
cmlnZ2VyLmZsYWdzLCByZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3Ip
CiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNTEsNyArMTYwLDcgQEAg
c3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCiAg
ICAgY29uc3QgSlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5o
YWRFeGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1dG8gaWZEb21h
aW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QoaWZEb21haW4pLCB0cmlnZ2Vy
LmRvbWFpbnMpOwogICAgICAgICBpZiAoaWZEb21haW5FcnJvcikKICAgICAgICAgICAgIHJldHVy
biBpZkRvbWFpbkVycm9yOwpAQCAtMTYzLDcgKzE3Miw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkludmFsaWREb21haW5MaXN0OwogICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNz
RG9tYWluID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JmV4ZWMsICJ1bmxlc3MtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAm
JiB1bmxlc3NEb21haW4uaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWlu
Q29uZGl0aW9uICE9IFRyaWdnZXI6OkRvbWFpbkNvbmRpdGlvbjo6Tm9uZSkKICAgICAgICAgICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Vbmxlc3NBbmRJZkRvbWFpbjsKICAg
ICAgICAgYXV0byB1bmxlc3NEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmpl
Y3QodW5sZXNzRG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsKQEAgLTE4OSwxMyArMTk4LDE2IEBA
IHN0YXRpYyBib29sIGlzVmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcKIAogc3RhdGljIHN0ZDo6
ZXJyb3JfY29kZSBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1
bGVPYmplY3QsIEFjdGlvbiYgYWN0aW9uLCBib29sJiB2YWxpZFNlbGVjdG9yKQogeworICAgIFZN
JiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICB2YWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICBjb25zdCBKU1ZhbHVlIGFjdGlv
bk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLCAiYWN0aW9uIikpOwotICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0
aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmICghYWN0aW9uT2JqZWN0
IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmplY3QoKSkKICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb247CiAKICAg
ICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidHlwZSIpKTsKLSAgICBpZiAoIXR5cGVPYmplY3Qg
fHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlm
ICghdHlwZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmlu
ZygpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFj
dGlvblR5cGU7CiAKICAgICBTdHJpbmcgYWN0aW9uVHlwZSA9IHR5cGVPYmplY3QudG9XVEZTdHJp
bmcoJmV4ZWMpOwpAQCAtMjA4LDcgKzIyMCw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9h
ZEFjdGlvbihFeGVjU3QKICAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6QmxvY2tDb29raWVz
OwogICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7CiAgICAg
ICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlmICghc2VsZWN0b3Ig
fHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAg
aWYgKCFzZWxlY3RvciB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmco
KSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
Q1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlOwogCiAgICAgICAgIFN0cmluZyBzID0gc2VsZWN0b3Iu
dG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMjQ2LDE3ICsyNTgsMjAgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBsb2FkUnVsZShFeGVjU3RhdAogCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRF
bmNvZGVkUnVsZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1bGVzLCBWZWN0b3I8
Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlzdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8g
RklYTUU6IEpTT05QYXJzZSBzaG91bGQgcmVxdWlyZSBjYWxsYmFja3MgaW5zdGVhZCBvZiBhbiBF
eGVjU3RhdGUuCiAgICAgY29uc3QgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBKU09OUGFyc2UoJmV4
ZWMsIHJ1bGVzKTsKIAotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVs
ZXMpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCiAgICAgICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkOwogCiAgICAgaWYgKCFk
ZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CiAKICAgICBjb25zdCBKU09i
amVjdCogdG9wTGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3QoJmV4ZWMpOwotICAg
IGlmICghdG9wTGV2ZWxPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIXRv
cExldmVsT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbk9iamVjdDsKICAgICAK
ICAgICBpZiAoIWlzSlNBcnJheSh0b3BMZXZlbE9iamVjdCkpCkBAIC0yNzIsMTEgKzI4NywxMSBA
QCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoCiAgICAgICAgIHJldHVy
biBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub29NYW55UnVsZXM7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFs
dWUgPSB0b3BMZXZlbEFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
IHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkT2JqZWN0SW5Ub3BMZXZlbEFycmF5OwogCiAgICAgICAgIGNvbnN0IEpTT2JqZWN0
KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoIXJ1bGVP
YmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFydWxlT2JqZWN0IHx8
IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWRSdWxlOwogCiAgICAgICAgIGF1dG8gZXJyb3IgPSBsb2FkUnVsZShl
eGVjLCAqcnVsZU9iamVjdCwgbG9jYWxSdWxlTGlzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MjEsNiAr
MzkyMSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKIAogc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWEp
CiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byBtZWRpYUpTV3JhcHBlciA9IHRv
SlMoJmV4ZWMsICZnbG9iYWxPYmplY3QsIG1lZGlhKTsKICAgICAKICAgICAvLyBSZXRyaWV2ZSB0
aGUgY29udHJvbGxlciB0aHJvdWdoIHRoZSBKUyBvYmplY3QgZ3JhcGgKQEAgLTM5MjgsMTggKzM5
MzAsMTggQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKUwogICAgIGlm
ICghbWVkaWFKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwog
ICAgIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAgIEpTQzo6SWRlbnRp
ZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29u
dHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IG1l
ZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7Ci0gICAgaWYgKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBjb250
cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVj
dCo+KGNvbnRyb2xzSG9zdEpTV3JhcHBlcik7CiAgICAgaWYgKCFjb250cm9sc0hvc3RKU1dyYXBw
ZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0gICAgSlNDOjpJZGVu
dGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52
bSgpLCAiY29udHJvbGxlciIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQgPSBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbGxlciIpOwogICAgIEpTQzo6
SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0
LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CiAKICAgICByZXR1cm4gY29udHJvbGxlckpTV3JhcHBlcjsKQEAgLTM5NzYs
OCArMzk3OCwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250CiAK
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFt
ZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVj
dCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6
OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9i
YWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0g
SlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwpAQCAt
NDAwMiw3ICs0MDA2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29u
dAogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBub0FyZ3VtZW50czsKICAgICBKU0M6
OmNhbGwoZXhlYywgbWV0aG9kT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnRyb2xsZXJP
YmplY3QsIG5vQXJndW1lbnRzKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBtX2hhdmVTZXRVcENhcHRpb25Db250YWluZXIg
PSB0cnVlOwogI2VuZGlmCkBAIC02NTE3LDggKzY1MjEsMTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVt
ZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBlbnN1
cmVJc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3Qt
PmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZUNvbnRy
b2xzIikpOwogICAgIGlmIChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkKQEAgLTY1MzEsOCAr
NjUzNyw4IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBV
Ukwgc2NyaXB0VVJMOwogI2VuZGlmCiAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29y
bGQoU2NyaXB0U291cmNlQ29kZShtZWRpYUNvbnRyb2xzU2NyaXB0LCBzY3JpcHRVUkwpLCB3b3Js
ZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC02NTkwLDggKzY1OTYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRv
Y3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxl
ci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogCiAgICAgLy8gVGhlIG1lZGlhIGNvbnRyb2xzIHNjcmlwdCBtdXN0IHByb3ZpZGUgYSBtZXRo
b2Qgd2l0aCB0aGUgZm9sbG93aW5nIGRldGFpbHMuCiAgICAgLy8gTmFtZTogY3JlYXRlQ29udHJv
bHMKQEAgLTY2MTgsMjEgKzY2MjYsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRV
c2VyQWdlbnRTaAogICAgIGFyZ0xpc3QuYXBwZW5kKG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVy
KTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVj
dChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpT
Qzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJW
YWx1ZSA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9i
YWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0
ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwog
ICAgIGlmICghY29udHJvbGxlck9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29u
bmVjdCB0aGUgTWVkaWEsIE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250cm9sbGVyIHNvIHRo
ZSBHQyBrbm93cyBhYm91dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICBKU0M6OkpTT2JqZWN0KiBt
ZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0KGV4ZWMpOwotICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksICJjb250cm9sc0hvc3QiKTsKICAgICAKICAgICBB
U1NFUlQoIW1lZGlhSlNXcmFwcGVyT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBjb250cm9sc0hv
c3QpKTsKQEAgLTY2NTIsOCArNjY2MCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRk
VXNlckFnZW50U2gKICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JKU1Byb3BlcnR5KCk7CiAgICAg
dXBkYXRlVXNlc0xUUlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25KU1Byb3BlcnR5KCk7CiAK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNZWRp
YUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRzT25QYWdlU2NhbGUp
CkBAIC02Njg4LDIxICs2Njk2LDIzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVk
aWFDb250cm8KICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gZW5zdXJlSXNvbGF0ZWRXb3Js
ZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgp
LmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAg
IEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywg
Kmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmpl
Y3QgPSBjb250cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVy
T2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5k
bGVQcmVzZW50YXRpb25Nb2RlQ2hhbmdlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rp
b25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNh
bGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFi
bGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUg
PT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTY3MjksMjEgKzY3MzksMjMgQEAgU3RyaW5nIEhU
TUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYg
c2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1
ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAg
SlNDOjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVj
dChleGVjKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KGV4
ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2V0Q3VycmVudENvbnRyb2xz
U3RhdHVzIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwogCiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZh
bHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgp
LT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnTGlzdDsKQEAgLTY3NTIsNyArNjc2NCw3IEBAIFN0cmluZyBIVE1MTWVkaWFF
bGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgIEpTQzo6SlNWYWx1ZSBvdXRwdXRWYWx1ZSA9
IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb250cm9sbGVy
T2JqZWN0LCBhcmdMaXN0KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKIAogICAgIHJldHVybiBvdXRwdXRWYWx1ZS5nZXRTdHJpbmcoZXhlYyk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwNTM4MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw5ICszOTIsMTEgQEAgdm9pZCBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0
Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoaXNvbGF0ZWRXb3JsZCkpOwotICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmdMaXN0OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBy
b290KSk7CkBAIC00MDgsOCArNDEwLDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpk
aWRBZGRVc2VyQQogICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoZSBKUyBmaWxlIHByb3ZpZGVzIGEg
Y3JlYXRlT3ZlcmxheShzaGFkb3dSb290LCB0aXRsZSwgc3VidGl0bGUpIGZ1bmN0aW9uLgogICAg
IEpTQzo6SlNPYmplY3QqIG92ZXJsYXkgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZU92ZXJsYXkiKSkudG9PYmplY3QoZXhl
Yyk7CiAgICAgaWYgKCFvdmVybGF5KSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRp
b24oKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQxOCw3
ICs0MjAsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEpTQzo6Y2FsbChleGVjLCBvdmVybGF5LCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiBib29sIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OnBhcnRPZlNuYXBzaG90T3ZlcmxheShjb25zdCBOb2RlKiBub2RlKSBjb25zdApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMTAgKzEwMSwxMiBAQCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElk
ZW50aWZpZXIgCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50
aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7ICAgIAotICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAg
IENhbGxEYXRhIGNhbGxEYXRhOwogICAgIHJldHVybiBnZXRDYWxsRGF0YSh2YWx1ZSwgY2FsbERh
dGEpICE9IENhbGxUeXBlOjpOb25lOwpAQCAtMTQ3LDcgKzE0OSw5IEBAIGJvb2wgTlBKU09iamVj
dDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAo
aWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE1NSw3ICsxNTksNyBAQCBib29sIE5QSlNP
YmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgZWxzZQogICAgICAgICByZXN1bHQg
PSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7
CiAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTY3LDcgKzE3MSwxMCBAQCBib29sIE5Q
SlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGpzUmVzdWx0Owog
ICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQogICAgICAgICBqc1Jlc3VsdCA9IG1f
anNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRl
bnRpZmllclJlcCkpOwpAQCAtMTc1LDcgKzE4Miw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJv
cGVydHkoTlBJZGVudGlmaWUKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhl
YywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIAogICAgIG1fb2JqZWN0TWFwLT5jb252
ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGpzUmVzdWx0LCAqcmVzdWx0KTsKLSAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE4Nyw3ICsxOTQsOSBAQCBib29sIE5QSlNPYmplY3Q6OnNldFBy
b3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmplY3RNYXAt
PmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVj
dCgpLCAqdmFsdWUpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CkBAIC0x
OTUsNyArMjA0LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQog
ICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQobV9qc09iamVjdC5nZXQoKSwg
ZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApLCBq
c1ZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5u
dW1iZXIoKSwganNWYWx1ZSwgZmFsc2UpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTIwOCwyNiArMjE3LDI5IEBAIGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVu
dGkKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZp
ZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlm
aWVyUmVwKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgaWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVy
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkgewotICAgICAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywg
aWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIH0KIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjU5LDcgKzI3MSw5IEBAIGJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0IE5Q
VmFyaWEKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBl
IGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0
cnVjdERhdGEpOwpAQCAtMjc1LDEzICsyODksMTYgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1
Y3QoY29uc3QgTlBWYXJpYQogICAgIAogICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgbmV3
IG9iamVjdC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVj
LCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTlBKU09i
amVjdDo6aW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkK
QEAgLTI5Niw3ICszMTMsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4
ZWMsCiAKICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rp
b24gY2FsbC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVj
LCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMjA1MzgyKQorKysgU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC04ODUsOCArODg1LDExIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLnZtKCkpOwotICAgIFN0cm9u
ZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgZnJhbWUt
PnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CisgICAgVk0mIHZtID0gcGx1
Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmpl
Y3Q+IGdsb2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9w
dXBzID8gT3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2Vy
R2VzdHVyZSkgOiBOdWxsb3B0KTsKQEAgLTg5NCw3ICs4OTcsNyBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1
YXRlKGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0KSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4
ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTkxNSw5ICs5MTgsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUg
ZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBj
YWxsRGF0YSk7CkBAIC05MzAsNyArOTM2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6Omludm9rZQogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIAogICAgIG1hcnNo
YWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTk0OCw5ICs5NTQsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNh
bGxUeXBlID09IENhbGxUeXBlOjpOb25lKQpAQCAtOTYyLDcgKzk3MSw3IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChl
eGVjLCBvYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0KTsKICAgICAK
ICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05ODAsOSArOTg5LDEyIEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RU
eXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERh
dGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTk5NSw3ICsxMDA3LDcgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAgIEpTVmFsdWUgdmFsdWUgPSBKU0M6
OmNvbnN0cnVjdChleGVjLCBvYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFy
Z0xpc3QpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwg
cmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMTMsMTMgKzEwMjUs
MTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBybwogICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxk
KCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNj
cmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFs
dWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogICAg
IApAQCAtMTAzNCwxMyArMTA0OSwxNiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6Z2V0UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAg
Vk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1h
cnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwNTgsMTUgKzEwNzYsMTggQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OnNldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1
Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChw
bHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURh
dGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwogICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDg0LDE0ICsx
MTA1LDE3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5X
b3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIGZhbHNlKTsKICAgICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMTAsMTUg
KzExMzQsMTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZNJiB2bSA9IHBsdWdp
bldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsg
ICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAg
ICAKQEAgLTExMzYsMTYgKzExNjMsMTkgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnJlbW92ZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNjMsMTEgKzExOTMsMTUgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21f
cGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVj
dChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTExODUsMTEgKzEyMTksMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAgICAgCkBAIC0xMjA3LDExICsxMjQ1LDE0IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpoYXNNZXQKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2Vi
RnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuICFm
dW5jLmlzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyMjksOSArMTI3MCwxMiBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShb
bV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUo
KSk7CkBAIC0xMjUxLDcgKzEyOTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6ZW51bWVyCiAKICAgICBtZW1jcHkocmVzdWx0RGF0YSwgW2RhdGEgYnl0ZXNdLCByZXN1bHRM
ZW5ndGgpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDUzODIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5MzYsNiArNjkzNiw5IEBAIC0g
KEJPT0wpc2hvdWxkQ2xvc2UKICNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBOU0FwcGxlRXZlbnREZXNjcmlwdG9y
KiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1
cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUu
YXNCb29sZWFuKCldOwpAQCAtNjk3Niw4ICs2OTc5LDggQEAgc3RhdGljIE5TQXBwbGVFdmVudERl
c2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEpT
Qzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05T
QXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShleGVjLCBwcmltaXRpdmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287839</attachid>
            <date>2016-09-02 17:45:00 -0700</date>
            <delta_ts>2016-09-04 07:57:00 -0700</delta_ts>
            <desc>work in progress: rebased again.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785324</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMywxMSArMTAzNSwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA1MCw5ICsxMDU1LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzOCwxMSArMTE0MywxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjUzLDkgKzEyNjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDQzLDcgKzE0NTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NzcsNyArMTQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE1MDUsNyArMTUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUyNiw3ICsxNTMzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTU0Myw3ICsx
NTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU1OCw3ICsxNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjE4LDggKzE2
MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg3MiwxNCArMTg4MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4OTcsMTQgKzE5MDcs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTIzLDcgKzE5MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDksMTQg
KzE5NjEsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzksNyArMTk5
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwODUsNiArMjA5OSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDkz
LDkgKzIxMTcsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMTA3LDExICsyMTM1LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcEV4Y2VwdGlvbikKIHsKLSAg
ICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9u
KSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFt
ZSAnJXMnIGJ1dCBub25lIHdhcyB0aHJvd25cbiIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjExOSwxMyArMjE1MCwxMyBA
QCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKLSAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgdm0uZXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBl
Y3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlv
biBjbGFzcyBpcyBub3QgZGVmaW5lZFxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBpc0luc3Rh
bmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvbkNsYXNz
KS0+aGFzSW5zdGFuY2UoZXhlYywgZXhjZXB0aW9uKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
IHsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3Rl
ZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBj
bGFzcyBmYWlscyBwZXJmb3JtaW5nIGhhc0luc3RhbmNlXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5h
bWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMTQ5
LDYgKzIxODAsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpID0gdHJ1ZTsKIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKIAogICAgIGF1dG8g
Y2hlY2tFeGNlcHRpb24gPSBbJl0gKGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24s
IEpTVmFsdWUgdmFsdWUpIHsKQEAgLTIxOTEsNyArMjIyMyw3IEBAIHN0YXRpYyBib29sIHJ1bldp
dGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgaWYgKGlzTW9kdWxlKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb21pc2UpCiAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGxvYWRBbmRFdmFs
dWF0ZU1vZHVsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdEJ1
ZmZlciwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdWxmaWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewog
ICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGZhbHNlLCBleGVjLT5h
cmd1bWVudCgwKSk7CkBAIC0yMjA4LDEzICsyMjQwLDE0IEBAIHN0YXRpYyBib29sIHJ1bldpdGhT
Y3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdEJ1ZmZlciwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRp
b24pOworICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCk7CiAgICAgICAgICAgICBjaGVja0V4Y2VwdGlv
bihpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yMjI3LDYgKzIyNjAsOSBAQCBzdGF0aWMgYm9vbCBy
dW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZl
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBTdHJpbmcgaW50ZXJwcmV0ZXJOYW1lKEFTQ0lJTGl0ZXJhbCgiSW50ZXJwcmV0ZXIiKSk7CiAg
ICAgCiAgICAgYm9vbCBzaG91bGRRdWl0ID0gZmFsc2U7CkBAIC0yMjc3LDcgKzIzMTMsNyBAQCBz
dGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygp
OwogICAgIH0KICAgICBwcmludGYoIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElVdGlscy5oCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSVV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMyBAQCBlbnVtIGNsYXNz
IEV4Y2VwdGlvblN0YXR1cyB7CiAKIGlubGluZSBFeGNlcHRpb25TdGF0dXMgaGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhj
ZXB0aW9uUmVmKQogewotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uUmVmKQogICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uUmVm
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEyOCwxMiArMjEyOCwxOSBAQAogCQlG
RTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY2MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovOyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDRE
IC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUx
RTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM3MUQ3OEYwMUQwMEE2OTRE
NCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkx
MzkxRDc4RjNBRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAv
KiBFeGNlcHRpb25TY29wZS5jcHAgKi87IH07CisJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAv
KiBFeGNlcHRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2NDkxM0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkxM0Qx
RDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBF
eGNlcHRpb25FdmVudC5jcHAgKi87IH07CiAJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTY4QzYzODFCOTBERTBCMDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjhDNjM1MUI5
MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovOyB9OwogCQlGRTdC
QTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuY3BwICovOyB9OwogCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QzQxOTYxQjk3RkM0
QjAwRjRENTk4IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovOyB9OworCQlGRTgwQzE5NzFENzc1
Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTgw
QzE5OTFENzc1RkJFMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi87IH07CisJCUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNl
cHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFODBDMTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RTk5QjI0QTFDMjRDM0Q3MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQzNSwxMSAr
NDQ0MiwxOCBAQAogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291
cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE1MTgzQzVB
MjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDRE
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxM0ExRDc4RjQ2MTAw
QTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRTFBMUE3Q0VDMDBG
MUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5NjFE
Nzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXRjaFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBD
MTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhdGNoU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVu
dExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdD
RjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYx
QkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njk4LDggQEAKIAkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAogCQkJCUJDQTYy
REZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlE
RjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCisJCQkJRkU4MEMxOTgxRDc3NUZCNDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuY3BwICovLAorCQkJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi8sCiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNz
SW5mby5oICovLAogCQkJCTBGRTA1MDFDMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuY3BwICovLAogCQkJCTBGRTA1MDFEMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuaCAqLywKQEAgLTU3NDgsMTAgKzU3NjQsMTYgQEAKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAw
RjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNG
Q0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggKi8sCisJCQkJRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8qIEV4Y2VwdGlv
bkV2ZW50LmNwcCAqLywKKwkJCQlGRTY0OTEzQTFENzhGNDYxMDBBNjk0RDQgLyogRXhjZXB0aW9u
RXZlbnQuaCAqLywKKwkJCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAgKi8sCisJCQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyog
RXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0
aW9uSGVscGVycy5jcHAgKi8sCiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2Vw
dGlvbkhlbHBlcnMuaCAqLywKKwkJCQlGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovLAorCQkJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRp
b25TY29wZS5oICovLAogCQkJCTg2Q0EwMzJEMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxl
LmNwcCAqLywKIAkJCQk4NkNBRkVFMjEwMzVEREU2MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oICov
LAogCQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKQEAg
LTYxNDMsNyArNjE2NSw2IEBACiAJCQkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RS
dW5uZXJVdGlscy5oICovLAogCQkJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Nj
b3BlLmNwcCAqLywKIAkJCQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5o
ICovLAotCQkJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24u
aCAqLywKIAkJCQkwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUu
aCAqLywKIAkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi8sCiAJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLywKQEAgLTc2OTIsNyArNzcxMyw3IEBACiAJCQkJMEZFMDUwMUExQUE5MDkxMTAw
RDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQgLyogVGhy
b3dTY29wZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTYwMjlEOTFENkUxRTRGMDAz
MDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMUIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMDgsNiArODIyOSw3IEBA
CiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFp
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0
MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMDEsNiArODMyMyw3IEBACiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5
IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDdBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RENCOTczMTJFNTE5M0YwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQTRFQzkwQzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkI2RDc1MzE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJy
aWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4MzMz
LDcgQEAKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAvKiBFeGNlcHRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFD
QjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODMzLDYgKzg4NTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNlcHRpb25T
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyog
QWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFD
MTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTMwNyw2ICs5MzMyLDcgQEAKIAkJCQkwRjJCNjZFNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENhdGNoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzM5
LDYgKzkzNjUsNyBAQAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBC
Mzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEzRDFENzhGQzJGMDBBNjk0RDQg
LyogRXhjZXB0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1
OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxOSw2ICs5NDQ2LDcgQEAK
IAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3
QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVBQjQ5REMxQkVDODA4MjAwNzAyMEZCIC8qIFBlckdsb2JhbE9iamVjdFdyYXBwZXJXb3JsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTAgKzEwNSwxMiBAQCBKU1ZhbHVlIFNj
cmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEwICsxMjIsMTMgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogcwogCiBTdHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1
ZShzY3JpcHRTdGF0ZSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlv
biBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0Lgot
ICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHNjcmlwdFN0YXRl
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjMsNiArNjIzLDkgQEAgdm9pZCBEZWJ1Z2dlcjo6
dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZgogCiB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVk
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAobV9p
c1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjIsNyArNjY1LDcgQEAgdm9pZCBEZWJ1
Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIHsKICAgICAgICAgUGF1c2VSZWFz
b25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIGRpZEhpdEJyZWFrcG9pbnQgPyBQYXVzZWRGb3JC
cmVha3BvaW50IDogbV9yZWFzb25Gb3JQYXVzZSk7CiAgICAgICAgIGhhbmRsZVBhdXNlKHZtRW50
cnlHbG9iYWxPYmplY3QsIG1fcmVhc29uRm9yUGF1c2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgbV9wYXVzaW5nQnJlYWtwb2ludElEID0g
bm9CcmVha3BvaW50SUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNyw3ICsyMTcsOSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFs
dWF0ZVdpdGhTCiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gY2F0
Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBudWxscHRyOwogICAgIGlmIChpc1RhaWxEZWxldGVkKCkpCkBAIC0yMjgsNyArMjMw
LDYgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBEZWJ1Z2dlckV2YWxFbmFibGVyIGV2YWxF
bmFibGVyKGNhbGxGcmFtZSk7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogCiAgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTI0Myw5ICsyNDQsOSBA
QCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgSlNTY29wZTo6
Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlKCktPmpzU2NvcGUoKSwgdmFyaWFibGVzVW5k
ZXJURFopOwogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKGNhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3JpcHQpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmRlcml2ZWRDb250ZXh0VHlwZSgp
LCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFs
Q29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkg
eworICAgICAgICBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIApAQCAtMjU3LDkgKzI1OCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6
OmV2YWx1YXRlV2l0aFMKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdGhpcy0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Cisg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZiAoc2Nv
cGVFeHRlbnNpb25PYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiwxNCArMTEyLDE1IEBAIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworCisgICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOwogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICAvLyBJ
dCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFu
eXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCkBA
IC0xMzEsNyArMTMyLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5k
ID09IEdlbmVyaWNVbndpbmQpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICBBU1NFUlQoISF2bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgCiAgICAgCiAgICAgcHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1
Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCB0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9vbCBk
aXJlY3Q+CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgSklUX09QRVJBVElPTiAKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3Bl
cnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHN0cmljdCk7CkBAIC0xNzksMTEgKzE4MCwx
MiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3Rv
ciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKS0+c3RydWN0dXJlKCkpOwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChwcm90by5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgYXNPYmplY3QocHJvdG8pKTsKQEAgLTIwNywx
MiArMjA5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAg
SlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90
IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIo
ZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhICYgYikpOwpAQCAt
MjIyLDEyICsyMjUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsK
ICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGlu
dDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9J
bnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgfCBiKSk7
CkBAIC0yMzcsMTIgKzI0MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAg
ICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSBe
IGIpKTsKQEAgLTI1MiwxMiArMjU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7
CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IG9wMi50b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGEgPDwgKGIgJiAweDFmKSkpOwpAQCAtMjY3LDEyICsyNzMsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoYSA+PiAoYiAmIDB4MWYpKSk7CkBAIC0yODIsMTIgKzI4OSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUg
b3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgdWludDMyX3QgYSA9IG9w
MS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGEgPj4gKGIgJiAweDFmKSkpKTsKQEAgLTMxMywxMiArMzIxLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIC8gYikpOwpAQCAtMzI4LDEwICszMzcsMTEgQEAgZG91Ymxl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhBYnMoRQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGZhYnMoYSk7CiB9CkBAIC0zNDAsMTAgKzM1MCwx
MSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENvcyhFCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gY29zKGEpOwogfQpAQCAtMzUy
LDEwICszNjMsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bgog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihhKTsKIH0KQEAgLTM2NCwxMCArMzc2LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoTG9nKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBsb2coYSk7CiB9CkBAIC0zNzYsMTAgKzM4OSwxMSBAQCBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNpbihFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVt
YmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gc2luKGEpOwogfQpAQCAtMzg4LDEwICs0MDIsMTEg
QEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KAogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9
IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CkBAIC00MTcs
NyArNDMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9w
ZXJ0eSk7CiAKQEAgLTQ0MywxMCArNDU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJj
aWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXko
ZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOwogfQpAQCAtNDU1LDcgKzQ3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKICAgICBpZiAocHJvcGVydHkuaXNVSW50
MzIoKSkKQEAgLTQ3Niw3ICs0OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC04NDUsNiArODYyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWwg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFRoaXMpOwpAQCAtODcwLDExICs4ODgsMTEgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGJhc2VW
YWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5n
ZXQoZXhlYywgcHJvcGVydHksIHNsb3QpKTsKIH0KQEAgLTg5OSw5ICs5MTcsMTAgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIg
cHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9
CkBAIC05MTAsOSArOTI5LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlz
LCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0KQEAgLTE0MjQsOSArMTQ0NCw5IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRl
Y29kZShhKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8g
SW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVz
dCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFs
dWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxv
d3M8aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpKSkgewogICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTQ0MywxMSArMTQ2MywxMSBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1Zh
bHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNl
IHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIg
PSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNTdHJpbmcq
IHN0cjMgPSBKU1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2
bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgpLCBzdHIyLT5sZW5ndGgoKSwg
c3RyMy0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA1
Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw2ICs3OTcsNyBAQCB2b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhl
YXBSb290CiB2b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBHQ1BIQVNFKE1hcmtpbmdFeGNlcHRpb24pOworCiAgICAgaWYgKCFtX3ZtLT5l
eGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDcgKzEzMyw5IEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6Omlu
amVjdGVkU2MKIAogSlNDOjpKU09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgaW50IGlkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKKyAgICBW
TSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU2
LDcgKzE1OCw3IEBAIEpTQzo6SlNPYmplY3QqIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3IKICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihpZCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6
OmNhbGwoc2NyaXB0U3RhdGUsIGZ1bmN0aW9uVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xv
YmFsVGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQuZ2V0T2JqZWN0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIw
LDcgKzIyMCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUodm0pOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENh
bGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKGluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoKSkKQEAgLTIyOCw4ICsyMjksMTIg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgfQogCiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9T
eXN0ZW1Db25zb2xlKCkpIHsKICAgICAgICAgaWYgKGNhbGxTdGFjay0+c2l6ZSgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgcHJvZ3JhbSA9IHNjcmlw
dFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlv
bjsKQEAgLTI1OSwxMiArMjU5LDEzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omdl
dEludGVybmEKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAKICAgICBpZiAo
SlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21pc2UqPih2YWx1ZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgc3dpdGNoIChwcm9t
aXNlLT5zdGF0dXMoZXhlYy0+dm0oKSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1
czo6UGVuZGluZzoKQEAgLTI4Niw3ICsyODcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJ0YXJnZXRGdW5jdGlv
biIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImJvdW5kVGhpcyIsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpKSk7CkBAIC0yOTgsNyAr
Mjk5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChQcm94eU9iamVjdCogcHJveHkgPSBqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0Kj4odmFsdWUp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgidGFyZ2V0IiksIHByb3h5LT50YXJnZXQoKSkpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoImhhbmRsZXIiKSwgcHJveHktPmhhbmRsZXIoKSkp
OwpAQCAtMzEyLDcgKzMxMyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYXJyYXkiLCBpdGVyYXRlZFZhbHVl
KSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29u
c3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGtpbmQpKTsKQEAgLTMzNSw3ICsz
MzYsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAg
IH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgIm1hcCIsIG1hcEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKQEAgLTM1
Nyw3ICszNTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInNldCIsIHNldEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsK
QEAgLTM2Nyw3ICszNjgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRl
cm5hCiAgICAgaWYgKEpTU3RyaW5nSXRlcmF0b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWlj
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdHJpbmciLCBzdHJpbmdJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0z
NzYsNyArMzc3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQog
ICAgIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpz
RHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAib2JqZWN0
IiwgcHJvcGVydHlOYW1lSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICByZXR1
cm4gYXJyYXk7CkBAIC00MDQsNiArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6d2Vha01hcEVudAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBK
U1dlYWtNYXAqIHdlYWtNYXAgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha01hcCo+KHZhbHVlKTsKICAg
ICBpZiAoIXdlYWtNYXApCkBAIC00MTgsNyArNDIwLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha01hcEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBEYXRh
KCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpA
QCAtNDUxLDYgKzQ1Myw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRF
bnQKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrU2V0KiB3
ZWFrU2V0ID0ganNEeW5hbWljQ2FzdDxKU1dlYWtTZXQqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFr
U2V0KQpAQCAtNDY1LDcgKzQ2OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtTZXRFbnQKICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihm
ZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5iZWdpbigp
OyBpdCAhPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBK
U09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ5NSw2ICs0
OTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
cjsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
aWYgKEpTTWFwSXRlcmF0b3IqIG1hcEl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJh
dG9yKj4odmFsdWUpKQpAQCAtNTA1LDcgKzUwOSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xv
bmUoZXhlYyk7CiAgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlO
YW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1
ZSkpIHsKICAgICAgICAgaXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpKSB7CkBAIC01MjUsMTggKzUyOSwxOCBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4
ZWMsIG5leHQpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlVwogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikpOwogCiAgICAgU3RyaW5nIHNjcmlwdCA9
IHNjcmlwdFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4
Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIFJlZjxTY3JpcHRDYWxsU3RhY2s+
IGNyZWF0ZVNjcmlwdENhbGxTdGEKIAogc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0
aW9uRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGV4Y2VwdGlv
bk9iamVjdCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlciwgU3RyaW5nKiBzb3Vy
Y2VVUkwpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IG5lZWQgdG8gZXZhbHVhdGUgSmF2
YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNl
cHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJsaW5lIikpOwogICAgICpsaW5lTnVtYmVyID0gbGluZVZhbHVlICYmIGxpbmVWYWx1
ZS5pc051bWJlcigpID8gaW50KGxpbmVWYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwpAQCAtMTI2
LDcgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb20KICAg
ICAqY29sdW1uTnVtYmVyID0gY29sdW1uVmFsdWUgJiYgY29sdW1uVmFsdWUuaXNOdW1iZXIoKSA/
IGludChjb2x1bW5WYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwogICAgIEpTVmFsdWUgc291cmNl
VVJMVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7CiAgICAgKnNvdXJjZVVSTCA9IHNv
dXJjZVVSTFZhbHVlICYmIHNvdXJjZVVSTFZhbHVlLmlzU3RyaW5nKCkgPyBzb3VyY2VVUkxWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykgOiBBU0NJSUxpdGVyYWwoInVuZGVmaW5lZCIp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKIH0KIAogUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwg
c2l6ZV90IG1heFN0YWNrU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBt
X2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxl
KCksIGNhbGxGcmFtZSwgJm1fcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBhcmd1bWVudENvdW50
ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCksIG1fYXJndW1lbnRzLmRhdGEoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUsIHNjb3BlKTsKLSAgICAgICAgICAgIG1fdmFsaWQgPSAhY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIG1fdmFsaWQgPSAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgY2FsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiwxNCArMTE2LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBw
b2ludGVyLCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFy
aW5nbHkgaW4gbmV3IGNvZGUuCiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBw
bGFjZXMgaW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUg
c29vbi4KIAotICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0
aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGxhc3RF
eGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmxhc3RFeGNlcHRpb24oKTsgfQotICAgICAg
ICB2b2lkIGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckxhc3RFeGNlcHRpb24oKTsg
fQotCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21t
b25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3Bl
cnR5TmFtZXM7IH0KICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAy
MDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAg
ICAgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZy
YW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CkBA
IC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIgYmFpbGVk
LCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhj
YWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogCkBAIC0yMjcsNyArMjI3
LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAgICAg
ICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCkp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjY2LDEzICs2NjYsMTUgQEAgcHJpdmF0ZToK
IAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpIHsKLSAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUt
PnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQog
ICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUpOwot
ICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTc2MCw2ICs3NjIsOCBAQCBwcml2YXRlOgogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodW53aW5kU3RhcnQg
PT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc3OCw3ICs3ODIsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp1CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzRW1wdHkoKSB8
fCAoZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgJiYgIWV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKSkK
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsKIAotICAgIEFTU0VSVCh2bS5leGNl
cHRpb24oKSAmJiB2bS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpICYmIHNjb3BlLmV4Y2VwdGlvbigpLT5zdGFj
aygpLnNpemUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBD
LCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyID0gbnVsbHB0cjsKQEAgLTk3Nyw3ICs5ODEsNyBAQCBmYWlsZWRKU09OUDoKIAogICAg
IC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9ncmFtLT5nZW5l
cmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotCisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0K
IApAQCAtOTg2LDcgKzk5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmEKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVz
eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMDQ5LDcgKzEwNTMsNyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0
dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52
YWxpZCBzdGF0ZS4KQEAgLTExMDAsMTIgKzExMDQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwog
Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoTElLRUxZKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7
CkBAIC0xMTE1LDcgKzExMTksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiB7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpA
QCAtMTE2NCw3ICsxMTY4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9y
QnVzeSgpKQpAQCAtMTI3MCw3ICsxMjc0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShNb2R1bGVQcm9ncgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQpAQCAtMTMxMSwxMiArMTMxNSwxNCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVi
dWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBz
d2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBA
IC0xMzM4LDcgKzEzNDQsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKLX0gICAgCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTQgQEAKICNkZWZpbmUgSW50ZXJwcmV0ZXJfaAogCiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xMDUsOCArMTA3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0p
CiAgICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEV4Y2Vw
dGlvbiA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAg
ICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2Vw
dGlvblNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFBy
aW50U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIEpJVENv
ZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0
ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSkKIHsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZvaWQqIGVudHJ5QWRkcmVzczsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHBy
b3RvQ2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgSlNWYWx1ZSBKSVRD
b2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxzZQogICAgICAgICBlbnRyeUFk
ZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2Ny
aXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7Ci0gICAgcmV0dXJuIHZtLT5l
eGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJldHVybiBzY29wZS5leGNlcHRp
b24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6
OmRmZ0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0tPnNoYWRvd0NoaWNrZW4oKS5s
b2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGhy
b3dQYWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0
aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
dm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgdW53aW5k
U3RhcnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9wdGltaXplLCBiYXNlLT5j
bGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0
ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0g
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vzc1R5cGUp
OwpAQCAtNDk5LDYgKzQ5OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdP
clN5bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC01MjAsNyArNTIx
LDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CiAgICAgLy8g
RG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0g
ICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KSkKQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogeworICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAg
ICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0
cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJl
IHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC01NjMsNyArNTY2LDcgQEAgc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1
YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eSkpIHsKQEAgLTc4NiwxNCArNzg5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAKKyAg
ICBWTSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAg
IAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpLCBn
bG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1
ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTgxNyw3
ICs4MjIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAg
ICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04NDYsNyArODUxLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVj
Q2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ3
Miw4ICsxNDc3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBlIHsKIAogc3RhdGljIHZvaWQg
cHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0KiBhY2Nlc3NvciwgQWNjZXNz
b3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHByb3BlcnR5S2V5
ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCkBA
IC0xNjE4LDggKzE2MjUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1
aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNh
blVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVm
UHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkgewpAQCAtMTY2MSwxMCArMTY3
MCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0x
ODU1LDYgKzE4NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKICAgICAKQEAgLTE4NzIsMTAgKzE4ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFz
ZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7
CiAgICAgfQpAQCAtMTkyNCwxMCArMTkzNCwxMCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQogICAgICAgICBj
b3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CkBAIC0yMTMyLDcg
KzIxNDIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQo
c2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8sIHNsb3QsIGlkZW50KTsK
QEAgLTIzODMsMTEgKzIzOTMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
TXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKQEAgLTIzOTUsNiArMjQwNiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDAyLDEwICsyNDE0LDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ4MCwxMSArMjQ5MiwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ5Miw2ICsyNTA1LDcgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVz
ID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKQEAgLTI0OTksMTAgKzI1MTMs
MTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC0y
NTkyLDEzICsyNjA2LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lm
RXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBleHRlcm4gIkMiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgSW5zdHJ1Y3Rp
b24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCksICIgKHJl
dHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9u
KCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICByZXR1cm4gTExJbnQ6OmV4
Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTUsNyArNTYsOCBAQCB2b2lkKiBjYWxsVG9U
aHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgZGF0YUxv
ZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIiAoY2FsbFRvVGhyb3cp
LlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKGNhbGxU
b1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0
aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmICh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChP
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMTUgKzc4LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBCeXRlY29kZVNlcXVlbmNlOjpm
b3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIp
OwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2UtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGls
YXRpb24uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyOCAr
MTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIEpTVmFs
dWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRC
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHByb2ZpbGVkQnl0
ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0Fy
cmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlw
dGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVz
Y3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fY291bnRlcnMuYmVnaW4o
KSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpT
T2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTE0
NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJz
LCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXpl
KCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29z
ckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBK
U0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCArMTAwLDI1IEBAIHZvaWQg
RGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpTVmFsdWUgRGF0YWJhc2U6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICBKU0FycmF5KiBi
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBieXRlY29kZXMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMp
OwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxh
dGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV2ZW50cy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
CShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFk
ZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9yaWdpblN0YWNrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6
ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsx
OTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQgewogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRUNNQSA5LjQuMi4z
OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUK
ICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoTElLRUxZ
KGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUsNyArMjA4LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsK
IAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9u
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rv
ci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogICAgICAgICAgICAg
aWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB9IGVsc2Ug
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAKICAg
ICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIyOCw3ICsyMzEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBKU09i
amVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3Bl
Y2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0KTsKIH0KQEAgLTI4
NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgK
ICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2ln
bmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtMzMwLDMxICszMzMsMzIg
QEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgICAgICB1bnNp
Z25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4
SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8v
IDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRo
aXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgLy8gMi4g
TGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpv
aW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRo
ZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4NywxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlH
ZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAg
ZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMsMTQgKzQwNywxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1MiArNDI0LDUyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0cmlu
Z0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAg
QXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24g
PSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcp
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNP
YmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAj
ZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQsMTYgQEAgc3RhdGljIGlubGlu
ZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1N0cmluZyogc2VwYXJhdG9y
LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDUuIElmIGxlbiBpcyB6
ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwot
CiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxl
bWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRlZmluZWQgb3Ig
bnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgUiBiZSA/IFRv
U3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsK
ICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgpAQCAtNTI0
LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAg
ICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4g
TGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVm
aW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxl
dCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUsNyArNTQyLDcgQEAgc3RhdGlj
IEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBl
bGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHBy
b2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAtNTYxLDYgKzU2OCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBT
dHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4o
RXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRl
LCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CkBA
IC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0
ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAt
NjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUK
ICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBqc0RvdWJsZU51bWJlcih2YWx1
ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3du
VG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
c3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZShzdGF0ZS52bSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdl
bmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYzMCw2ICs2NDAsOSBAQCBnZW5l
cmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUg
PyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3Ro
KD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMs
IHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQg
c2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtNjUzLDcgKzY2
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3Ro
KTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1Nl
cGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJp
bmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1
ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmpl
Y3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywg
dGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTcwMSw3ICs3MTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTcxNCw2ICs3
MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1Zh
bHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpAQCAtNzI2LDcgKzc0MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKQEAgLTczOCw3
ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8
aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHN3
aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc5OCw0MSArODEzLDQxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2ln
bmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWdu
ZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMg
PSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAg
ICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhp
c3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlz
dHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBw
ZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElu
bGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb3dlckV4aXN0
cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCB1cHBl
ciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
ICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtODU2LDcgKzg3
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9IGVs
c2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAgLTg2NywxMSArODg0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIHsKICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2Fy
cmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAgLTg5MiwxNCArOTEwLDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0
ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CkBA
IC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtOTMyLDcgKzk1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKQEAgLTk2NywxMiArOTg1LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2sp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgyLDcgKzEwMDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJl
Z2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVj
LT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxl
dGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNl
PihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElu
bGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTAxMywyNCArMTAzMSwyNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMp
OwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewogICAgICAg
ICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGspLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihsZW5ndGggKyBuckFyZ3MpOwpAQCAtMTA0MCwyNiArMTA2MCwyOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogICAgIEpT
VmFsdWUgc2VhcmNoRWxlbWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBpbmRl
eCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFs
KGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTEw
NjgsNiArMTA5MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNQogICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKQEAgLTEwODksMTggKzEx
MTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBkbyB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKTsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFy
Y2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAK
QEAgLTExMDksMjMgKzExMzMsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc291
cmNlLT5pbmRleGluZ1R5cGUoKSkgJiYgIXNvdXJjZS0+c3RydWN0dXJlKCktPmhvbGVzTXVzdEZv
cndhcmRUb1Byb3RvdHlwZSh2bSkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNvdXJj
ZS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRPZmZzZXQgKyBp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHNvdXJjZSwgaSk7
Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTExNTMsNyArMTE3OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25jYXRBcHBlbmRPbmUoRXgKIAogICAgIGlmICghcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhl
Yywgdm0sIDAsIGZpcnN0KSkgewogICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTExOTcsMTIgKzEyMjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RBcnJheS0+bWVy
Z2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZEFycmF5LT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgaWYgKHR5cGUgPT0gTm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZhc3RDb3B5KHZtLCBz
ZWNvbmRBcnJheSkgfHwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXpl
KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQogICAgICAgICAgICAgfHwgIW1vdmVFbGVtZW50
cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFy
cmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bS5leGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE0IEBAIHZvaWQgQm9vbGVh
bkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIC8vIEVDTUEgMTUuNi4yCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJvb2xlYW4gPSBq
c0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKICAgICBTdHJ1Y3R1
cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
Ym9vbGVhblN0cnVjdHVyZSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCks
IGJvb2xlYW4pOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0
ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBi
b29sZWFuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDIwNTM4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEyIEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnUKIAogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYXRjaFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXRjaFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitD
YXRjaFNjb3BlOjpDYXRjaFNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29w
ZUVudHJ5LCBsb2NhdGlvbikKK3sKK30KKworQ2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisKKyAgICBtX3Zt
LnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpDYXRj
aFNjb3BlRXhpdCwgbV9kZXB0aCwgbV9sb2NhdGlvbik7CisgICAgCisgICAgaWYgKG1fdm0ubV90
cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25F
dmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fbG9jYXRpb24pOworICAgICAgICBpZiAobV92bS5tX25l
ZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLm1fdHJh
Y2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAgICAgICBXVEZSZXBvcnRC
YWNrdHJhY2UoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5leGNlcHRpb24o
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2F0Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhdGNoU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2F0
Y2hTY29wZV9oCisjZGVmaW5lIENhdGNoU2NvcGVfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uU2Nv
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlv
blNjb3BlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYXRjaFNjb3BlKFZNJiwg
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgQ2F0Y2hTY29wZShjb25zdCBDYXRjaFNjb3Bl
JikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRjaFNjb3BlJiYpID0gZGVmYXVsdDsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5DYXRjaFNjb3BlKCk7CisKKyAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkKKyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbV92bS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KK307CisKKyNkZWZpbmUg
REVDTEFSRV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElO
RV9fKSkKKworI2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoK
KyAgICBBTFdBWVNfSU5MSU5FIENhdGNoU2NvcGUoVk0mIHZtKQorICAgICAgICA6IEV4Y2VwdGlv
blNjb3BlKHZtKQorICAgIHsgfQorICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0g
ZGVsZXRlOworICAgIENhdGNoU2NvcGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fdm0uY2xlYXJFeGNlcHRpb24o
KTsgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwKKyAgICBKU0M6
OkNhdGNoU2NvcGUoKHZtX18pKQorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2F0Y2hTY29w
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgQkVHSU5fTk9fU0VUX1BDKCkgXAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKQorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsgXAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIFNF
VF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKQEAgLTk5LDEwICsxMDEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBkb0V4Y2VwdGlvbkZ1enppbmdJZkVuYWJsZWQoZXhlYywgIkNvbW1vblNsb3dQ
YXRocyIsIHBjKTsgICBcCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpIHsg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYyk7ICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
IHsgICBcCisgICAgICAgICAgICBSRVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAg
IFwKICAgICAgICAgICAgIEVORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBFTkQoKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMTQ0LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBDQUxM
X0NIRUNLX0VYQ0VQVElPTihleGVjLCBwYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBFeGVjU3RhdGUqIGNjZUV4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBJbnN0cnVjdGlvbiogY2NlUEMgPSAocGMpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgQ0FMTF9FTkRfSU1QTChjY2VFeGVjLCBMTEludDo6Y2FsbFRvVGhy
b3coY2NlRXhlYykpOyAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCkBAIC00MjcsNyArNDI5
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX211bCkKICAgICBKU1ZhbHVlIGxlZnQgPSBP
UF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7
CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVt
YmVyKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtNDQy
LDcgKzQ0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdWIpCiAgICAgSlNWYWx1ZSBs
ZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9QX0MoMykuanNW
YWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSByaWdo
dC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgLSBiKTsK
QEAgLTQ1NywxMCArNDU5LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kaXYpCiAgICAg
SlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9Q
X0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91Ymxl
IGIgPSByaWdodC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
UkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC8gYik7
CiAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewpAQCAtNDcyLDcgKzQ3NCw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihqc01vZChhLCBi
KSkpOwpAQCAtNDgyLDEwICs0ODQsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvdykK
IHsKICAgICBCRUdJTigpOwogICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGRvdWJsZSBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIFJFVFVSTihq
c051bWJlcihvcGVyYXRpb25NYXRoUG93KGEsIGIpKSk7CiB9CkBAIC00OTQsNyArNDk2LDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGlu
dDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9D
KDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA8PCAo
YiAmIDMxKSkpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPj4gKGIgJiAzMSkpKTsKQEAgLTUxNCw3ICs1MTYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJTigpOwog
ICAgIHVpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMzEpKSkpOwpAQCAtNTMxLDcgKzUzMyw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRhbmQpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBP
UF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhICYg
YikpOwpAQCAtNTQxLDcgKzU0Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRvcikK
IHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAg
UkVUVVJOKGpzTnVtYmVyKGEgfCBiKSk7CkBAIC01NTEsNyArNTUzLDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9Q
X0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgp
LnRvSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgXiBiKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIGJvb2wgb3BJbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVy
dHkoZXhlYywgaSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gcHJvcE5hbWUudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IGludGVycHJldGVyVGhyb3dJbkNhbGxlcihFeGVjU3RhdGUqCiAKICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAg
ZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIi5cbiIpOwor
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBzY29wZS5leGNlcHRpb24oKSwgIi5c
biIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTYgKzg3LDE5
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKIAogSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
CiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcHJvZ3JhbSk7CiAgICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24o
KTsKLSAgICAgICAgZXhlYy0+dm0oKS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTEwNSw5
ICsxMDgsOSBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4
ZWMsIE5vdFN0cmljdE1vZGUpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJl
dGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgdGhpc09iaik7CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xNDcsOSArMTUwLDExIEBAIHN0YXRpYyBTeW1ib2wq
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnQKIAogc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBy
ZWplY3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QpOwogICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTE3NiwxNyArMTgxLDE5IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSBpbml0aWF0b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVh
ZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+
dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3Rm
VGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2
bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZv
ckVudHJ5UG9pbnRNb2R1bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVT
eW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJbnNlcnQg
dGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhl
IGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIo
KS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBzb3Vy
Y2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJuIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZShsb2NrLCBleGVjLCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5p
dGlhdG9yKTsKQEAgLTIxMywxOCArMjIwLDIwIEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9k
dWxlKEV4ZWNTdGF0ZSoKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
Ci0gICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMt
PnZtKCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVs
ZSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0
byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5
LgogICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgSlNTb3VyY2VDb2RlIG9iamVjdCB0byB3cmFwIGFy
b3VuZCB0aGlzIHNvdXJjZS4KICAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92
aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3
KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gbG9hZE1vZHVsZShsb2NrLCBleGVj
LCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5pdGlhdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTQgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGJvb2wgY29uZGl0aW9u
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKGNvbmRp
dGlvbikKQEAgLTIyNSw2ICsyMjcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNiw3ICsyNDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUpOwpAQCAtMjQ1LDYg
KzI0OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVF
bmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNs
aWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAg
IGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMjU2LDcgKzI2Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGNsaWVudC0+cHJvZmlsZUVuZChleGVjLCB0aXRsZSk7CkBAIC0yNjUsNiArMjcxLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0yNzYsNyArMjg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Y2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsKQEAgLTI5Miw2ICszMDAsOCBA
QCBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoCiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTMwMSw3
ICszMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHRpdGxlID0gQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0zMTEsNiArMzIxLDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMjAsNyArMzMyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRs
ZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUg
PSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0YXRpYyBkb3VibGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIAogICAg
IGRvdWJsZSB2YWx1ZTsKQEAgLTE2Nyw3ICsxNjgsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0
ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHZhbHVlID0gbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMoZXhlYywgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogCiAgICAgU3RydWN0dXJlKiBkYXRl
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CkBAIC0yMDIsMTAgKzIwMywxMiBAQCBDYWxs
VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBTdHJpbmcgZGF0ZVN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLT52bSgpLCBkYXRlU3RyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDMsNyArNjAzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkRh
dGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJlIGFu
IG9iamVjdC4iKTsKQEAgLTYxNCw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBKU1ZhbHVlIGhpbnRWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdHlwZSA9IHRvUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZShleGVjLCBoaW50VmFsdWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAodHlwZSA9PSBOb1By
ZWZlcmVuY2UpCkBAIC0xMTIzLDIwICsxMTI0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBK
U1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVy
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEodGltZVZhbHVlLmlzSW50MzIoKSB8
fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgpKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCi0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTE0NSw3ICsxMTQ3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0
cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChl
eGVjLCBhc09iamVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmlu
ZyBkaWQgbm90IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsMTEgQEAgdm9pZCBFcnJvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRD
b3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVy
ZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUs
IG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihFeGVjUwogU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmFt
ZVZhbHVlOwogICAgIGF1dG8gbmFtZVByb3BlcnROYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZTsKQEAgLTE3NiwxNCArMTc3LDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRU
b1N0cmluZygKICAgICAgICAgfQogICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5
cGVEaXJlY3QoKTsKICAgICB9Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbmFtZVN0cmluZzsKICAgICBp
ZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3Ii
KTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWVWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKQEAgLTE5MiwxNCArMTkzLDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNl
OjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICBQcm9wZXJ0eVNsb3QgbWVzc2FnZVNsb3QodGhpcywg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgaWYgKEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgbWVzc2FnZVByb3BlcnROYW1l
LCBtZXNzYWdlU2xvdCkgJiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdl
VmFsdWUgPSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmc7CiAgICAgaWYgKCFtZXNzYWdlVmFsdWUp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyAzLiBMZXQgbmFtZSBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCAibmFtZSIuCiAgICAgSlNWYWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUg
aXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJlICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUg
VG9TdHJpbmcobmFtZSkuCkBAIC05NCwxMyArOTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJF
cnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gNS4gTGV0
IG1zZyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudCAibWVzc2FnZSIuCiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IC8vIChzaWMpCkBAIC0xMTEsNyArMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlcnJvclByb3RvRgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZl
bnQuaCIKKworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnQgZXZlbnQp
Cit7CisgICAgY29uc3QgY2hhciogZXZlbnROYW1lOworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeToKKyAgICAgICAgZXZl
bnROYW1lID0gIkNhdGNoU2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpT
Qzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0OgorICAgICAgICBldmVudE5hbWUgPSAi
Q2F0Y2hTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlv
bkV2ZW50OjpOZWVkRXhjZXB0aW9uQ2hlY2s6CisgICAgICAgIGV2ZW50TmFtZSA9ICJOZWVkIGV4
Y2VwdGlvbiBjaGVjayI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25F
dmVudDo6VGhyb3dTY29wZUVudHJ5OgorICAgICAgICBldmVudE5hbWUgPSAiVGhyb3dTY29wZSBF
bnRyeSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6VGhy
b3dTY29wZUV4aXQ6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvd1Njb3BlIEV4aXQiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93OgorICAgICAg
ICBldmVudE5hbWUgPSAiVGhyb3ciOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnQoZXZlbnROYW1lKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitlbnVtIGNsYXNzIEV4Y2Vw
dGlvbkV2ZW50IHsKKyAgICBDYXRjaFNjb3BlRW50cnksCisgICAgQ2F0Y2hTY29wZUV4aXQsCisg
ICAgTmVlZEV4Y2VwdGlvbkNoZWNrLAorICAgIFRocm93U2NvcGVFbnRyeSwKKyAgICBUaHJvd1Nj
b3BlRXhpdCwKKyAgICBUaHJvdworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudExvY2F0aW9uLmgiCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpFeGNlcHRpb25FdmVudExv
Y2F0aW9uIGxvY2F0aW9uKQoreworICAgIG91dC5wcmludChsb2NhdGlvbi5mdW5jdGlvbk5hbWUs
ICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24gMjA1Mzg5KQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaDoyMDUzODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKCkg
eyB9CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkKKyAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVu
Y3Rpb25OYW1lKQorICAgICAgICAsIGZpbGUoZmlsZSkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisg
ICAgeyB9CisgICAgCisgICAgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9Owor
ICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbGluZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24g
MjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRp
b24oKSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorc3RydWN0IEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24geworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oKSB7IH0KKyAgICBFeGNlcHRp
b25FdmVudExvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmls
ZSwgdW5zaWduZWQgbGluZSkKICAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQog
ICAgICAgICAsIGZpbGUoZmlsZSkKICAgICAgICAgLCBsaW5lKGxpbmUpCkBAIC00MSwzICs0MSwx
MSBAQCBzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgRXhjZXB0aW9uSGVscGVyc19oCiAjZGVmaW5l
IEV4Y2VwdGlvbkhlbHBlcnNfaAogCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUg
IkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlRocm93
U2NvcGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25TY29wZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1ND
T1BFX1ZFUklGSUNBVElPTikKKyAgICAKK0V4Y2VwdGlvblNjb3BlOjpFeGNlcHRpb25TY29wZShW
TSYgdm0sIEV4Y2VwdGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24g
bG9jYXRpb24pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9wcmV2aW91c1Njb3BlKHZtLm1fdG9w
RXhjZXB0aW9uU2NvcGUpCisgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbV9kZXB0
aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK3sK
KyAgICBtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUgPSB0aGlzOworICAgIAorICAgIGlmIChtX3Zt
Lm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnRIZWFkZXIoZW50cnlF
dmVudCwgbV9sb2NhdGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
KQorICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOworICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50
c1dpdGhTdGFja1RyYWNlcykKKyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAg
IH0KK30KKworRXhjZXB0aW9uU2NvcGU6On5FeGNlcHRpb25TY29wZSgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlKTsKKyAgICBtX3ZtLm1fdG9wRXhjZXB0
aW9uU2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cit9CisKK3ZvaWQgRXhjZXB0aW9uU2NvcGU6Omxv
Z0V2ZW50KEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0
aW9uKQoreworICAgIGxvZ0V2ZW50SGVhZGVyKGV2ZW50LCBsb2NhdGlvbik7CisgICAgZGF0YUxv
ZygiXG4iKTsKK30KKwordm9pZCBFeGNlcHRpb25TY29wZTo6bG9nRXZlbnRIZWFkZXIoRXhjZXB0
aW9uRXZlbnQgZXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAg
ZGF0YUxvZygiPCIsIG1fdm0ubV9leGNlcHRpb25FdmVudENvdW50KyssICI+IFsiLCBtX2RlcHRo
LCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25T
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvblNjb3BlX2gKKyNk
ZWZpbmUgRXhjZXB0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisgICAgCitjbGFzcyBFeGNlcHRpb247CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9T
Q09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIHVuc2lnbmVkIGRlcHRo
KCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aDsgfQorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkK
KyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IEV4Y2VwdGlvblNjb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnQgZW50cnlFdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2NvcGUm
KSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRlZmF1
bHQ7CisgICAgfkV4Y2VwdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGxvZ0V2ZW50KEV4Y2VwdGlv
bkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICB2b2lkIGxvZ0V2ZW50SGVhZGVy
KEV4Y2VwdGlvbkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKworICAgIFZNJiBtX3Zt
OworICAgIEV4Y2VwdGlvblNjb3BlKiBtX3ByZXZpb3VzU2NvcGU7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIHVuc2lnbmVkIG1fZGVwdGg7Cit9OworICAgIAor
I2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiBl
eGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvblNjb3BlKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZt
KQorICAgIHsgfQorICAgIEV4Y2VwdGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBk
ZWxldGU7CisgICAgRXhjZXB0aW9uU2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0Owor
CisgICAgVk0mIG1fdm07Cit9OworICAgIAorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NP
UEVfVkVSSUZJQ0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25TY29wZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25T
a2lwcGluZ0V2YWxFCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBzdWJjbGFzc1N0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rhcmdl
dCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBm
dW5jdGlvbiwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBzdWJjbGFzc1N0cnVjdHVyZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsx
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgLy8g
RWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgaWYgKHRhcmdldE9iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkpIHsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICAvLyBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUg
bGVuZ3RoIG9mIEEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxMyArMjE5LDE2IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6ZGVmaW5lT3duUHIKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCkpCiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChleGVjLCBpICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT52bSgpLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxNSArNzMsMTcgQEAgR2V0dGVyU2V0dGVyKiBHZXR0ZXJTZXR0ZXI6OndpdGhTZXR0
ZXIoVgogCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIEZJWE1FOiBTb21l
IGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBleGNlcHRp
b24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2luZyBoZXJlLgot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCk7
CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRl
ci0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlLCBBcmdMaXN0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0OjpkaXMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHZhbHVl
ID0gdGFyZ2V0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhTG9nKHZh
bHVlLCAiXG4iKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBA
IFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIHsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIC8vIFdlIGFsbG93IG5ld1RhcmdldCA9PSBKU1ZhbHVlKCkgYmVjYXVzZSB0aGUgQVBJ
IG5lZWRzIHRvIGJlIGFibGUgdG8gY3JlYXRlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgYSByZWFs
IEpTIGZyYW1lLgogICAgIC8vIFNpbmNlIHdlIGRvbid0IGFsbG93IHN1YmNsYXNzaW5nIGluIHRo
ZSBBUEkgd2UganVzdCB0cmVhdCBuZXdUYXJnZXQgPT0gSlNWYWx1ZSgpIGFzIG5ld1RhcmdldCA9
PSBleGVjLT5jYWxsZWUoKQogICAgIEFTU0VSVCghbmV3VGFyZ2V0IHx8IG5ld1RhcmdldC5pc0Nv
bnN0cnVjdG9yKCkpOwpAQCAtMTEwLDEzICsxMTEsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAgICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0
cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmlsZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4K
ICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5
cGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0
YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uo
dm0sIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGVWYWx1ZSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3Qu
Y29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBj
b25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDYgKzE2Miw5IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVE
YXRhKGMKIAogdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgLy8gMTAuMS4xIEluaXRpYWxpemVDb2xsYXRvciAoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgY29sbGF0b3IgaGFzIGFu
IFtbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gaW50ZXJuYWwgc2xvdCB3aXRoIHZhbHVlIHRydWUs
IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgICAvLyAyLiBTZXQgY29sbGF0b3IuW1tp
bml0aWFsaXplZEludGxPYmplY3RdXSB0byB0cnVlLgpAQCAtMTY5LDcgKzE3Miw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAvLyAzLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMp
OwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwg
dGhlbgpAQCAtMTgxLDE0ICsxODQsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25z
KS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOwogICAg
ICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIDcuIExldCB1IGJlIEdldE9wdGlv
bihvcHRpb25zLCAidXNhZ2UiLCAic3RyaW5nIiwgwqsic29ydCIsICJzZWFyY2giwrssICJzb3J0
IikuCi0gICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2gi
IH0sICJ1c2FnZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQi
KTsKKyAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2giIH0sICJ1c2Fn
ZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQiKTsKICAgICAv
LyA4LiBSZXR1cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIDkuIFNldCBjb2xsYXRvci5bW3VzYWdlXV0gdG8gdS4KICAgICBpZiAodXNhZ2VTdHJpbmcg
PT0gInNvcnQiKQpAQCAtMjEyLDkgKzIxNSw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoRXgKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CiAKICAgICAv
LyAxMy4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwg
InN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCi0gICAgU3Ry
aW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgp
LnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCAiYmVzdCBmaXQiKTsKKyAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIs
ICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBv
ciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyAxNC4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxNS4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjMzLDE2ICsyMzYsMTYgQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIHsKICAgICAgICAgU3RyaW5n
IG51bWVyaWNTdHJpbmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgICAgICBib29s
IG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2sp
OworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIXVzZXNGYWxsYmFjaykKICAgICAgICAgICAgIG51bWVyaWNT
dHJpbmcgPSBBU0NJSUxpdGVyYWwobnVtZXJpYyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAg
ICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgia24iKSwgbnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAg
IHsKLSAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCB7ICJ1cHBlciIsICJs
b3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJzdCBtdXN0IGJlIGVpdGhlciBcInVwcGVyXCIsIFwi
bG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24o
c3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAi
bG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBc
Imxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBvcHQuYWRk
KEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsKICAgICB9CkBAIC0yNzcsOSArMjgwLDkg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIG1fbnVtZXJp
YyA9IChyZXN1bHQuZ2V0KEFTQ0lJTGl0ZXJhbCgia24iKSkgPT0gInRydWUiKTsKIAogICAgIC8v
IDI0LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIs
IMKrImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KLSAg
ICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFj
Y2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBc
ImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7
CisgICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIHsgImJhc2UiLCAiYWNjZW50
IiwgImNhc2UiLCAidmFyaWFudCIgfSwgInNlbnNpdGl2aXR5IG11c3QgYmUgZWl0aGVyIFwiYmFz
ZVwiLCBcImFjY2VudFwiLCBcImNhc2VcIiwgb3IgXCJ2YXJpYW50XCIiLCBudWxscHRyKTsKICAg
ICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyAyNi4gSWYgcyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICAvLyBhLiBJZiB1IGlzICJz
b3J0IiwgdGhlbiBsZXQgcyBiZSAidmFyaWFudCIuCkBAIC0zMDAsMTEgKzMwMywxMSBAQCB2b2lk
IEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKICAgICAvLyAyOC4gTGV0IGlw
IGJlIEdldE9wdGlvbihvcHRpb25zLCAiaWdub3JlUHVuY3R1YXRpb24iLCAiYm9vbGVhbiIsIHVu
ZGVmaW5lZCwgZmFsc2UpLgogICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3Jl
UHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0o
KS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKKyAgICBi
b29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2spOwogICAg
IGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uID0gZmFsc2U7CiAg
ICAgLy8gMjkuIFJldHVybklmQWJydXB0KGlwKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIDMwLiBTZXQgY29sbGF0b3IuW1tpZ25vcmVQdW5jdHVhdGlvbl1dIHRvIGlwLgog
ICAgIG1faWdub3JlUHVuY3R1YXRpb24gPSBpZ25vcmVQdW5jdHVhdGlvbjsKQEAgLTMxOCwxMSAr
MzIxLDEzIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKIAogdm9p
ZCBJbnRsQ29sbGF0b3I6OmNyZWF0ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgQVNTRVJUKCFtX2NvbGxhdG9yKTsKIAogICAgIGlmICghbV9pbml0aWFsaXpl
ZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0ZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIH0KIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAtNDE2LDYg
KzQyMSw5IEBAIGNvbnN0IGNoYXIqIEludGxDb2xsYXRvcjo6c2Vuc2l0aXZpdHlTdHIKIAogSlNP
YmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJu
cyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFz
IGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRv
IGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAtNDI3LDEwICs0MzUsOSBA
QCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAKICAgICBpZiAoIW1f
aW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUs
IGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBt
X2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dXNhZ2UsIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIEFTQ0lJTGl0ZXJhbCh1c2FnZVN0cmlu
ZyhtX3VzYWdlKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmZpbmlzaENyZWEKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIC8vIDEwLjEuMiBJbnRsLkNvbGxhdG9yIChbbG9jYWxlcyBbLCBvcHRpb25zXV0p
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0
IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFy
Z2V0IGJlIE5ld1RhcmdldC4KICAgICAvLyAyLiBMZXQgY29sbGF0b3IgYmUgT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29sbGF0b3JQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChjb2xsYXRvcikuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2Fs
bGVlKCkpLT5jb2xsYXRvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSW50bENvbGxhdG9yKiBjb2xs
YXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAg
IEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQoY29sbGF0b3IpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxp
emVDb2xsYXRvcihjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzcsMTMgKzEzOSwx
NSBAQCBDYWxsVHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjIu
MiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAo
RUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBp
ZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxl
TG9jYWxlc11dLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBAQCB2
b2lkIEludGxDb2xsYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjMuNCBDb2xsYXRvciBDb21wYXJlIEZ1
bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBjb2xsYXRvciBiZSB0aGUgdGhp
cyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoY29sbGF0b3IpIGlzIE9iamVjdCBhbmQg
Y29sbGF0b3IgaGFzIGFuIFtbaW5pdGlhbGl6ZWRDb2xsYXRvcl1dIGludGVybmFsIHNsb3Qgd2hv
c2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTkxLDEzICs5MywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmcoeCkuCiAg
ICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpOwogICAg
IC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDcuIExldCBZIGJlIFRvU3Ry
aW5nKHkpLgogICAgIEpTU3RyaW5nKiB5ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0
YXRlKTsKICAgICAvLyA4LiBSZXR1cm5JZkFicnVwdChZKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA5LiBSZXR1
cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgpAQCAtMTI1LDcgKzEyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KIAogICAgICAgICAvLyBjLiBM
ZXQgYmMgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAg
IGJvdW5kQ29tcGFyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB0YXJnZXRPYmplY3QsIGNvbGxhdG9yLCBudWxscHRyLCAyLCBBU0NJSUxpdGVyYWwo
ImNvbXBhcmUiKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91bmRDb21w
YXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0sIGJvdW5k
Q29tcGFyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0CiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25zIGFic3RyYWN0IG9wZXJhdGlv
biAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxLiBJZiBvcHRpb25zIGlzIHVu
ZGVmaW5lZCwgdGhlbiBsZXQgb3B0aW9ucyBiZSBudWxsLCBlbHNlIGxldCBvcHRpb25zIGJlIFRv
T2JqZWN0KG9wdGlvbnMpLgogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgpAQCAt
MjI0LDcgKzIyNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQK
ICAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBleGVjLmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgSlNPYmplY3QqIG9yaWdpbmFsVG9PYmplY3QgPSBvcmlnaW5hbE9wdGlv
bnMudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMs
IG9yaWdpbmFsVG9PYmplY3QpOwogICAgIH0KQEAgLTI0MSwyNSArMjQyLDI1IEBAIHN0YXRpYyBK
U09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJy
dXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBs
ZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgd2Vla2RheSA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF3ZWVrZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSB5ZWFyID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXllYXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVl
ZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIG1vbnRoID0gb3B0aW9ucy0+Z2V0KCZl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFtb250aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVm
YXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5kYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZh
bHNlOwpAQCAtMjczLDE5ICsyNzQsMTkgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0
aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2
LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFs
c2UuCiAgICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5ob3VyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IWhvdXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAg
ICBKU1ZhbHVlIG1pbnV0ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bWludXRlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1p
bnV0ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAg
IEpTVmFsdWUgc2Vjb25kID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZWNvbmQpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghc2Vj
b25kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwpAQCAtMjk5
LDE1ICszMDAsMTUgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAog
ICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgQVND
SUlMaXRlcmFsKCJudW1lcmljIikpOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNDI4LDEzICs0MjksMTMg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDMuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoZXhlYywgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9j
YWxlcyksCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gTGV0IG9wdGlv
bnMgYmUgVG9EYXRlVGltZU9wdGlvbnMob3B0aW9ucywgImFueSIsICJkYXRlIikuCiAgICAgSlNP
YmplY3QqIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZXhlYywgb3JpZ2luYWxP
cHRpb25zKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyA3LiBMZXQgb3B0IGJlIGEgbmV3IFJlY29yZC4KQEAg
LTQ0Myw3ICs0NDQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
CiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAg
ICAgU3RyaW5nIGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIg
fSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0
XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRj
aGVyXV0gdG8gbWF0Y2hlci4KICAgICBsb2NhbGVPcHQuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIuc3RyaW5nKCksIGxvY2FsZU1hdGNoZXIpOwpAQCAtNDcyLDcgKzQ3Myw3IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAxNy4gTGV0
IHR6IGJlIEdldChvcHRpb25zLCAidGltZVpvbmUiKS4KICAgICBKU1ZhbHVlIHR6VmFsdWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICAvLyAx
OC4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIDE5LiBJZiB0eiBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC00ODEsNyArNDgyLDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgICAgICAvLyBhLiBM
ZXQgdHogYmUgVG9TdHJpbmcodHopLgogICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9IHR6VmFs
dWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh0eiku
Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBjLiBJ
ZiB0aGUgcmVzdWx0IG9mIElzVmFsaWRUaW1lWm9uZU5hbWUodHopIGlzIGZhbHNlLCB0aGVuIGku
IFRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIC8vIGQuIExldCB0eiBiZSBD
YW5vbmljYWxpemVUaW1lWm9uZU5hbWUodHopLgpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICBhdXRvIHNob3J0TG9uZyA9IHsg
InNob3J0IiwgImxvbmciIH07CiAKICAgICBTdHJpbmcgd2Vla2RheSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSwgbmFycm93U2hvcnRM
b25nLCAid2Vla2RheSBtdXN0IGJlIFwibmFycm93XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIi
LCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF3ZWVrZGF5
LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh3ZWVrZGF5ID09ICJuYXJyb3ciKQpAQCAtNTI2LDcg
KzUyNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9
CiAKICAgICBTdHJpbmcgZXJhID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lcmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFlcmEuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGVyYSA9PSAi
bmFycm93IikKQEAgLTUzOCw3ICs1MzksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHllYXIgPSBpbnRsU3RyaW5nT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywg
InllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXllYXIuaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKHllYXIgPT0gIjItZGlnaXQiKQpAQCAtNTQ4LDcgKzU0OSw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgbW9udGgg
PSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRo
LCB0d29EaWdpdE51bWVyaWNOYXJyb3dTaG9ydExvbmcsICJtb250aCBtdXN0IGJlIFwiMi1kaWdp
dFwiLCBcIm51bWVyaWNcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51
bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1vbnRoLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmIChtb250aCA9PSAiMi1kaWdpdCIpCkBAIC01NjQsNyArNTY1LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGRheSA9PSAiMi1kaWdpdCIpCkBAIC01
NzQsNyArNTc1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAog
ICAgIH0KIAogICAgIFN0cmluZyBob3VyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCB0d29EaWdpdE51bWVyaWMsICJob3VyIG11c3QgYmUg
XCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVkIGhvdXIxMiB0byBtYWtlIHRoZSBob3VyIHNrZWxl
dG9uIHBhdHRlcm4gZGVjaXNpb24sIHNvIGRvIHRoaXMgZWFybHkuCkBAIC01ODIsNyArNTgzLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIGJvb2wgaXNI
b3VyMTJVbmRlZmluZWQ7CiAgICAgYm9vbCBocjEyID0gaW50bEJvb2xlYW5PcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEyLCBpc0hvdXIxMlVuZGVmaW5lZCk7CiAg
ICAgLy8gMzMuIFJldHVybklmQWJydXB0KGhyMTIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghaG91ci5pc051bGwoKSkgewpAQCAtNjA1LDcgKzYwNiw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcg
bWludXRlID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5taW51dGUsIHR3b0RpZ2l0TnVtZXJpYywgIm1pbnV0ZSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9y
IFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbWludXRlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtaW51dGUgPT0gIjItZGlnaXQi
KQpAQCAtNjE1LDcgKzYxNiw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgc2Vjb25kID0gaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNl
Y29uZCBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc2Vjb25kLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChzZWNvbmQgPT0gIjItZGlnaXQiKQpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgdGlt
ZVpvbmVOYW1lID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT50aW1lWm9uZU5hbWUsIHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0IGJlIFwic2hv
cnRcIiBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIXRpbWVab25lTmFtZS5pc051bGwoKSkgewogICAgICAgICBpZiAodGltZVpvbmVO
YW1lID09ICJzaG9ydCIpCkBAIC02MzksNyArNjQwLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDI2LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24o
b3B0aW9ucywgImZvcm1hdE1hdGNoZXIiLCAic3RyaW5nIiwgwqsiYmFzaWMiLCAiYmVzdCBmaXQi
wrssICJiZXN0IGZpdCIpLgogICAgIGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+Zm9ybWF0TWF0Y2hlciwgeyAiYmFzaWMiLCAiYmVzdCBmaXQiIH0sICJm
b3JtYXRNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwiYmFzaWNcIiBvciBcImJlc3QgZml0XCIiLCAi
YmVzdCBmaXQiKTsKICAgICAvLyAyNy4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIHVzZSBJQ1UgZGF0ZSBmb3JtYXQg
Z2VuZXJhdG9yLCByYXRoZXIgdGhhbiBvdXIgb3duIHBhdHRlcm4gbGlzdCBhbmQgbWF0Y2hlci4K
QEAgLTgzNCwxNSArODM1LDE3IEBAIGNvbnN0IGNoYXIqIEludGxEYXRlVGltZUZvcm1hdDo6dGlt
ZVpvbmUKIAogSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4
ZWNTdGF0ZSYgZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTIuMy41IEludGwuRGF0ZVRp
bWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5k
IGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZiBjb25zdHJ1Y3RlZCBieSBhbiBvYmplY3QgbGl0ZXJh
bCBhc3NpZ25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgdGhlIHZhbHVl
IG9mIHRoZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1h
dCBvYmplY3QgKHNlZSAxMi40KTogbG9jYWxlLCBjYWxlbmRhciwgbnVtYmVyaW5nU3lzdGVtLCB0
aW1lWm9uZSwgaG91cjEyLCB3ZWVrZGF5LCBlcmEsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1p
bnV0ZSwgc2Vjb25kLCBhbmQgdGltZVpvbmVOYW1lLiBQcm9wZXJ0aWVzIHdob3NlIGNvcnJlc3Bv
bmRpbmcgaW50ZXJuYWwgc2xvdHMgYXJlIG5vdCBwcmVzZW50IGFyZSBub3QgYXNzaWduZWQuCiAg
ICAgLy8gTm90ZTogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBFQ01BU2NyaXB0IDIwMTUgSW50ZXJu
YXRpb25hbGl6YXRpb24gQVBJLCB0aGUgdGltZVpvbmUgcHJvcGVydHkgd2lsbCBiZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgaWYgbm8gdGltZVpvbmUgcHJvcGVydHkgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zIG9iamVjdCBwcm92aWRlZCB0byB0aGUgSW50bC5EYXRlVGlt
ZUZvcm1hdCBjb25zdHJ1Y3Rvci4gVGhlIHByZXZpb3VzIHZlcnNpb24gbGVmdCB0aGUgdGltZVpv
bmUgcHJvcGVydHkgdW5kZWZpbmVkIGluIHRoaXMgY2FzZS4KICAgICBpZiAoIW1faW5pdGlhbGl6
ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhl
YywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05vbnRyaXZpYWxTdHJpbmco
JmV4ZWMsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2NhbGVuZGFyKSk7
CkBAIC04ODksNyArODkyLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChF
eGVjUwogICAgIC8vIDEyLjMuNCBGb3JtYXREYXRlVGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVD
TUEtNDAyIDIuMCkKICAgICBpZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAg
ICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIC8vIDEuIElmIHggaXMg
bm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMS4yIEludGwuRGF0ZVRpbWVGb3JtYXQgKFtsb2NhbGVz
IFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMg
dW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBl
bHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIuIExldCBkYXRlVGltZUZv
cm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRhdGVUaW1lRm9y
bWF0KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9y
bWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVyZSk7
CisgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZv
cm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7
CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVUaW1lRm9y
bWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00
MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9y
bWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVk
TG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxT
dHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZTo6ZmluaXNoCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxE
YXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAvLyAxMi4zLjQgRGF0ZVRpbWUgRm9ybWF0IEZ1bmN0aW9ucyAoRUNNQS00
MDIgMi4wKQogICAgIC8vIDEuIExldCBkdGYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4g
QXNzZXJ0OiBUeXBlKGR0ZikgaXMgT2JqZWN0IGFuZCBkdGYgaGFzIGFuIFtbaW5pdGlhbGl6ZWRE
YXRlVGltZUZvcm1hdF1dIGludGVybmFsIHNsb3Qgd2hvc2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTEw
MSw3ICsxMDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAg
ICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9IGRh
dGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4KLSAg
ICAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xNDAsNyArMTQyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3Vu
ZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQg
PSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0
T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0
Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAy
MDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSW50bE51bWJlckZv
cm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVzdGVkTG9j
YWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAgIC8vIDQu
IFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgpAQCAtMTc3
LDcgKzE3Nyw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0
dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLC
uywgImJlc3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAi
LCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIg
b3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxNi4gTGV0IHMgYmUgR2V0
T3B0aW9uKG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAiZGVjaW1hbCIsICJwZXJjZW50
IiwgImN1cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmluZyBzdHlsZVN0cmluZyA9IGlu
dGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IiB9LCAic3R5bGUg
bXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBcImN1cnJlbmN5XCIi
LCAiZGVjaW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0
byBzLgogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE5LiBM
ZXQgYyBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMjQuIExl
dCBjZCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5RGlzcGxheSIsICJzdHJpbmciLCDC
qyJjb2RlIiwgInN5bWJvbCIsICJuYW1lIsK7LCAic3ltYm9sIikuCiAgICAgU3RyaW5nIGN1cnJl
bmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3lt
Ym9sIiwgIm5hbWUiIH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIs
IFwic3ltYm9sXCIsIG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIC8vIDI1LiBSZXR1cm5J
ZkFicnVwdChjZCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAyNi4gSWYg
cyBpcyAiY3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3VycmVuY3lEaXNwbGF5XV0gdG8g
Y2QuCiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4
LiBSZXR1cm5JZkFicnVwdChtbmlkKS4KICAgICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21p
bmltdW1JbnRlZ2VyRGlnaXRzXV0gdG8gbW5pZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmlt
dW1JbnRlZ2VyRGlnaXRzOwogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDMyLiBSZXR1cm5JZkFicnVwdChtbmZkKS4K
ICAgICAvLyAzMy4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1GcmFjdGlvbkRpZ2l0c11dIHRv
IG1uZmQuCiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVt
RnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMg
PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CiAKQEAgLTMwMCwyMCArMzAwLDIwIEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzNi4gUmV0dXJuSWZBYnJ1
cHQobXhmZCkuCiAgICAgLy8gMzcuIFNldCBudW1iZXJGb3JtYXQuW1ttYXhpbXVtRnJhY3Rpb25E
aWdpdHNdXSB0byBteGZkLgogICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGlu
dGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1h
eGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAK
ICAgICAvLyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMiKS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0
aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9w
dGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEu
IFJldHVybklmQWJydXB0KG14c2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyA0Mi4gSWYgbW5zZCBpcyBub3QgdW5kZWZpbmVkIG9yIG14c2QgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgbW5zZCBiZSBHZXROdW1iZXJPcHRpb24o
b3B0aW9ucywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIsIDEsIDIxLCAxKS4KICAgICAgICAg
dW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtbnNk
KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBj
LiBMZXQgbXhzZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyIsIG1uc2QsIDIxLCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhz
ZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8g
ZS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERpZ2l0c11dIHRvIG1uc2Qu
CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25pZmljYW50
RGlnaXRzOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlh
bGl6ZU51bWJlckYKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1c2VHcm91cGluZyA9
IHRydWU7CiAgICAgLy8gNDQuIFJldHVybklmQWJydXB0KGcpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1c2VHcm91cGluZ11dIHRv
IGcuCiAgICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwpAQCAtMzYyLDExICszNjIsMTQg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogCiB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmNyZWF0ZU51bWJlckZvcm1hdChFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgQVNTRVJUKCFtX251bWJlckZvcm1hdCk7CiAKICAgICBpZiAoIW1faW5p
dGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChz
dGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAg
LTQ4MCw2ICs0ODMsOSBAQCBjb25zdCBjaGFyKiBJbnRsTnVtYmVyRm9ybWF0OjpjdXJyZW5jeURp
CiAKIEpTT2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1h
dC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUg
ZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmli
dXRlcyBhcmUgc2V0IGFzIGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVy
YWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAt
NDkxLDEwICs0OTcsOSBAQCBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRp
CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlh
bGl6ZU51bWJlckZvcm1hdChzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9j
YWxlLCBqc1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bWJlcmluZ1N5c3RlbSIpLCBqc1N0
cmluZygmc3RhdGUsIG1fbnVtYmVyaW5nU3lzdGVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaXNoCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMS4yIElu
dGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAg
ICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUg
YWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4K
ICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVj
dG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVy
bklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rh
cmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxl
ZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0
KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0
cnVjdHVyZSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQp
OwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0
LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmdlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3Rh
dGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjAp
CiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2
YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEludGxOdW1iZXJGCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNiArODIsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5j
Rm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEx
LjMuNCBGb3JtYXQgTnVtYmVyIEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExl
dCBuZiBiZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUobmYpIGlzIE9i
amVjdCBhbmQgbmYgaGFzIGFuIFtbaW5pdGlhbGl6ZWROdW1iZXJGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlICB0cnVlLgpAQCAtOTEsNyArOTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFs
dWUpLgogICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3Rh
dGUpOwogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDYuIFJldHVy
biBGb3JtYXROdW1iZXIobmYsIHgpLgpAQCAtMTI4LDcgKzEzMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91
bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0
ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdl
dE9iamVjdCwgbmYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYt
PnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsOSBAQCB2b2lkIGNvbnZlcnRJQ1VMb2NhbGVUb0JDUDQ3TGFuZ3VhZ2VU
YWcoCiAKIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBv
cHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJvb2wmIHVzZXNGYWxsYmFjaykKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5
cGUsIHZhbHVlcywgZmFsbGJhY2spCiAgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLiB2YWx1ZXMg
aXMgYWx3YXlzIHVuZGVmaW5lZC4KIApAQCAtMTMwLDE0ICsxMzMsMTQgQEAgYm9vbCBpbnRsQm9v
bGVhbk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLAogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9u
cy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBi
ZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0
YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW4KQEAgLTE3MiwxNCArMTc1LDE0IEBAIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9P
YmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChv
cHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHBy
b3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTE5Miw3ICsxOTUsNyBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVj
U3RhdGUmIHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAvLyBk
LiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjIwLDE0ICsyMjMsMTQgQEAg
dW5zaWduZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgIEpTT2JqZWN0KiBv
cHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1
cHQob3B0cykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gMy4gTGV0
IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMt
PmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVl
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0yMzUsNyArMjM4LDcgQEAgdW5zaWduZWQgaW50bE51
bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyAxLiBJZiB2YWx1
ZSBpcyBOYU4gb3IgbGVzcyB0aGFuIG1pbmltdW0gb3IgZ3JlYXRlciB0aGFuIG1heGltdW0sIHRo
cm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIGlmICghKGRvdWJsZVZhbHVlID49
IG1pbmltdW0gJiYgZG91YmxlVmFsdWUgPD0gbWF4aW11bSkpIHsKQEAgLTU1NiwxNiArNTU5LDE2
IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9CiAKICAg
ICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAi
bGVuZ3RoIikpLgogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQ
cm9wZXJ0eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUg
YmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KQEAgLTU4MSw3ICs1ODQsNyBAQCBWZWN0b3I8U3RyaW5n
PiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2Nh
bGVzT2JqZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVy
bklmQWJydXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1
ZSwgdGhlbgpAQCAtNTkwLDcgKzU5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+
Z2V0KCZzdGF0ZSwgayk7CiAKICAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFs
dWUpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkg
aXMgbm90IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KQEAg
LTYwMyw3ICs2MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4
CiAgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAK
ICAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKHRhZykg
aXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkBAIC05MzMsNiArOTM2LDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogewogICAgIC8vIDku
Mi44IFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICAvLyAxLiBJ
ZiBvcHRpb25zIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTk0MCw3ICs5NDQsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBt
YXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDC
qyAibG9va3VwIiwgImJlc3QgZml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIg
PSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2Nh
bGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3Qg
YmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgpAQCAtOTYwLDcgKzk2NCw3IEBA
IEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9y
dGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlG
cm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KQEAgLTk2OSw3ICs5NzMsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vi
c2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZz
dGF0ZSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+
Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExv
Y2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tp
XSwgZGVzYywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFi
cnVwdCBjb21wbGV0aW9uLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTUgKzQwLDE3IEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0
aFdvcmthcm8KICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxp
dHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBpZiAoIWpzRHluYW1pY0Nhc3Q8SW50bEluc3RhbmNlKj4odGhpc1ZhbHVlKSkgewogICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUpOwogICAgICAgICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIEludGxJbnN0YW5jZSogaW5zdGFuY2UgPSBmYWN0b3J5KHZtKTsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3Rh
bmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQ2FsbERh
dGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUgaXRlcmF0
b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAg
ICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5l
eHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXJlc3Vs
dC5pc09iamVjdCgpKQpAQCAtODAsMTEgKzgwLDE0IEBAIGJvb2wgaXRlcmF0b3JDb21wbGV0ZShF
eGVjU3RhdGUqIGV4ZWMsIEoKIAogSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGl0ZXJhdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmIChkb25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKQEAgLTk3LDEyICsx
MDAsMTMgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0
b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkgewpAQCAtMTI5LDcgKzEzMyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKQEAgLTE2Nyw3ICsx
NzEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgaXRl
cmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5pdGVyYXRvclN5bWJvbCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIAogICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTE3OSw3
ICsxODMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAKICAg
ICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
ciA9IGNhbGwoc3RhdGUsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlw
ZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFy
Z3VtZW50cyk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAg
aWYgKCFpdGVyYXRvci5pc09iamVjdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1Mzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQ3LDIwICs0OCwyMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbEJh
Y2tUeXBlPgogdm9pZCBmb3JFYWNoSW5JdGVyYWJsZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IGl0ZXJhYmxlLCBjb25zdCBDYWxsQmFja1R5cGUmIGNhbGxiYWNrKQogewogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGl0ZXJhdG9yRm9ySXRlcmFibGUoc3RhdGUsIGl0
ZXJhYmxlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChzdGF0ZSwgaXRlcmF0b3IpOwotICAgICAg
ICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgdm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChuZXh0
LmlzRmFsc2UoKSB8fCBVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKHN0YXRl
LCBuZXh0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNh
bGxiYWNrKHZtLCBzdGF0ZSwgbmV4dFZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDcgQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlM
ZW5ndGgoKSAtIDE7CiAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCiAgICAgaWYgKCFk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CkBAIC02NDMsNyArNjQz
LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAK
ICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0
aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUp
OwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFy
cmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAg
ICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAg
ICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
Njk1LDcgKzY5NSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgYm9v
bCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSwgcHV0UmVzdWx0KSkgewot
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBvbGRMZW5ndGggPCAweEZG
RkZGRkZGdSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3Ro
IDwgMHhGRkZGRkZGRnUpCiAgICAgICAgICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIG9sZExlbmd0
aCArIDEsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MzEsNyAr
NzMxLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAg
ICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAg
IG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgo
KSwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAg
NiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTExOTAsNiArMTE5MCw5IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpID0g
b2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwogICAgIHVuc2lnbmVk
IHZlY3RvckVuZDsKQEAgLTEyNTUsNyArMTI1OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGV4ZWMs
IGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMg
aW4gZmFjdCBjb3JyZWN0IHRvIHNheQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIFN0cnVjdHVyZSog
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1Mzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CiAgICAgCiAgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwyNCArNzAsMjYgQEAgaW5saW5lIGJvb2wgSlNBcnJheTo6Y2Fu
RmFzdENvcHkoVk0mIHZtLAogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNB
cnJheShvYmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgo
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iai0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvVUlu
dDMyKGV4ZWMpOwogfQogCiBBTFdBWVNfSU5MSU5FIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNBcnJheShv
YmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iai0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gUE5hTjsKICAgICByZXR1cm4gbGVuZ3RoVmFsdWUudG9MZW5ndGgoZXhlYyk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw4ICsxMjYs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlCiAKIGlubGluZSBT
dHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlv
bikKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IHRhcmdldEpTRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRGdW5j
dGlvbik7CiAKQEAgLTE1OCw2ICsxNTksNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0CiAKIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTQXJyYXkqIGJvdW5k
QXJncywgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3RE
YXRhKHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBib29sIGNhbkNvbnN0cnVj
dCA9IGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZTsKQEAgLTE3MCw3ICsxNzIs
NyBAQCBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAgICAgIGNh
bkNvbnN0cnVjdCA/IChzbG93Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwKICAgICAgICAgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0dXJlKHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQm91bmRGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSogCiAgICAgICAgIH0KIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4
ZWMKICAgICAKICAgICBKU09iamVjdCogcHJvdG90eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwpAQCAtMzc4LDExICszNzgsMTEgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nh
c2UoRXhlYwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gYXND
ZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U1N0cmluZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIGlubGluZSBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHRvUHJlZmVycmUKICAgICB9CiAKICAgICBTdHJpbmdJbXBsKiBoaW50
U3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiAKICAgICBpZiAoV1RGOjpl
cXVhbChoaW50U3RyaW5nLCAiZGVmYXVsdCIpKQpAQCAtNzg0LDggKzc4NCw5IEBAIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxi
YWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9v
ZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNW
YWx1ZTo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxs
YmFjaykgY29uc3QKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBib29sIGZvdW5kID0gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC04OTcsNiArODk4LDcgQEAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6ZXF1YWwoRXhlY1N0YXRlKiBleAogQUxXQVlTX0lOTElORSBi
b29sIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiB2MS5hc051
bWJlcigpID09IHYyLmFzTnVtYmVyKCk7CkBAIC05MjQsNyArOTI2LDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogICAgICAgICAgICAgaWYgKHYyLmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogICAgICAgICAgICAgSlNWYWx1
ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MSA9IHAxOwogICAg
ICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkBAIC05MzQsNyArOTM2
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogCiAgICAgICAg
IGlmICh2Mi5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9Qcmlt
aXRpdmUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHYyID0gcDI7CiAgICAgICAgICAgICBpZiAodjEu
aXNJbnQzMigpICYmIHYyLmlzSW50MzIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDE0ICsxMzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0
aGUgYnl0ZU9mZnNldCkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wg
bGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQg
YW5kIHZhbHVlKSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25l
ZCBkYXRhU2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKQEAgLTE5MSwxNCAr
MTkxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0g
dTsKIAogICAgIHUudmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRpYW4g
PSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw2ICs1OTAsOSBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKFZNJiB2bSwgCiAKIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1l
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8v
IFRoZSAibmFtZSIgcHJvcGVydHkgbWF5IGhhdmUgYmVlbiBhbHJlYWR5IGJlZW4gZGVmaW5lZCBh
cyBwYXJ0IG9mIGEgcHJvcGVydHkgbGlzdCBpbiBhbgogICAgIC8vIG9iamVjdCBsaXRlcmFsIChh
bmQgdGhlcmVmb3JlIHJlaWZpZWQpLgogICAgIGlmIChoYXNSZWlmaWVkTmFtZSgpKQpAQCAtNjA1
LDEyICs2MDgsMTEgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygm
dWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4
ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5
TmFtZShleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjA1Mzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1Zh
bHVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTQgKzg5LDE0IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9y
YWdlOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9y
U3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMs
IG5leHQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBzdG9yYWdlLmFwcGVuZChuZXh0SXRlbSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBA
QCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIHN0b3JhZ2Uuc2l6ZSgpKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0
SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChpKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIs
NyArMTYyLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAg
ICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgICAgICAvLyBXZSB3b3VsZCBsaWtlIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFz
IGl0IGlzIHBhaW5mdWxseSBzbG93LiBGb3J0dW5hdGVseSwgdW5sZXNzCkBAIC0xODMsMjEgKzE4
MywyMSBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmd1bWVudHM7CiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdG
cm9tSXRlcmF0b3I8Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAw
IDogbGVuZ3RoU2xvdC5nZXRWYWx1ZShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIAogICAgICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjM1LDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRTdHJ1Y3R1cmUgPSBmdW5jdGlv
bi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIHBh
cmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKQEAgLTI1MiwxMiArMjUyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9wdDsKICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYgYXJnQ291
bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIp
IHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvVUlu
dDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY29u
c3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBpbmxpbmUgSlNBcnJh
eUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVz
ID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3lt
Ym9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3Bl
Y2llcy5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVj
dG9yKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBh
cmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihyZXN1bHQpKSB7CkBAIC0xNDcsNyArMTQ3
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuNQpAQCAtMTU3LDEzICsxNTYsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBs
ZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIGxvbmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGV4ZWMsIDIsIGxlbmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQpAQCAtMTgz
LDcgKzE4Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpz
Q2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CkBAIC0xOTgsNyArMTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEpTVmFsdWUgdmFs
dWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTIwOSw3ICsyMDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBB
U1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlm
IChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0y
MzAsNyArMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMTMKQEAgLTI0NSw3ICsy
NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBK
U1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTI1NSw3ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xh
c3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7
CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAt
MjY5LDcgKzI2Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
IHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganND
YXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTI4MiwxMSArMjc4LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKCpleGVjLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAg
am9pbmVyLmFwcGVuZCgqZXhlYywgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CkBAIC0yOTksNyArMjk1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5n
KiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0zMTAsNyArMzA2LDYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8v
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjE2CkBAIC0zMzgsNyArMzMzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICAgICAgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQogCi0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0
LT5pc05ldXRlcmVkKCkpCkBAIC0zNDksNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CiAKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9
IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRl
eCkgewpAQCAtNDMyLDcgKzQyNyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4yNgpAQCAt
NDQ1LDEwICs0MzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAg
IHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAt
NDY3LDcgKzQ2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50
eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAg
ICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkp
OwpAQCAtNTE4LDcgKzUxMiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMu
MjMKQEAgLTUzNyw5ICs1MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVtYmVyKCkpOwogICAgIEFT
U0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDEp
LmlzTnVtYmVyKCkpOwogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB1bnNpZ25lZCBl
bmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5n
dGgsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSk7CiAKQEAgLTU3Miw3ICs1NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3Ms
ICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxNSwxMiArODE1LDE0IEBAIGlubGluZSBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVt
cHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0g
MCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+PSBNSU5f
QVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKQogICAgICAgICBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAg
ICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCkpOwpAQCAtODMzLDggKzgzNSwxMCBAQCBp
bmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzKSk7CiB9CkBAIC04NDYsOCArODUwLDEwIEBA
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQog
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJv
ZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9y
KHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgp
KTsKIH0KQEAgLTg1OSw4ICs4NjUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4
ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVk
IGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2
ICs2NCw5IEBAIFJlZjxNaWNyb3Rhc2s+IGNyZWF0ZUpTSm9iKFZNJiB2bSwgSlNWYWwKIAogdm9p
ZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0YTsKICAgICBDYWxsVHlwZSBoYW5kbGVyQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxEYXRhKTsKICAgICBBU1NF
UlQoaGFuZGxlckNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKQEAgLTcyLDcgKzc1LDcgQEAg
dm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYwogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwLCBsZW5ndGggPSBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7IGluZGV4IDwgbGVu
Z3RoOyArK2luZGV4KQogICAgICAgICBoYW5kbGVyQXJndW1lbnRzLmFwcGVuZChtX2FyZ3VtZW50
cy0+SlNBcnJheTo6Z2V0KGV4ZWMsIGluZGV4KSk7CiAgICAgcHJvZmlsZWRDYWxsKGV4ZWMsIFBy
b2ZpbGluZ1JlYXNvbjo6TWljcm90YXNrLCBtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxUeXBlLCBo
YW5kbGVyQ2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGhhbmRsZXJBcmd1bWVudHMpOwotICAgIGV4
ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMDUzODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcgKzc4LDE5IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKIAogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
TW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVu
dCo+KGNlbGwpOwogICAgIEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0
aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIGlmIChyZXNvbHV0aW9u
LnR5cGUgPT0gSlNNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAg
ICAgICAgIC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhl
IGltcG9ydGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAg
ICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNv
bHV0aW9uLm1vZHVsZVJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKICAgICAgICAgUHJvcGVy
dHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9j
YWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAgICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9k
dWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9y
dGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVj
dFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAg
QVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVlKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
cmVkaXJlY3RTbG90LmdldFZhbHVlKGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lKTsKLSAgICAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgcmVkaXJlY3RTbG90LmF0dHJpYnV0ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwx
MyArMTQ5LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2gKICAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMs
IGtleSksICJcbiIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGlmIChnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQog
ICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5t
b2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgaW5pdGlhdG9y
KTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBt
b2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OkpTTW9kdWxlTmFtZXNwYQogdm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3Jk
LCBjb25zdCBJZGVudGlmaWVyU2V0JiBleHBvcnRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKQEAg
LTgxLDcgKzgyLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl
Yy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUt
bmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZlbnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFi
bGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogfQogCiB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKQEAgLTEzNiw3ICsxMzcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpnZXRPd25Qcm9wCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKIAogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdHJhbXBvbGluZVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBmaWxsZWQgd2l0aCBURFogdmFsdWUsIHRocm93IGEgcmVmZXJlbmNlIGVycm9yLgogICAgICAg
ICBpZiAoIXZhbHVlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
OSw3ICs3NzksNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAg
ICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhvc3RSZXNvbHZlSW1wb3J0
ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7CiAgICAgICAgIGlmIChp
bXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpIHsKICAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3QgPSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIGltcG9ydEVudHJ5LmxvY2FsTmFtZSwgbmFtZXNwYWNlT2JqZWN0LCAvKiBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUs
IHB1dFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNiArMjIwLDE4IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAsIG1fcmVwbGFj
ZXJDYWxsVHlwZShDYWxsVHlwZTo6Tm9uZSkKICAgICAsIG1fZ2FwKGdhcChleGVjLCBzcGFjZS5n
ZXQoKSkpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCFtX3JlcGxhY2VyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3JlcGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRz
KEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVl
OwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+IGFycmF5ID0gbV9yZXBsYWNlci5hc09iamVjdCgp
OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgbmFtZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBpZiAobmFtZS5pc09iamVjdCgpKSB7CkBAIC0yNDgsMzYgKzI1MCwzOSBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAKIExvY2FsPFVua25vd24+IFN0cmlu
Z2lmaWVyOjpzdHJpbmdpZnkoSGFuZGxlPFVua25vd24+IHZhbHVlKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0g
ICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtu
b3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsK
IAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdChtX2V4ZWMtPnZtKCksIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIsIHZhbHVlLmdldCgpKTsKKyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwg
ZW1wdHlQcm9wZXJ0eU5hbWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
LCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBw
ZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJv
cGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBMb2NhbDxV
bmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgp
LCBqc051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmlu
ZWQoKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U09OKEpTVmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJv
cGVydHlOYW1lKQogewotICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXQpOwogICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3QpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAg
ICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvSlNPTik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBy
ZXR1cm4gdG9KU09OSW1wbCh2YWx1ZSwgdG9KU09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9
CkBAIC0zMDEsNyArMzA2LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogCiAgICAgLy8gQ2FsbCB0aGUgdG9KU09OIGZ1bmN0aW9uLgogICAgIHZhbHVlID0gdG9K
U09OKHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5
RmFpbGVkOwogCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uCkBAIC0zMTAsNyAr
MzE1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAg
ICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFsdWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5n
ZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBtX3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJn
cyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAg
ICAgfQogCkBAIC0zMjQsNyArMzI5LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBT
dHJpbmdpZmllcgogCiAgICAgdmFsdWUgPSB1bndyYXBCb3hlZFByaW1pdGl2ZShtX2V4ZWMsIHZh
bHVlKTsKIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKSB7CkBAIC0zNzcsMTQgKzM4MiwxNCBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1w
dHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHkoKTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChI
b2xkZXIodm0sIG1fZXhlYywgb2JqZWN0KSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKIAogICAgIGRvIHsKICAgICAgICAgd2hpbGUg
KG1faG9sZGVyU3RhY2subGFzdCgpLmFwcGVuZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikp
IHsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lm
eUZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBtX2hvbGRlclN0YWNrLnJlbW92ZUxhc3QoKTsK
QEAgLTQzNiw2ICs0NDEsOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zaXplKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZpcnN0IHRpbWUg
dGhyb3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKQEAgLTQ0NCw3ICs0NTEs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAg
ICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29i
amVjdC5nZXQoKSktPmxlbmd0aCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0
LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00NTIsNyArNDU5
LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAg
ICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5n
ZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9i
amVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Niw3
ICs0OTMsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIApAQCAtNTA0LDcgKzUxMSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVp
bGRlci5sZW5ndGgoKTsKQEAgLTY0MCw3ICs2NDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xv
dC5nZXRWYWx1ZShtX2V4ZWMsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC02NTgsNyArNjY1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxr
KEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpLCBmaWx0ZXJlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAg
ICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTY3NSw3ICs2ODIsNyBAQCBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpAQCAtNjk4LDcgKzcwNSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBi
ZSBtb2RpZmllZCBieSB0aGUgcmV2aXZlciBmdW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJv
dwotICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTcxNyw3ICs3MjQsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBtX2V4ZWMsIHByb3ApOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0
LCBtX2V4ZWMsIHByb3AsIGZpbHRlcmVkVmFsdWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdv
dG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTc1NCw3ICs3NjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUg
cGFyYW1ldGVyIikpKTsKICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIC8vIDMuIEVTNiBQcm94eS4K
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBvd25EZXNjcmlwdG9yOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDcs
MTMgKzQ0OCwxMyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBvd25EZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5
XV0oUCkuCiAgICAgICAgIGJvb2wgb3duRGVzY3JpcHRvckZvdW5kID0gY3VycmVudC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgb3duRGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQpIHsKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1h
IExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJvdG90eXBlT2ZdXSgpLgogICAgICAgICAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4K
QEAgLTQ4NSw3ICs0ODYsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJlY2VpdmVy
KTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsKICAgICAg
ICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3Ip
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZp
bmVkLCB0aGVuCkBAIC0xMzYxLDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5
cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVu
c2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CkBAIC0xNjIxLDcgKzE2MjIsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29w
ZS5leGNlcHRpb24oKTsKICAgICBpZiAoZnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09
IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAt
MTY0OSw3ICsxNjUwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Qcmlt
aQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAg
QVNTRVJUKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBtb2RlID09IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgp
IDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLnRvUHJp
bWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIpKTsKQEAgLTE2ODcsNyArMTY4OCw3IEBAIEpTVmFs
dWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoRXgKICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJObyBkZWZhdWx0IHZhbHVlIikpOwogfQpAQCAtMTc4
Nyw3ICsxNzg4LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFvYmplY3RWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTgwOSwxMiArMTgxMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByaXZhCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBK
U1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODI2LDEwICsxODI4LDEwIEBAIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBy
b3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTkyNywxNiArMTkyOSwyMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtCiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9Qcmlt
aXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5jcHAKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJl
cihleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1p
dGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwog
fQpAQCAtMzExMywxNSArMzExOSwxOCBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURl
c2NyaXB0b3IoCiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZt
ICA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRl
ZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBk
ZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAog
ICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBk
ZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxl
dGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZs
YWcgdG8gbWFrZSB0aGlzIHdvcmsuCi0gICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKGV4ZWMtPnZtKCksIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJs
ZSk7CisgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwogICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgIGJvb2wgaXNFeHRlbnNp
YmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRl
c2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0K
QEAgLTMyMjEsMTIgKzMyMzAsMTMgQEAgdm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVy
dHlOYW1lcwogdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVk
ZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzIzOCwxMCArMzI0OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90
b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVh
azsKQEAgLTMyNTcsNyArMzI2Nyw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFtZXRob2QuaXNDZWxsKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE2IEBAIHZvaWQgY3Jl
YXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1
ZT4gcmVzdWx0OwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4
ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNE
b3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3Vi
bGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3Ro
QXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhl
YywgaW5kZXgpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKQEAg
LTk1LDggKzk1LDEwIEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EK
IHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQ
cm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2Fs
bGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ym9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC0x
MDQsNiArMTA2LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYQog
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0
UHJvdG90eXBlOwpAQCAtMTExLDE0ICsxMTQsMTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1
cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFw
cm90b3R5cGUuaXNPYmplY3QoKSkKQEAgLTEzMyw2ICsxMzYsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAg
IE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBl
ID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTE0NCw3ICsxNDgsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMTUyLDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9u
SW5kZXgKICAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVj
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5w
cm9taXNlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpj
cmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBA
QCBwcml2YXRlOgogaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1l
RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDMyX3QgaW5kZXhlZExlbmd0aCA9IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKTsKIApAQCAtMTE5LDE4ICsxMjAsMTggQEAg
aW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydAogCiAgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCiAg
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFz
ZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2
ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNv
IGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxp
bmRleGVkTGVuZ3RofCB0byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwx
MCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
cHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVu
dW1lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTYgKzIwMCwxOCBAQCBKU09iamVj
dCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlCiAvLyBXaGVuIGFuIGV4Y2VwdGlvbiBv
Y2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UuCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2
bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF1bnNjb3BhYmxlcy5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSBibG9ja2VkID0ganND
YXN0PEpTT2JqZWN0Kj4odW5zY29wYWJsZXMpLT5nZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBibG9ja2VkLnRvQm9v
bGVhbihleGVjKTsKQEAgLTIxNyw2ICsyMTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNj
b3BhYmxlKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZN
JiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwog
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOwogICAgIHdoaWxlICgx
KSB7CkBAIC0yMzksNyArMjQzLDcgQEAgSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0
YXRlKiBleAogICAgICAgICBpZiAob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsK
ICAgICAgICAgICAgIGlmICghaXNVbnNjb3BhYmxlKGV4ZWMsIHNjb3BlLCBvYmplY3QsIGlkZW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghZXhlYy0+aGFkRXhjZXB0aW9uKCksICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1
cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UiKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5z
Y29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDUzODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDkgKzc0LDExIEBAIHZvaWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25z
dCBKU0NlbGwKIAogYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBvdGhlcikgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgc3RyMSA9
IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzdHIyID0gb3RoZXItPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0
cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihF
eGVjU3RhdGUmIAogICAgIEFTU0VSVChtX3N0cmluZ3Muc2l6ZSgpIDw9IG1fc3RyaW5ncy5jYXBh
Y2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFsZW5n
dGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2ICs1NzIsOCBAQCBU
b2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJz
ZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBz
dGF0ZSA9IGluaXRpYWxTdGF0ZTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFj
azsKICAgICBKU1ZhbHVlIGxhc3RWYWx1ZTsKQEAgLTU4Myw3ICs1ODUsNyBAQCBKU1ZhbHVlIExp
dGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICBzdGFydFBhcnNlQXJy
YXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0UGFyc2VBcnJheTogewogICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDApOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVu
ZChhcnJheSk7CiAgICAgICAgICAgICB9CkBAIC02ODEsNyArNjgzLDcgQEAgSlNWYWx1ZSBMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09IG1f
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlICE9IFN0cmljdEpTT04gJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFVu
ZGVyc2NvcmVQcm90by5hZGQob2JqZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhcnNlRXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8g
cmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwpAQCAtNjkzLDcgKzY5NSw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRlbnQpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQsIGxhc3RWYWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+dHlwZSA9PSBUb2tDb21tYSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3Ry
dWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTcxLDcgKzcx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24g
PSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBm
b3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIG5leHRJdGVtKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYgKCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIsOCArMTYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q2x6MzIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBkb3VibGUgbWF4ID0gMDsKICAgICBWZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFy
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
ICAgICAgICBpZiAoc3RkOjppc2luZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSkpOwpAQCAtMjkyLDggKzI5NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3Qg
bGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRl
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVs
ZUtleS5pbXBsKCkpOwpAQCAtMTQyLDEyICsxNDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVs
ZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBt
b2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5r
XSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
dmlzaXRDaGlsZHIKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNT
RVJUKGVycm9yU3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDkgKzg1LDExIEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFYKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVy
T2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9i
amVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9i
amVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbmV3VGFyZ2V0IGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQg
b2YgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAv
LyBTaW5jZSBpZiB3ZSBmb3VuZCB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3Qg
ZmFsbCBpbnRvIHRoZSB0eXBlIGNvbnZlcnNpb24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsx
MzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYg
KG5ld1RhcmdldCAmJiBuZXdUYXJnZXQgIT0gb2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAg
Ly8gYS4gUmV0dXJuID8gT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAi
JU9iamVjdFByb3RvdHlwZSUiKS4KICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJn
ZXQsIGdsb2JhbE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAg
ICB9CkBAIC0yMTEsOCArMjEzLDEwIEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90
b3R5cGVPZigKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4
ZWMsIG9iamVjdCkpOwogfQpAQCAtMjMxLDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dFZhbHVlKTsKIAogICAgIGlmICghY2hlY2tQcm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywg
b2JqZWN0KSkgewpAQCAtMjQxLDE2ICsyNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7
CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhl
YywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQo
ZGlkU2V0UHJvdG90eXBlLCB2bS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAg
IEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRT
ZXRQcm90b3R5cGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwog
fQogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3Jp
cHRvcik7CkBAIC0yNjEsMTkgKzI2NywyMSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlECiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmpl
Y3QqIGRlc2NyaXB0b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBp
ZiAoIWRpZEdldERlc2NyaXB0b3IpCkBAIC0yODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGRlc2NyaXB0b3JzKTsKICAgICAgICAgZGVzY3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1h
eUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMs
MTkgKzMwMSwyMyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JzKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAtMzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlv
biBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JH
ZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwog
fQpAQCAtMzIyLDggKzMzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBl
eGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0Nywy
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTog
VXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0
eUtleXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpA
QCAtMzYwLDQwICszODAsNDAgQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZQogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2Ny
aXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51
bWVyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVl
OwogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAg
IH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlw
dGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
ZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQp
KSB7CiAgICAgICAgIEpTVmFsdWUgZ2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoIWdldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTQwMywxMiArNDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBk
ZXNjLnNldEdldHRlcihnZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wg
dG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQpAQCAtNDQ1LDcgKzQ2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikp
OwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0
b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7
CkBAIC00NTMsNyArNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29y
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVm
aW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0
KiBwcm9wZXJ0aWVzKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGll
cyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0
aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNj
cmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
cHJvcCA9IHByb3BlcnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkKQEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNW
YWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsKICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pc1ByaXZhdGVOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3JzW2ldLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9i
amVjdDsKQEAgLTUzMSw2ICs1NTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmpl
Y3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0
LT5zZWFsKHZtKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0K
IAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBy
b3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1
cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwog
ICAgICAgICAvLyBjLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJl
dmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTU3NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9y
RnJlZXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhl
Yy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdDsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFt
ZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwx
NCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8v
IGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIHRvIGZhbHNlLgogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAg
ICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMo
b2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2
NDYsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmop
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBh
c09iamVjdChvYmopKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTYzOSw2ICs2NzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1Nl
YWxlZChleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CkBAIC02NzAsMTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAg
Ly8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBv
YmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAg
ICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVj
dCgpKQpAQCAtNjg0LDEyICs3MjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAg
aWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAK
ICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSAr
NzQ2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAv
LyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxz
ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4K
ICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iaik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5z
aWJsZSkpOwogfQpAQCAtNzM1LDEzICs3NzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVN
b2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRp
ZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFt
ZU1vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDgg
KzEwMSw5IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSAr
MTE1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09
IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB9CiB9CkBAIC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1Zh
bHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
CkBAIC0xNjAsNyArMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKQEAgLTE2OSw3ICsxNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhp
c1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsy
NTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJh
YmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpOwpAQCAtMjU0LDkgKzI2OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3Ry
aW5nKCkKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0
IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFs
dWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAv
LyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBA
IC0yOTIsNyArMzA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYg
dG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVj
LCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJp
bmdUYWcuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwpAQCAtMzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0
YWcgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRo
aXNPYmplY3QsIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2Jq
ZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ0LDExICs0NCwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dD
YXNlKENhbGxGCiB7CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4g
ZGVmYXVsdFZhbHVlKCkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1By
aW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldFVuZGVmaW5lZCgpCiBH
ZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3JpcHRvcjo6c2xvd0dldHRlclNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2dldHRlciAmJiAhbV9n
ZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIodm0s
IGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMjMgKzU2LDIzIEBAIFByb3h5Q29u
c3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJveHkucmV2b2NhYmxl
IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSB0YXJnZXQgYW5kIHRo
ZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBcmdMaXN0IGFy
Z3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUg
aGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmpl
Y3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFu
ZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tl
LCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIFBy
b3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0sIFN0cnVjdHUKIFN0cmluZyBQcm94eU9iamVj
dDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBj
b25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgICAgICBpZiAoaXNB
cnJheShleGVjLCB0YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuIHRhcmdldC0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4ZWMpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQs
IEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFuZGxlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTU1LDcg
KzE1Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0
SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwpAQCAtMTY5LDcgKzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZv
cm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiB0cmFwUmVzdWx0OwpAQCAt
MTc3LDggKzE3OCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRl
CiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhpcywgc2xvdC50aGlz
VmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0gMDsKICAgICBzbG90LnNldFZhbHVl
KHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwpAQCAtMjEyLDcgKzIxNSw3IEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5
RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2Fs
bFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFT
Q0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgp
OwpAQCAtMjIxLDcgKzIyNCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxs
KGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09i
amVjdCgpKSB7CkBAIC0yMzEsNyArMjM0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlu
dGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVz
Y3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRh
cmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewpAQCAtMjQ0LDcgKzI0Nyw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklY
TUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRv
bid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQ
cm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENvbWUg
dXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVjYXVz
ZQpAQCAtMjU4LDExICsyNjEsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcjsKICAgICB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBm
YWxzZTsKICAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwKQEAgLTI4MSw3ICsy
ODQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBp
ZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5z
bG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCB0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgZ2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYg
KHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpICYmICF0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMzIwLDcgKzMyMyw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGhhc01ldGhvZCA9IGhhbmRs
ZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMt
PmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3Jt
RGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0zMjksMTcgKzMzMiwxNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNW
YWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaXNQ
cm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Nyw3ICszNTAsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlBy
b3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0
JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSIpKTsKQEAgLTQyMCw3ICs0MjMs
NyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlm
IChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTQzMiwxMCArNDM1LDEwIEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1
dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzMsOCArNDc2LDkgQEAgYm9vbCBQcm94eU9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlYwogYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRl
eENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1
dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDgsNyArNTEyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJn
ZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTE5LDcgKzUy
Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAK
ICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0
PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKQEAgLTU1OCw3ICs1NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBB
U0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94
eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBA
IC01NjksMTQgKzU3MywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
ZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVj
LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3Qo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3Vs
dCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9i
amVjdCIpKTsKQEAgLTYxOSw3ICs2MjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVs
ZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZGVsZXRlUHJv
cGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAg
ICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTYyOSwxMSArNjMz
LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9T
YWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFz
Qm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCkBAIC02NDcsNyArNjUx
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNjkzLDcgKzY5Nyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJwcmV2ZW50
RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwoIidwcmV2ZW50RXh0ZW5zaW9ucycgcHJvcGVydHkg
b2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdl
dCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAt
NzAyLDE2ICs3MDYsMTYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNp
bwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBwcmV2ZW50
RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1
bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
dGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJl
dHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91
bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKQEAgLTc0Niw3ICs3NTAsNyBAQCBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2libGVNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVuc2libGUnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMt
PnRhcmdldCgpOwpAQCAtNzU2LDE1ICs3NjAsMTUgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2Fs
bChleGVjLCBpc0V4dGVuc2libGVNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNUYXJnZXRFeHRlbnNpYmxl
ID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sICE9IGlzVGFyZ2V0RXh0ZW5zaWJs
ZSkgewpAQCAtODEzLDE0ICs4MTcsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmlu
ZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2Qo
ZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZpbmVQcm9wZXJ0
eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blByb3BlcnR5KCk7CiAKICAgICBKU09iamVj
dCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTgyOCwxMSArODMyLDExIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3Jp
cHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQ
cm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wg
PSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtODQwLDExICs4NDQsMTEgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZp
bmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRv
RmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5j
b25maWd1cmFibGUoKTsKIApAQCAtOTAyLDcgKzkwNiw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMi
KSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTkxMyw3ICs5MTcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0T3duUHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9
IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQcm9wZXJ0eU5hbWVNb2Rl
IHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKQEAgLTk0MSw3ICs5NDUsNyBA
QCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgICAgICAgICBy
ZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUu
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRv
RXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwo
KSk7CkBAIC05NTAsMjEgKzk1NCwyMSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFy
cmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVy
YWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5
LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFBy
b3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogCiAgICAgUHJvcGVydHlOYW1lQXJy
YXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxVbmlx
dWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0
IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdl
dC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRv
cik7IAotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChpc1By
b3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKICAgICAgICAgICAg
IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7CkBAIC0xMDUz
LDcgKzEwNTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBlT2YiKSwgQVNDSUlM
aXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtMTA2NCwxMSArMTA2OCwxMSBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90eXBlKTsKICAgICBK
U1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF0
cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDc4LDEzICsxMDgyLDEzIEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0
ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2FtZVZh
bHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdzZXRQcm90b3R5cGVP
ZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4gaXRzIHRhcmdldCBpcyBub24tZXh0ZW5zaWJsZSBh
bmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50
IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC0x
MTE4LDcgKzExMjIsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBl
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxs
RGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVND
SUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTExMjgsNyArMTEz
Miw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYm
ICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBAIC0xMTM3LDEzICsxMTQxLDEzIEBAIEpTVmFsdWUg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICB9CiAKICAgICBib29sIHRhcmdl
dElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAg
IHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJn
ZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0
KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdl
dCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7CkBAIC0xMzksMTQg
KzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
aWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVBy
b3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIFJlZmxlY3QuZGVm
aW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Q
cm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpA
QCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHJl
Y2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Iikp
KTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CkBAIC0y
MjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09i
amVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAg
ICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9u
cyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVz
dWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJn
ZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTMw
Nyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAK
ICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQ
cm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3Rv
dHlwZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUgUmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUq
IGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZsYWdz
OwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmluZyA9IGZsYWdzLnRvU3RyaW5nKGV4ZWMpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBmbGFnc1N0cmluZyk7CiAgICAgaWYgKCFmbGFn
c1N0cmluZykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIH0KIAogICAgIFJlZ0V4cEZsYWdzIHJlc3VsdCA9
IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAgICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3Mp
CiAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgcGF0dGVy
biA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBwYXR0ZXJuQXJn
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NB
cmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4
ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogfQpAQCAtMjU1LDYg
KzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1
ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwYXR0ZXJuQXJnID0gYXJn
cy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0gYXJncy5hdCgxKTsKIApAQCAtMjYzLDcg
KzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKIAogICAg
IGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25zdHJ1Y3RBc1JlZ2V4cCAmJiBmbGFn
c0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBwYXR0
ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoY2FsbGVlID09
IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBp
cyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBA
IC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4
ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHApIHsKICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBq
c0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVybkFyZyktPnJlZ0V4cCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTIgKzEzMywxMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnJlCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1
cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhl
Y1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAw
OwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgpIHsKQEAgLTIzMywxNCArMjMzLDE0IEBAIEpTVmFs
dWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVjU3RhdGUKIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJlZ0V4
cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwo
KSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwotCiAgICAgc2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKQEAgLTI0OSwxNCArMjQ5LDE0
IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QKICAgICBpZiAocmVn
RXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcy5sZW5n
dGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAgICAgKnZtLCBl
eGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgICAgICB2
bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhwLAogICAgICAgICAg
ICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgICAgIHJldHVybiBh
ZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJpbmdMZW5ndGgsIGVuZCk7CiAgICAgICAgICAgICB9
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAqdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKKyAgICAgICAgdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgWyZd
IChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGVuZCArIDE7CiAg
ICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTks
MTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
bXB0eVN0cmluZygpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBp
ZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFn
cyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29u
c3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSArMTg5LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NT
dHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBzdHJpbmdbMF0gPSAwOwogCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFs
dWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgc3Rp
Y2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhpc09i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgZmxhZ3Mg
PSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycsIHNvdXJjZSwgJy8n
LCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NT
dHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkpOwpAQCAtNDcyLDEyICs0NzMs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwpAQCAtNTg0LDcgKzU4Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFu
ZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNT
dHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAg
ICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5w
dXQuaXNOdWxsKCkpOwogCkBAIC01OTksNyArNjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4K
ICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpT
U2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQp
OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcg
Kzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBj
b2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CkBAIC0xMjEsMTAgKzEyMSwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3Bl
cnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAogICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJy
ZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7
CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxw
dHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZp
bmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAog
ICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAg
ICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJl
Z0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2Jh
bCkgewogICAgICAgICAvLyBFUzUuMSAxNS41LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4
cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVu
Z3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1
bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQo
KSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcgKzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7
CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJp
bmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFy
Y2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAg
Ly8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNp
bmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVj
KSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgsMTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFs
dWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwxMSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNo
VmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1
ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShl
eGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmlu
ZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEyICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRj
aFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFj
ZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJl
cGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEs
MTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3Ry
aW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDggKzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2go
ZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1l
bnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBh
cmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwy
MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAg
ICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBp
dCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5p
c051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlm
IGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMg
dGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4KQEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJh
dG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEw
LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5s
ZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0
cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0xMzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Q29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcm
IHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcg
KzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsx
NTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9
CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8
L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxl
KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1
OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7
CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAi
PC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsxNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyAr
MTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1Rv
U2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhw
cmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0
byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAg
ICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0
NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxl
bmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0
aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlm
IChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90
IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9T
ZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMsNyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9z
aXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQ
b3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9T
ZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmluZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3Rh
cnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0g
c3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3Rh
cnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhl
YyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2Vh
cmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcg
KzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIw
MTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2Ug
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFs
aXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJn
dW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAg
Q2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJp
bmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
bGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEy
ICs0NiwxMyBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAg
ICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRl
bXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVj
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewpAQCAtNjAsMTIgKzYxLDEyIEBAIEpTQXJy
YXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVt
cGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3
T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi0jaWYgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKLQotbmFt
ZXNwYWNlIHsKLQotLy8gTG9ncyBhbGwgVGhyb3dTY29wZSBhY3Rpdml0eSB0byBoZWxwIGRlYnVn
IHRoZSBzb3VyY2Ugb2YgYSB2ZXJpZmljYXRpb24gZmFpbHVyZS4KLWJvb2wgdHJhY2VPbiA9IGZh
bHNlOwotCi0vLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysg
c3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5nLgotYm9vbCB0
cmFjZVdpdGhTdGFja1RyYWNlcyA9IGZhbHNlOwotCi0vLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1
bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KLWJvb2wgdmVy
aWZpY2F0aW9uT24gPSBmYWxzZTsKLQotdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7Ci19OworI2lm
IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiAvKgogICAgIFRocm93U2Nv
cGUgdmVyaWZpY2F0aW9uIHdvcmtzIHRvIHNpbXVsYXRlIGV4Y2VwdGlvbiB0aHJvd3MgYW5kIGNh
dGNoIGNhc2VzIHdoZXJlCkBAIC0yMjAsNyArMjA3LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9
IDA7CiAKICAgICBiLiBUdXJuIG9uIFRocm93U2NvcGUgdHJhY2luZwogIAotICAgICAgIEp1c3Qg
c2V0IHRyYWNlT249dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWls
ZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAorICAgICAgIEp1c3Qgc2V0IFZNOjptX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzPXRydWUgaW4gdGhlIFZNLCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91
IHNob3VsZAogICAgICAgIHNlZSBhIHRyYWNlIG9mIFRocm93U2NvcGVzIGJlaW5nIGVudGVyZWQg
YW5kIGV4aXRlZCBhcyB3ZWxsIGFzIHRoZWlyIGRlcHRoIGUuZy4KIAogICAgIFRocm93U2NvcGUg
WzFdIEVudGVyOiBsbGludF9zbG93X3BhdGhfamZhbHNlIEAgL1ZvbHVtZXMvRGF0YS93czYvT3Bl
blNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEw
MzIKQEAgLTIzNCw3ICsyMjEsNyBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKIAogICAgIGMu
IFR1cm4gb24gVGhyb3dTY29wZSBzdGFjayBkdW1wcwogCi0gICAgICAgSnVzdCBzZXQgdHJhY2VX
aXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVi
dWlsZC4KKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcz10cnVlIGF0IGluIHRoZSBWTSwgYW5kIHJlYnVpbGQuCiAgICAgICAgVGhlcmVhZnRl
ciwgeW91IHNob3VsZCBzZWUgYSBzdGFjayB0cmFjZXMgYXQgdmFyaW91cyByZWxldmFudCBUaHJv
d1Njb3BlIGV2ZW50cy4KIAogICAgIGQuIFVzaW5nIHRocm93U2NvcGVQcmludElmTmVlZENoZWNr
KCkKQEAgLTI0OSwzMyArMjM2LDE4IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgICAg
IGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVkIHRoZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
aygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCiAqLwogCi1UaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZN
JiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxvY2F0aW9uKQotICAgIDogbV92bSh2bSkKLSAgICAs
IG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRocm93U2NvcGUpCi0gICAgLCBtX2xvY2F0aW9uKGxv
Y2F0aW9uKQotICAgICwgbV9kZXB0aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUt
Pm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2NvcGU6OlRocm93U2NvcGUoVk0mIHZtLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2Vw
dGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BU
aHJvd1Njb3BlID0gdGhpczsKLQotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2co
IjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAi
LCBsb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0
aW9uLmxpbmUpOwotICAgICAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAg
ICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LQotICAgICAgICBpZiAodHJhY2VXaXRoU3RhY2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBv
cnRCYWNrdHJhY2UoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1Nh
dGlzZmllZChTaXRlOjpTY29wZUVudHJ5KTsKKyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIG1fZGVwdGgs
IG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAKICAgICBpZiAoIW1faXNSZWxlYXNlZCkKLSAgICAg
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsK
KyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRp
b25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBJZiB3ZSByZWxlYXNlZCB0aGUgc2NvcGUsIHRoYXQgbWVhbnMgd2UncmUg
bGV0dGluZyBvdXIgY2FsbGVycyBkbyB0aGUKICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrLiBI
b3dldmVyLCBiZWNhdXNlIG91ciBjYWxsZXIgbWF5IGJlIGEgTExJbnQgb3IgSklUCkBAIC0yOTcs
MjcgKzI2OSwyNSBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAgICAgIHdpbGxCZUhh
bmRsZUJ5TExJbnRPckpJVCA9IHRydWU7CiAgICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxM
SW50T3JKSVQpCi0gICAgICAgIHNpbXVsYXRlVGhyb3coKTsKKyAgICAgICAgc2ltdWxhdGVUaHJv
dyhFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQpOwogCi0gICAgaWYgKHRyYWNlT24pIHsK
LSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9k
ZXB0aCwgIl0gRXhpdDogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0
aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lKTsKKyAgICBpZiAobV92bS5tX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpU
aHJvd1Njb3BlRXhpdCwgbV9sb2NhdGlvbik7CiAgICAgICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQogICAgICAgICAgICAgZGF0YUxvZygiLCB3aXRoIHJldGhyb3ciKTsKICAgICAg
ICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICAgICBkYXRhTG9nKCIs
IG5lZWRzIGNoZWNrIik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAKLSAgICAgICAgaWYgKHRy
YWNlV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzKQogICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAg
ICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93U2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CiB9CiAK
IHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNlcHRpb24oKSAmJiBtX3ZtLmV4Y2Vw
dGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlv
bik7CiAgICAgCiAgICAgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpA
QCAtMzI1LDcgKzI5NSw3IEBAIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGVycm9yKQogewogICAgIGlmICghZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHluYW1pY0Nh
c3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxsKCkpKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25D
aGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2RlcHRo
LCBtX2xvY2F0aW9uKTsKICAgICAKICAgICByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBlcnJvcik7CiB9CkBAIC0zMzMsNyArMzAzLDcgQEAgSlNWYWx1ZSBUaHJvd1Njb3BlOjp0aHJv
d0V4Y2VwdGlvbihFeGVjUwogSlNPYmplY3QqIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8
RXhjZXB0aW9uKj4ob2JqKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7
CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KQEAg
LTM0MSw1NSArMzExLDI0IEBAIEpTT2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihF
eGUKIHZvaWQgVGhyb3dTY29wZTo6cHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiB7CiAgICAgaWYgKG1fdm0u
bV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50Kyss
ICI+IE5lZWQgZXhjZXB0aW9uIGNoZWNrIGF0ICIsIGZ1bmN0aW9uTmFtZSwgIiBAICIsIGZpbGUs
ICI6IiwgbGluZSwgIlxuIik7CisgICAgICAgIGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpOZWVk
RXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oZnVuY3Rpb25OYW1lLCBmaWxl
LCBsaW5lKSk7CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6c2ltdWxhdGVUaHJvdygpCit2b2lkIFRo
cm93U2NvcGU6OnNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQgZXZlbnQpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisgICAgbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRF
dmVudCA9IGV2ZW50OwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb24gPSBt
X2xvY2F0aW9uOwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGggPSBtX2RlcHRo
OwogICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSB0cnVlOwogCi0gICAgaWYgKHRyYWNl
T24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBb
IiwgbV9kZXB0aCwgIl0gVGhyb3cgZnJvbTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iKTsKLSAgICAg
ICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRp
b25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcykKICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KIH0KIAot
dm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChUaHJv
d1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAgaWYgKCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7
Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0
aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0aW9uID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9p
bnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRvIHNpdGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4g
Y29uc3QgY2hhciogewotICAgICAgICAgICAgc3dpdGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBj
YXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0g
ICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRXhpdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
IkV4aXQiOwotICAgICAgICAgICAgY2FzZSBTaXRlOjpUaHJvdzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsK
LQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sg
dmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAgICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20g
VGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAiXSAiLCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFp
bExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIsIGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZh
aWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBU
aHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAg
ICAgICAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRp
b25DaGVjayk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklG
SUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4OCArMjYs
NjQgQEAKICNpZm5kZWYgVGhyb3dTY29wZV9oCiAjZGVmaW5lIFRocm93U2NvcGVfaAogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25T
Y29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNP
YmplY3Q7CiAKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2lmIEVOQUJM
RShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCi1jbGFzcyBUaHJvd1Njb3BlIHsKK2Ns
YXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBUaHJvd1Njb3BlTG9jYXRpb24pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9u
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyb3dTY29wZSgpOwogCiAgICAgVGhyb3dTY29w
ZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CiAgICAgVGhyb3dTY29wZShUaHJvd1Njb3Bl
JiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhj
ZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIAotICAgIGlubGluZSBFeGNlcHRp
b24qIGV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KKyAgICB2b2lk
IHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpOwogCiBwcml2YXRlOgotICAgIHZvaWQgc2ltdWxh
dGVUaHJvdygpOworICAgIHZvaWQgc2ltdWxhdGVUaHJvdyhFeGNlcHRpb25FdmVudCk7CiAKLSAg
ICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAgICBTY29wZUVudHJ5LAotICAgICAgICBTY29wZUV4
aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsKLSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0gICAgVk0mIG1fdm07Ci0gICAgVGhyb3dTY29wZSog
bV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9uOwotICAg
IHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9vbCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9OwogfTsK
IAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKLSAgICBKU0M6OlRocm93U2Nv
cGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9f
LCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNlcHRpb25F
dmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKSkKIAogI2RlZmlu
ZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjayhzY29wZV9fKSBcCiAgICAgc2NvcGVfXy5wcmlu
dElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQogCi0jZWxzZSAv
LyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7Citj
bGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBU
aHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIEFMV0FZU19JTkxJTkUg
VGhyb3dTY29wZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCiAgICAgeyB9
CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CisgICAgVGhyb3dT
Y29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9
Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0gICAgCi0g
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9Ci0g
ICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFs
dWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9Owog
CiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NPUEUodm1fXykgXAogICAgIEpTQzo6VGhyb3dTY29w
ZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQor
I2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0K
LSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQotICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlv
bk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxlKQotICAgICAgICAsIGxpbmUobGluZSkKLSAgICB7
IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07Ci0gICAg
Y29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBsaW5lIHsgMCB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Myw0ICs4NzMsMjYgQEAgc2l6ZV90IFZNOjpj
b21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9u
RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0
aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9p
bnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4
Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlv
biB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhy
b3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRl
cHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAg
fQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtNDgsNyArNTAsNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNs
dWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKQEAgLTgyLDYgKzgzLDcgQEAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247Citj
bGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2Zp
bGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTA5LDcgKzExMSw2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhy
b3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC00NDAsMTIgKzQ0
MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAg
IEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxG
cmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAg
RXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9u
OyB9CkBAIC02NDEsMTEgKzY0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICBtX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKICAgICAgICAgbV9sYXN0RXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0K
KyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9
CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wg
bV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKQEAgLTY3MCwxMSArNjc1LDIzIEBAIHByaXZhdGU6
CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlv
biogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShUSFJPV19TQ09QRV9W
RVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29wZSogbV90b3BUaHJvd1Njb3BlIHsgbnVsbHB0ciB9
OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsK
KyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICBFeGNlcHRpb25T
Y29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7IG51bGxwdHIgfTsKKyAgICBFeGNlcHRpb25FdmVu
dCBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudDsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9u
IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOwogICAgIHVuc2lnbmVkIG1fc2ltdWxhdGVk
VGhyb3dQb2ludERlcHRoIHsgMCB9OwogICAgIG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25D
aGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBMb2dzIGFsbCBleGNlcHRpb24gYWN0aXZpdHkgdG8g
aGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgYm9v
bCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAgIC8vIEEgbW9yZSB2ZXJi
b3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVn
aWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcuCisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzIHsgZmFsc2UgfTsKKworICAgIC8vIERpc2FibGVkIHRlbXBvcmFy
aWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRpb24gZmFpbHVyZXMgYXJlIGZpeGVkLgorICAg
IGJvb2wgbV92ZXJpZnlFeGNlcHRpb25FdmVudHMgeyBmYWxzZSB9OworCisgICAgdW5zaWduZWQg
bV9leGNlcHRpb25FdmVudENvdW50IHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fZmFpbE5l
eHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwpAQCAtNzAwLDYgKzcxNywxMCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeTsKIAorICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBw
dXJwb3NlIG9ubHkuCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIENh
dGNoU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEV4Y2VwdGlvblNjb3BlOwogICAgIGZyaWVuZCBj
bGFzcyBUaHJvd1Njb3BlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1
Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFw
U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUo
ZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7CiAK
ICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRl
cmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlm
ICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3
ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdl
YWtTZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgw
KTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNW
YWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxs
RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDkgKzMwMSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewogICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBkYXRhTG9nKGFyZ1N0cik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgs
OCArOTE4LDggQEAKICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5k
ZWYgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklGSUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1df
U0NPUEVfVkVSSUZJQ0FUSU9OICghZGVmaW5lZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgorI2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNo
IGFsbG9jYXRvciB0byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBp
ZiB0aGUgYXNzZW1ibGVyIGlzIGNvbXBpbGVkIGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFy
cgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFyS2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpT
VmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09OUGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVk
OiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
OSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4g
b2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw3
ICs4NTcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAg
Ly8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0
aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlm
ICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsK
KyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VUaHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVl
KGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg3MSw3ICs4NzMsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQgdmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBr
ZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBA
QCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVk
V29ybGQpKTsKKyAgICBWTSYgdm0gPSBleGVjLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1Zh
bHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAg
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9p
c29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUy
OSw5IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdM
aXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0df
RVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlv
bk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0g
aXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFj
ZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAog
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1
aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xODgsMTUgKzE5MCwxOCBAQCBib29s
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRD
b250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIAogICAgIC8vIExvb2t1cCB0
aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUg
cmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFj
ZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwz
MiArMjE0LDMyIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAg
ICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVz
KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
bV92YWx1ZXMpKTsKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1p
bi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1f
bWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAg
ICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFp
bGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiBy
ZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFs
dWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3Qg
PSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6
ZV90IGluZGV4LCBEaWN0aQogCiBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0
cmluZyYgdmFsdWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9v
bCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB2YWx1ZSA9IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIw
NTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVy
dGllc0FzU3RyaW4KIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRp
YWxpemVyT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNT
dGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSgpKTsKQEAgLTY5LDEwICs3MSwxMCBAQCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRp
ZXNBc1N0cmluCiAgICAgICAgIGlmIChzdHJpbmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
ICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFs
dWUpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxMyArOTAsMTQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFs
TwogCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
dm0uYXBpTG9jaygpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBhdXRvJiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25l
ZCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJy
YXkuYXQoaSkuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBw
bGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24o
c3RhdHVzLCBuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwpAQCAtODgsMTkgKzg4LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNl
bGVjdGlvbihzdGF0dXMsIG5ld1NoaXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVt
cywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1
LDExIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMCkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlv
bihuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0
MywxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpT
QXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01
Niw4ICs1OSwxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2
b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0
byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNM
ZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywg
ZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VChibG9iUGFydHMpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRp
bmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGlu
Z3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0
IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUi
LCB0eXBlKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0g
PSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAo
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3
ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAg
ICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBl
bmRpbmdzKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFu
ZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSog
Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxw
dHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90
IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291
bnQ7ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDUzODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5
QVNDSUkoKSkgewpAQCAtMTA2LDEyICsxMDYsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29y
aXRobShKU0RpY3Rpb25hcgogICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRv
IHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUu
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0
KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJoYXNoIik7CiAKICAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBv
YmplY3QsICJoYXNoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1Zh
bHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBpdkRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
ZXhlYywgaXYsIGl2RGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgaWYgKGl2RGF0YS5zZWNvbmQgIT0gMTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRh
dGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKQEAgLTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0
aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVu
Z3RoID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2Up
OwpAQCAtMTg5LDEwICsxOTEsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRP
YmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwg
cmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkg
anNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlm
ICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVz
dWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICByZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFy
eS5nZXQoImxlbmd0aCIsIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsy
MzgsMTYgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMp
OwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUs
IHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBG
aWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3Rh
dGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVl
ID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50
Iik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVp
bnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25l
bnRWYWx1ZSk7CkBAIC0yNzksMTMgKzI4MSwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1
ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0Fs
Z29yaXRobVJzYU9hZXBQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGlj
dGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdl
dEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVu
dDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAg
IEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgp
LCAibGFiZWwiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5
MywxMCArMjk1LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4K
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgbGFiZWxEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQogCiAgICAgcmVzdWx0LT5sYWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBs
YWJlbERhdGEuc2Vjb25kKTsKIApAQCAtMzE2LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
JnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBz
dWNjZXNzID0gZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFz
aFJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVj
dGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNP
TihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYg
KCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQg
YW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24uCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0
cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5
IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEg
Ym9vbGVhbiB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjpKU0NyeXB0b0tleQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUganNvblZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNv
blZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBr
ZXlPcHMtPmdldEluZGV4KG1fZXhlYywgaSk7CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9u
OwogICAgICAgICAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRy
aWJ1dGUgY291bGQgbm90IGJlIHByb2Nlc3NlZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0s6OnJlY29uYwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJpbmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2
NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
ayIsIGtleUJhc2U2NFVSTCkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90
IHByZXNlbnQgaXMgSldLIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
MjAsNyArNDIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwog
ICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkg
ewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICgh
Z2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4
cG9uZW50KSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlz
c2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1
cykpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBl
eHBvbmVudCk7CiAgICAgfQpAQCAtNDQ2LDM4ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQ
cmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUlu
Zm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlm
ICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAi
LCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVu
dCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVj
LCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwg
cHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JG
cm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3Rv
ckNSVEV4cG9uZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50KTsKICAgICB9CiAKICAgICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAg
aWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhl
clByaW1lSW5mb0pTQXJyYXkpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25l
bnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAg
ICAgfQpAQCAtNDg1LDI0ICs0ODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+
IEpTQ3J5cHRvSwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0Fy
cmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gaW5mbzsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUlu
Zm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMsIGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJKV0sgXCJvdGhcIiBhcnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5w
cmltZUZhY3RvcikpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1l
IGZhY3RvciBmb3IgYSBwcmltZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJW
ZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9y
Q1JURXhwb25lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0
b3IgQ1JUIGV4cG9uZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0Qmln
SW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0
aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUx
OSw3ICs1MTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAK
ICAgICBTdHJpbmcgandrS2V5VHlwZTsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1
aXJlZCBKV0sgXCJrdHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtNTQ5LDYgKzU0OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZv
ck9jdGV0U2VxdWVuY2UoRXgKIAogc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50
cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMm
IGRhdGEsIEpTQzo6SlNPYmplY3QqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRv
SlNPTihleGVjLCByZXN1bHQsICJrdHkiLCAiUlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJl
c3VsdCwgIm4iLCBiYXNlNjRVUkxFbmNvZGUoZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pT
T04oZXhlYywgcmVzdWx0LCAiZSIsIGJhc2U2NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsK
QEAgLTU3MCw5ICs1NzMsOCBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRz
KEpTCiAgICAgaWYgKGRhdGEub3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBk
YXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZv
cygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBKU09iamVjdCoganNQcmltZUlu
Zm8gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0
aWMgdm9pZCBhZGRKV0tBbGdvcml0aG1Ub0pTT04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2Fn
ZXNUb0pTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAg
LTczOCwxMyArNzQxLDEzIEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNl
cmkKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAK
ICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04oZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJl
c3VsdCwgImV4dCIsIGtleS5leHRyYWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihl
eGVjLCByZXN1bHQsIGtleS51c2FnZXNCaXRtYXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4o
KmtleURhdGEpKQpAQCAtNzU1LDcgKzc1OCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OnNlcmkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiS2V5IGRvZXNuJ3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgVk0m
IHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIW1f
Y29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTEgKzgwLDExIEBA
IFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIGF1dG8mIHN0
YXRlID0gKmNvbnRleHQtPmV4ZWNTdGF0ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KSwgdm0sIHN0YXRlLCBtX2NvbnN0cnVjdG9yLmdldCgpLCBsb2NhbE5hbWUpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBlbGVtZW50KTsKICAgICBpZiAoIWVsZW1l
bnQpIHsKLSAgICAgICAgYXV0byogZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IEFTU0VSVChleGNlcHRpb24pOwogICAgICAgICBpZiAoc2hvdWxkQ2xlYXJFeGNlcHRpb24gPT0g
U2hvdWxkQ2xlYXJFeGNlcHRpb246OkNsZWFyKSB7Ci0gICAgICAgICAgICBzdGF0ZS5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24pOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTY3LDcgKzE2OCw3IEBAIHZvaWQgSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2Jh
bE9iamVjdChjb250ZXh0LCAqbV9pc29sYXRlZFdvcmxkKTsKICAgICBFeGVjU3RhdGUqIHN0YXRl
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CkBAIC0xODYsNyArMTg3LDcg
QEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbAogCiAgICAgbV9jb25z
dHJ1Y3Rpb25TdGFjay5yZW1vdmVMYXN0KCk7CiAKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEVsZW1lbnQqIHdyYXBwZWRFbGVtZW50ID0gSlNFbGVtZW50Ojp0b1dyYXBwZWQo
cmV0dXJuZWRFbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMg
SlNPYmplY3QqIGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjYWxsYmFjayA9IHByb3RvdHlwZS5n
ZXQoJnN0YXRlLCBpZCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGlmIChjYWxsYmFjay5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTg4LDcgKzg4LDcgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAog
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1l
KHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3Ry
aW5nKCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVu
dFJlZ2lzdHJ5OjpkZWZpbmUoCiAgICAgfQogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9
IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIXByb3Rv
dHlwZVZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJv
dG90eXBlIG11c3QgYmUgYW4gb2JqZWN0IikpOwpAQCAtMTI5LDI1ICsxMjksMjUgQEAgSlNWYWx1
ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogCiAgICAgaWYgKGF1dG8qIGNvbm5l
Y3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVP
YmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSkp
CiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5lY3Rl
ZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBpZiAoYXV0byogZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2Fs
bGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJkaXNjb25uZWN0ZWRDYWxsYmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0
RGlzY29ubmVjdGVkQ2FsbGJhY2soZGlzY29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmIChhdXRvKiBhZG9wdGVkQ2Fs
bGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSkpCiAgICAgICAg
IGVsZW1lbnRJbnRlcmZhY2UtPnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJhY2spOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8qIGF0
dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwg
cHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0dHJpYnV0ZUNo
YW5nZWRDYWxsYmFjayIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgaWYgKGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICBhdXRvIHZh
bHVlID0gY29udmVydE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgY29uc3RydWN0b3It
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib2JzZXJ2ZWRBdHRy
aWJ1dGVzIikpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIGVsZW1lbnRJbnRlcmZh
Y2UtPnNldEF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2ss
ICp2YWx1ZSk7CkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQ
cm9taXNlKEV4ZWNTdAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNT
dHJpbmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0
ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tRWxlbWVu
dE5hbWVBbmRUaHJvd0lmTmVlZGVkKHN0YXRlLCBsb2NhbE5hbWUpKQpAQCAtMTg3LDEzICsxODcs
MTUgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAogCiBKU1ZhbHVl
IEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Ojp3aGVuRGVmaW5lZChFeGVjU3RhdGUmIHN0YXRlKQog
eworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLnZtKCkpOworCiAg
ICAgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8mIHByb21pc2VE
ZWZlcnJlZCA9ICpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCk7CiAgICAgSlNWYWx1ZSBwcm9taXNlID0gd2hlbkRlZmluZWRQcm9taXNlKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHdyYXBwZWQoKSk7CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHJlamVjdFBy
b21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoc3RhdGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVy
cmVkKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVk
LnByb21pc2UoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDggKzExOSwx
MSBAQCBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDCiAKIFN0cmluZyB2
YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJp
bmcgfTsKIApAQCAtMTg3LDEwICsxOTAsMTEgQEAgZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYQogCiB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8RXhjZXB0aW9uKj4oZXhjZXB0aW9uVmFsdWUpOwogICAgIGlmICghZXhj
ZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmxhc3RFeGNlcHRpb24oKTsKKyAg
ICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWV4Y2Vw
dGlvbikKICAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4Y2VwdGlvblZhbHVlLCBFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKICAgICB9
CkBAIC0yMDAsMTUgKzIwNCwxOCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9u
KiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxz
KiBleGNlcHRpb25EZXRhaWxzKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwogCiAgICAg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zy
b21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFj
a1NpemVUb0NhcHR1cmUpKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMt
PmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
dm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKICAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Nhc3Q8SlNE
T01XaW5kb3cqPihnbG9iYWxPYmplY3QpKSB7CkBAIC0yMzksOCArMjQ2LDggQEAgdm9pZCByZXBv
cnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmlu
ZygpIGNhbGwgYWJvdmUuCiAgICAgICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5vdCBzdXBw
b3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsK
ICAgICB9CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0yNTYsOCAr
MjYzLDEwIEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKIAogdm9p
ZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNl
cHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9ydEV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24pOwogfQogCkBAIC0zNDEsNyArMzUwLDcgQEAgdm9pZCBzZXRET01F
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFlYyB8
fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIWVjIHx8IHNjb3BlLmV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm47CiAKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjKSk7CkBAIC0zNTIsNyArMzYxLDcgQEAgdm9pZCBzZXRE
T01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFl
Yy5jb2RlIHx8IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmICghZWMuY29kZSB8fCBzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYy5jb2RlLCBlYy5tZXNzYWdlKSk7
CkBAIC0zNjIsMTUgKzM3MSwxNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSogZXhlCiAKIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGFw
cGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUs
IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5p
dGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKQEAg
LTUwOSw3ICs1MjAsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYg
CiAgICAgfQogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKQEAgLTU1Niw3ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUlu
dChFeGVjU3RhdGUmCiAgICAgfQogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKQEAgLTY0MiwxMSArNjUzLDE0IEBAIHVpbnQxNl90IHRvVUlu
dDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmEKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtbG9uZwogaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQogICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50
MzIpOwogfQpAQCAtNjcyLDI3ICs2ODYsMzYgQEAgdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVj
U3RhdGUmIHN0YXRlLAogLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25l
ZC1sb25nCiB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkp
CiAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7CiB9
CiAKIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50
ZWdlcik7CiB9CiAKIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVn
ZXIpOwogfQpAQCAtODU2LDIxICs4NzksMjEgQEAgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoSlNDOjpFeAogCiB2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQog
ewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAgIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5P
VF9TVVBQT1JURURfRVJSLCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93SW52YWxp
ZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFN0cmluZyBtZXNzYWdl
U3RyaW5nKG1lc3NhZ2UpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2FnZVN0cmluZykp
OwogfQogCiB2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBBU1NF
UlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24o
JnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDIsNyArNTAyLDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6Ogog
ICAgIH0KIAogICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVj
LCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
QEAgLTUxMSw3ICs1MTEsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpT
Qzo6CiAgICAgfQogCiAgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIG9iamVjdDsK
QEAgLTU1NCw4ICs1NTQsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxUPiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZl
Y3Rvci5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6
anNVbmRlZmluZWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKQEAgLTU2NCw4ICs1NjcsMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCiB7
CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYg
KFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3Rvcltp
XS5nZXQoKSkpOwpAQCAtNjQ5LDE0ICs2NTUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IEpTQzo6SlNWYWx1ZSBqc0Zyb3plbkFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3Rv
cikgewogICAgICAgICBsaXN0LmFwcGVuZChKU1ZhbHVlVHJhaXRzPFQ+OjphcnJheUpTVmFsdWUo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBh
dXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgbnVsbHB0ciwgZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6Ompz
VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhl
YywgYXJyYXkpOwogfQpAQCAtNjk3LDMyICs3MDYsNDAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IE5hdGl2ZVZhbHVlVAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8
U3RyaW5nPiB7CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgU3RyaW5nJiBpbmRleGVkVmFsdWUpCiAg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1Zh
bHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlv
bigpOworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRl
bXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPHVuc2lnbmVkPiB7CiAgICAgc3RhdGlj
IGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFs
dWUganNWYWx1ZSwgdW5zaWduZWQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9VSW50MzIoJmV4ZWMp
OwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAh
c2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZl
VmFsdWVUcmFpdHM8ZmxvYXQ+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhl
ZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZh
bHVlID0ganNWYWx1ZS50b0Zsb2F0KCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4
Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07
CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewogICAgIHN0
YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUsIGRvdWJsZSYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b051bWJlcigmZXhl
Yyk7Ci0gICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJu
ICFzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCkBAIC03NTksMTEgKzc3NiwxMyBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBWZWN0b3I8VD4gdG9OYXRpdmVBCiAgICAgfQogCiAgICAgVmVj
dG9yPFQ+IHJlc3VsdDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFsdWUsIFsmcmVz
dWx0XShKU0M6OlZNJiwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1
ZSkgeworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6
Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgVCBj
b252ZXJ0ZWRWYWx1ZTsKLSAgICAgICAgaWYgKCFOYXRpdmVWYWx1ZVRyYWl0czxUPjo6bmF0aXZl
VmFsdWUoKnN0YXRlLCBqc1ZhbHVlLCBjb252ZXJ0ZWRWYWx1ZSkpCisgICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IE5hdGl2ZVZhbHVlVHJhaXRzPFQ+OjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUs
IGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXN1bHQuYXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFs
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cAogewogICAgIEFTU0VS
VChleGVjU3RhdGUpOwogICAgIEFTU0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291bnQoKSA9PSAy
KTsKKyAgICBWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gZXhlY1N0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQo
IWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgYXV0byBmdW5jdGlvbk5hbWUgPSBleGVjU3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VSVCghZXhl
Y1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBt
YWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBmdW5j
dGlvbk5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0KIApAQCAtODcsMTEgKzg5LDEzIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZUdldHRlclQKIHsKICAgICBBU1NFUlQoZXhlY1N0
YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAg
Vk0mIHZtID0gZXhlY1N0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJmYWNlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhj
ZXB0aW9uKCkpOwogICAgIGF1dG8gYXR0cmlidXRlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VHZXR0
ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgYXR0cmlidXRl
TmFtZS51dGY4KCkuZGF0YSgpKSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHJldmlzaW9uIDIwNTM4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDkgQEAgcHVibGljOgogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIFJlZjxKU0dsb2JhbE9iamVjdENhbGxiYWNrPiBwcm90ZWN0ZWRU
aGlzKCp0aGlzKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QtPnZt
KCkpOworICAgICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKIApAQCAtNjQsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBKU01h
aW5UaHJlYWRFeGVjU3RhdGU6OnJ1blRhc2soZXhlYywgbV90YXNrKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV90YXNrLT5ydW4oZXhlYyk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIw
NSw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgaXRlcmF0b3JGb3JFYWNoKEpTQzoKICAgICAgICAg
YXBwZW5kRm9yRWFjaEFyZ3VtZW50cyhzdGF0ZSwgd3JhcHBlci0+Z2xvYmFsT2JqZWN0KCksIGFy
Z3VtZW50cywgdmFsdWUpOwogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHdyYXBwZXIpOwogICAg
ICAgICBKU0M6OmNhbGwoJnN0YXRlLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3VtZW50cyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5l
ZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNw
cAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Q
cm9taXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5LDE0IEBAIHZvaWQgRGVmZXJy
ZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0aW9uQ28KIAogdm9pZCByZWplY3RQcm9taXNlV2l0aEV4
Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNQcm9taXNlRGVmZXJyZWQmIHByb21pc2VEZWZlcnJlZCkKIHsKLSAgICBp
ZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNWYWx1ZSBlcnJvciA9IHN0YXRl
LmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
SlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAKICAgICBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsICZn
bG9iYWxPYmplY3QsICZwcm9taXNlRGVmZXJyZWQpLT5yZWplY3QoZXJyb3IpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHJldmlzaW9uIDIwNTM4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwxNSBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0
aW9uSWZBbnkoSlNDCiAKIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgcHJvbWlzZUZ1bmN0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCopKQogeworICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAg
ICBKU0M6OkpTUHJvbWlzZURlZmVycmVkJiBwcm9taXNlRGVmZXJyZWQgPSAqSlNDOjpKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7CiAgICAgcHJvbWlzZUZ1
bmN0aW9uKCZzdGF0ZSwgJnByb21pc2VEZWZlcnJlZCk7CiAKICAgICByZWplY3RQcm9taXNlV2l0
aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7Ci0g
ICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29w
ZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLnByb21p
c2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdN
YXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSwxMSArNzUsMTQgQEAgYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUlu
ZAogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYs
IGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEzICsxOTcsMTUgQEAgcHVibGljOgogICAgIHZv
aWQgY2FsbCgpCiAgICAgewogICAgICAgICBSZWY8SlNET01XaW5kb3dNaWNyb3Rhc2tDYWxsYmFj
az4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRl
OjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7CiAKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTQsNiArMzU0LDkgQEAgYm9vbCBKU0RPTVdpbmRvdzo6cHJldmVudEV4dGVuc2lvbnMo
SlNPYgogCiB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQ
T1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2YXIgbG9j
YXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9wZXJ0eSBu
YW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24gKDxyZGFy
Oi8vcHJvYmxlbS81Njg4MDM5PikuCkBAIC0zNjcsNyArMzcwLDcgQEAgdm9pZCBKU0RPTVdpbmRv
dzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJgogI2VuZGlmCiAKICAgICBTdHJpbmcgbG9jYXRpb25T
dHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gd3JhcHBl
ZCgpLmxvY2F0aW9uKCkpCkBAIC0zOTEsMTUgKzM5NCwxOCBAQCBKU1ZhbHVlIEpTRE9NV2luZG93
OjppbWFnZShFeGVjU3RhdGUmIHN0CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1
ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1l
bnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBK
U1ZhbHVlIHRhcmdldFZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAgQXRvbWljU3RyaW5n
IHRhcmdldCA9IHRhcmdldFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBBdG9taWNTdHJpbmco
Il9ibGFuayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIDogdGFyZ2V0VmFs
dWUudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVz
U3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSB3cmFwcGVkKCkub3Bl
bih1cmxTdHJpbmcsIHRhcmdldCwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRv
dygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUpKTsKQEAgLTQ1NSwxMCArNDYxLDEwIEBA
IEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGUKICAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cmluZyBkaWFsb2dGZWF0
dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKHN0YXRlKTsKQEAgLTQ5NiwxNiAr
NTAyLDE2IEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdlKERPTVdpbmQKICAgICAg
ICAgfQogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
dHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMpOwogICAg
IH0KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRv
IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCAmbWVzc2FnZVBvcnRzLCAmYXJyYXlCdWZmZXJzKTsKIAotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyB0YXJn
ZXRPcmlnaW4gPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKQEAgLTUzMCw3ICs1MzYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1l
b3V0KEV4ZWNTdGF0CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1cml0
eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50KCktPmNv
bnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2No
ZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghYWN0aW9uKQpAQCAt
NTU1LDcgKzU2MSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGEK
IAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gd3Jh
cHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5
UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+
IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkt
PndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
SW50MzIoJnN0YXRlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRh
Q3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSAr
NTgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIGRvdWJsZSBzdGFydFRpbWUoZXhlYy51bmNoZWNrZWRB
cmd1bWVudCgwKS50b051bWJlcigmZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgZG91YmxlIGVu
ZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b051bWJlcigmZXhlYykpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTg3LDcgKzg3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlmICh2YWx1ZUFyZ3VtZW50LmlzQ2Vs
bCgpICYmIHZhbHVlQXJndW1lbnQuYXNDZWxsKCktPmluaGVyaXRzKHN0ZDo6cmVtb3ZlX3BvaW50
ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBlOjppbmZvKCkpKSB7CiAKICAgICAgICAgQXJyYXlCdWZm
ZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVyKHZhbHVlQXJndW1lbnQpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghZGF0YSkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1
LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmEKICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlz
IHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3Qo
JnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgeFZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIngiKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVggPSAheFZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHggPSB4VmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVl
IHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ5IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29s
IGNhblByb3ZpZGVZID0gIXlWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB5
ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWiA9ICF6VmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKTsKICAgICBkb3VibGUgeiA9IHpWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJvdmlkZVggJiYg
IWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTg0LDMyICs4NywzNSBAQCBzdGF0aWMg
UmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmpl
Y3QuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAg
QVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAKICAgICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZUFscGhhID0gIWFscGhhVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYWxwaGEgPSBhbHBoYVZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQmV0YSA9ICFiZXRhVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKTsKICAgICBkb3VibGUgYmV0YSA9IGJldGFWYWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgZ2FtbWFW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJnYW1tYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9v
bCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAg
IGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNhblByb3ZpZGVBbHBoYSAmJiAh
Y2FuUHJvdmlkZUJldGEgJiYgIWNhblByb3ZpZGVHYW1tYSkKQEAgLTE3MCw2ICsxNzYsOSBAQCBK
U1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFsKEV4CiAKIEpTVmFsdWUgSlNEZXZp
Y2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcgdHlwZSA9IHN0YXRlLmFyZ3VtZW50KDAp
LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgYm9vbCBidWJibGVzID0gc3Rh
dGUuYXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgYm9vbCBjYW5jZWxhYmxlID0g
c3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CkBAIC0xNzcsMTUgKzE4NiwxNSBA
QCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNCiAgICAgLy8gSWYgYW55
IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5v
dCBwcm92aWRlZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlw
dCBjb252ZXJzaW9uLgogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+
IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVudCgz
KSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbklu
Y2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNjZWxlcmF0aW9uQXJndW1lbnQoc3RhdGUuYXJndW1lbnQo
NCksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRlPiByb3RhdGlvblJhdGUg
PSByZWFkUm90YXRpb25SYXRlQXJndW1lbnQoc3RhdGUuYXJndW1lbnQoNSksIHN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBib29sIGludGVy
dmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9w
ZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIGZpbmFsUmVzdWx0KSBjb25z
dAogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgSWRlbnRpZmll
ciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgYm9vbCBwcm9wZXJ0eUZvdW5kID0gbV9pbml0aWFsaXplck9iamVjdC5nZXQoKS0+
Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgWyZdIChib29sIHByb3BlcnR5Rm91
bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gYm9vbCB7CkBAIC04Niw3ICs4OCw3IEBAIEpTRGlj
dGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAgICAgICAgZmluYWxSZXN1bHQg
PSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0pOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247
CiAgICAgcmV0dXJuIHByb3BlcnR5Rm91bmQgPyBQcm9wZXJ0eUZvdW5kIDogTm9Qcm9wZXJ0eUZv
dW5kOwogfQpAQCAtMTUxLDE3ICsxNTMsMjAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRW
YWx1ZShFeGVjU3RhdAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAgQVNT
RVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChl
eGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICByZXN1bHQuYXBwZW5kKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwog
ICAgIH0KQEAgLTIyMSw2ICsyMjYsOSBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAg
QVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgcmVzdWx0LmNsZWFyKCk7CiAKICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTIyOCwxMiArMjM2LDEyIEBAIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUs
IGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICByZXN1bHQuYWRkKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYykpOwogICAgIH0KQEAgLTI5NywxNyArMzA1LDIwIEBAIHZvaWQgSlNEaWN0aW9uYXJ5
Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGUKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFt
Pj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVj
LCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0
ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBzdHJlYW0gPSBKU01lZGlhU3RyZWFtOjp0
b1dyYXBwZWQoaXRlbVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5oCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw5IEBAIGlu
bGluZSBib29sIEpTRGljdGlvbmFyeTo6Z2V0KGNvbnN0IGNoYXIKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBSZXN1bHQ+CiBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpT
RGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQoY29uc3QgY2hhciogcHJvcGVydHlO
YW1lLCBUKiBjb250ZXh0LCB2b2lkICgqc2V0dGVyKShUKiBjb250ZXh0LCBjb25zdCBSZXN1bHQm
KSkgY29uc3QKIHsKKyAgICBKU0M6OlZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6OkpTVmFsdWUgdmFsdWU7
CiAgICAgR2V0UHJvcGVydHlSZXN1bHQgZ2V0UHJvcGVydHlSZXN1bHQgPSB0cnlHZXRQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICBzd2l0Y2ggKGdldFByb3BlcnR5UmVzdWx0KSB7
CkBAIC0yMTIsNyArMjE1LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0Rp
Y3RpbwogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAgICBjb252ZXJ0VmFsdWUobV9leGVj
LCB2YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UaHJvd247CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxNiArMTUzLDE2IEBAIEpT
VmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dCgKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNCkpCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
ICAgICBhdXRvIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dU
RlN0cmluZygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gaGVpZ2h0
ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMyksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gd3JhcHBlZCgpLmdldENTU0NhbnZh
c0NvbnRleHQoV1RGTW92ZShjb250ZXh0SWQpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHdpZHRo
KSwgV1RGTW92ZShoZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksMTIgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAg
IGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5p
c0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCkpOworICAgIFZNJiB2bSA9IHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAvLyBTZWUgaHR0
cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkaXNwYXRjaGluZy1ldmVudHMgc3BlYyBvbiBjYWxs
aW5nIGhhbmRsZUV2ZW50LgorICAgIC8vICJJZiB0aGlzIHRocm93cyBhbiBleGNlcHRpb24sIHJl
cG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQgc2hvdWxkIG5vdCBwcm9wYWdhdGUgdGhlCisgICAgLy8g
ZXhjZXB0aW9uLgogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9u
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikKQEAgLTEwOSw2
ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAg
IC8vIElmIGpzRnVuY3Rpb24gaXMgbm90IGFjdHVhbGx5IGEgZnVuY3Rpb24sIHNlZSBpZiBpdCBp
bXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFjZSBhbmQgdXNlIHRoYXQKICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaGFuZGxlRXZlbnRGdW5j
dGlvbiA9IGpzRnVuY3Rpb24tPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
ICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgeworICAgICAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24o
KTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKKyAgICAgICAgICAgIGV2
ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOworICAgICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KICAgICAgICAgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShoYW5kbGVFdmVu
dEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgfQogCkBAIC0xMjEsNyArMTM0LDYgQEAgdm9pZCBK
U0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAgICBFdmVudCogc2F2ZWRF
dmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7CiAgICAgICAgIGdsb2JhbE9iamVj
dC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNj
b3BlID8gdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCiAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJl
YWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKQEAgLTEzOCw3ICsxNTAsNyBAQCB2b2lkIEpTRXZlbnRM
aXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAgICAgaWYgKGlzPFdvcmtlckdsb2Jh
bFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKICAgICAgICAgICAgIGF1dG8gc2Ny
aXB0Q29udHJvbGxlciA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0gICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRF
eGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKSk7CisgICAgICAgICAgICBib29sIHRlcm1pbmF0
b3JDYXVzZWRFeGNlcHRpb24gPSAoc2NvcGUuZXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICBpZiAodGVy
bWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBzY3JpcHRDb250cm9sbGVyLT5pc1Rlcm1pbmF0aW5n
RXhlY3V0aW9uKCkpCiAgICAgICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+Zm9yYmlkRXhl
Y3V0aW9uKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25l
ZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2Vx
dWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNMZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKGJsb2JQYXJ0
cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcihleGVjLCBzY29w
ZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUiLCBudWxscHRyLCAiRE9NU3RyaW5nIik7CiAKICAgICBT
dHJpbmcgZmlsZW5hbWUgPSBhcmcudG9XVEZTdHJpbmcoJmV4ZWMpLnJlcGxhY2UoJy8nLCAnOicp
OwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFR5cGU7CkBAIC04Nyw3ICs4Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgLy8gQXR0ZW1wdCB0
byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAgICAgICAgIFN0cmluZyB0eXBlOwogICAgICAgICBk
aWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgbm9y
bWFsaXplZFR5cGUgPSBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUodHlwZSk7CkBAIC05NSw3
ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAg
ICAgLy8gT25seSB0cnkgdG8gcGFyc2UgdGhlIGxhc3RNb2RpZmllZCBkYXRlIGlmIHRoZXJlIHdh
cyBub3QgYW4gaW52YWxpZCB0eXBlIGFyZ3VtZW50LgogICAgICAgICBpZiAodHlwZS5pc0VtcHR5
KCkgfHwgICFub3JtYWxpemVkVHlwZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRpY3Rpb25h
cnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBsYXN0TW9kaWZpZWQpOwotICAgICAgICAgICAgaWYgKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDcsNyArMTA3LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGJsb2JQ
YXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChBcnJheUJ1
ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQpAQCAtMTE4LDcgKzExOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgICAg
IGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBT
dHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgICAgICBpZiAo
ZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzdHJpbmcsIEFTQ0lJTGl0
ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOSBAQCBzdGF0aWMgdm9pZCBzZXRNYXhpbXVt
QWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVh
dGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4KICAgICBhdXRvIG9wdGlv
bnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOwogCkBAIC04Miw3ICs4NSw3IEBAIHN0YXRp
YyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MKIAogICAgIC8vIEdpdmVuIHRoZSBh
Ym92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVj
dCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigp
KTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRp
YWxpemVyIG9iamVjdC4KICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShleGVjLCBvYmplY3Qp
OwpAQCAtOTksMTkgKzEwMiwyMiBAQCBzdGF0aWMgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3Jl
YXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9u
Q2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3Np
dGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9u
T25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwg
c3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9u
RXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJv
ckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2Fs
bGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9
IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9u
T3B0aW9ucyk7CiAKQEAgLTEyMSwxOSArMTI3LDIyIEBAIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6
Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBBcmd1bWVudHM6IFBv
c2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25h
bClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1
bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBv
c2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRp
b25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgx
KSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0
aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBv
c2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1l
ZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAvLyBIVE1MQWxsQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ug
b2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLgogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NSw3
ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3Ig
ZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKnN0cmlu
Zy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMs
IGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24uaXRlbShpbmRleC52YWx1
ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXgg
b2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4
ZWMpLmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVk
SXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShXRUJHTCkKIHN0YXRpYyB2b2lkIGdl
dDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUmVmUHRyPENhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGluaXRp
YWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAoaW5pdGlhbGl6ZXJWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgSlNPYmpl
Y3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdCgmc3RhdGUp
OwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnko
JnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsKQEAgLTgzLDcgKzg2LDcgQEAgSlNWYWx1ZSBKU0hU
TUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAo
SFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RD
b250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKQEAgLTExMCwxNCAr
MTEzLDE0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXAKIAogICAg
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSB3cmFwcGVkKCk7CiAgICAgY29uc3QgU3RyaW5n
JiBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygmc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAg
ICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAg
ICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgaWYgKCFlbGVt
ZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewogICAgICAgICBTdHJ1Y3R1cmUq
IGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1MRWxlbWVudD4odm0sICpnbG9i
YWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50U3RydWN0dXJlID0gSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4ZWMsIG5ld1RhcmdldFZhbHVlLCBi
YXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBSZWY8SFRN
TEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKGVsZW1lbnRJbnRlcmZhY2Ut
Pm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAtOTgsMTIgKzk4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBBU1NFUlQoZWxlbWVudFdyYXBwZXJWYWx1ZS5p
c09iamVjdCgpKTsKIAogICAgIEpTVmFsdWUgbmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQo
JmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiBl
bGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRXcmFwcGVyVmFsdWUpOwogICAg
IEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmplY3QsICZleGVjLCBuZXdQ
cm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQgKi8pOwotICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBlbGVt
ZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNrKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE4ICs2MywxOCBAQCBKU1ZhbHVl
IEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgCiAgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3Rh
dGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gRklYTUU6IHRpdGxl
IHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBT
dHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAgICAgdXJsID0gdmFsdWVU
b1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05NywxOCArOTcsMTggQEAgSlNWYWx1ZSBKU0hpc3Rv
cnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksIDAsIDApOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIEZJWE1FOiB0aXRsZSBzaG91bGQg
bm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHVy
bDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRh
YmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw3ICs1NSw3IEBAIEpTVmFsdWUgSlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS5h
cmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVl
ID0gc3RhdGUuYXJndW1lbnQoMSk7CkBAIC02NiwxNyArNjYsMTcgQEAgSlNWYWx1ZSBKU0lEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNl
OwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAg
SlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikpOwotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5
UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBhdXRvSW5jcmVtZW50ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYXV0b0luY3JlbWVudCIpKS50b0Jvb2xlYW4oJnN0
YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUz
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9z
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJN
b3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZl
bnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAgSlNPYmplY3Qq
IEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmICghZ2xvYmFsT2JqZWN0KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTExMiw5ICsx
MTUsOSBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgICAg
IGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFtZSksCiAgICAgICAgIG1fc291cmNlVVJMLCBtX3Nv
dXJjZVBvc2l0aW9uLCBvdmVycmlkZUxpbmVOdW1iZXIpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTEyMywxNCArMTI2LDEzIEBAIEpTT2JqZWN0KiBKU0xh
enlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAg
ICAgICAgaWYgKCF3cmFwcGVyKCkpIHsKICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2Rl
JyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2Un
cmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVk
IHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+dm0oKSwgYXNPYmpl
Y3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdpbmFsTm9kZSkpKTsKKyAgICAgICAg
ICAgIHNldFdyYXBwZXIodm0sIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqbV9v
cmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3Mg
aG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQogICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwg
YW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAg
ICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4ZWMtPnZtKCksIGpzQ2FzdDxKU05v
ZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1
bmN0aW9uLT5zY29wZSgpKSk7CisgICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUo
dm0sIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhl
YywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1
bmN0aW9uOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsMTEgKzEwNywxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGxpbmtB
bmRFdmFsdWF0ZU1vZHVsZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBpbml0aWF0b3IsIE5ha2VkUHRyPEpTQzo6RXhj
ZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKyAgICAKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVj
KTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpsaW5rQW5kRXZhbHVh
dGVNb2R1bGUoZXhlYywgbW9kdWxlS2V5LCBpbml0aWF0b3IpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+
dm0oKS5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0xMzEsOCArMTM0LDEw
IEBAIHByaXZhdGU6CiAKICAgICB+SlNNYWluVGhyZWFkRXhlY1N0YXRlKCkKICAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gc19tYWluVGhyZWFkU3RhdGUtPnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzX21haW5UaHJlYWRTdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
CiAgICAgICAgIGJvb2wgZGlkRXhpdEphdmFTY3JpcHQgPSBzX21haW5UaHJlYWRTdGF0ZSAmJiAh
bV9wcmV2aW91c1N0YXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4
ZWNTdGF0ZSYgCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChK
U01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCkudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IHN0
YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwogICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOwpAQCAtMTE2LDE2ICsxMTks
MTYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZQogICAgICAgICBt
ZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lc3NhZ2VQb3J0QXJyYXk+KCk7CiAgICAg
ICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlCdWZmZXJBcnJheT4oKTsK
ICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAq
bWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZmZXJzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dFZhbHVlIGRhdGFBcmcoc3RhdGUudm0oKSwgc3RhdGUuYXJndW1lbnQoMykpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJn
KHZtLCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBNZXNzYWdlRXZlbnQm
IGV2ZW50ID0ganNFdmVudC0+d3JhcHBlZCgpOwogICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQo
dHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5Bcmcs
IGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIFdURk1vdmUobWVzc2FnZVBvcnRzKSk7Ci0gICAg
anNFdmVudC0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUo
KSk7CisgICAganNFdmVudC0+bV9kYXRhLnNldCh2bSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVl
KCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3MywxMiBAQCB2b2lkIGZpbGxNZXNzYWdl
UG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlCiAgICAgLy8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0
eXBlcywgcGVyIFdlYklETCBzcGVjIDQuMS4xMy4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2Uoc3RhdGUsIHZhbHVlLCBsZW5ndGgp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
IDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2JqZWN0cywgcGVyIEhUTUw1IHNwZWMg
MTAuMy4zLgogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAko
cmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5OwogICAg
ICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRB
cnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CiAgICAgICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCks
ICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAogICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2
b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNv
bnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIERlY2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0
YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtOTgsNyArOTgsNyBA
QCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7
IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBEZWNpc2lvbjo6QWxsb3c7CiAKICAgICBEZWNpc2lvbiBkZWNp
c2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9uPihuYXRpdmVWYWx1ZSkgfTsKQEAgLTExOSw4ICsx
MTksMTEgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlYwogCiB2b2lk
IEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9uIGRlY2lzaW9u
IHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHdyYXBwZWQoKS5zZXREZWNpc2lvbihkZWNpc2lvbik7CkBAIC0xMzMsOCArMTM2
LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjp1bmIKIAogdm9pZCBK
U01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lz
aW9uIHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd3JhcHBlZCgpLnNldFVuYmxvY2tS
ZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVlc3REZWNpc2lvbik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0OSwxMiBAQCB1aW50MTZfdCBKU05vZGVG
aWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCks
IG5vZGUpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJf
UkVKRUNUOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNr
RGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHN0YXRlLCAiYWNjZXB0Tm9kZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSB8fCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVy
bmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIFJldGhyb3cgZXhjZXB0aW9uLgogICAgICAgICB0
aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTYyLDcg
KzYzLDcgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIH0K
IAogICAgIHVpbnQxNl90IHJlc3VsdCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0
ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1Rocm93U2NvcGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzUsNiArMzYsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFu
dDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFy
Z3VtZW50Q291bnQoKTsKIAogICAgIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxS
ZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKQEAgLTQ2LDcgKzUwLDcgQEAgVmVjdG9yPHN0ZDo6
ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxObwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChub2RlLT53cmFwcGVkKCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0
cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgICAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChF
eGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFzdGF0ZS5hcmd1bWVu
dENvdW50KCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFN0cmluZyBzcWxT
dGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8v
IE5vdyBhc3NlbWJsZSB0aGUgbGlzdCBvZiBTUUwgYXJndW1lbnRzCkBAIC02MywxNSArNjYsMTUg
QEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICB9CiAK
ICAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgc3RhdGUu
cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhW
YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQpAQCAtODEsNyArODQsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4
ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAg
ICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUp
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpT
U1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkudG9VSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksMTYgKzc5LDE5IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlMKIAogdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0
b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdlKj4ob2JqZWN0KTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkubGVuZ3RoKGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLmtleShpLCBlYykpKTsKICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC05Nyw2ICsxMDAsOSBAQCB2b2lkIEpTU3RvcmFn
ZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiAKIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9tIHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3Qg
aGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlzIG5hbWUuCiAgICAgLy8gU2luY2UgaGFzUHJv
cGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBjYW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUg
Zm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgLy8gdGhlIG5hdGl2ZSBwcm9wZXJ0eSBzbG90
cyBtYW51YWxseS4KQEAgLTExMCw3ICsxMTYsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdh
dGUoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBzdHJp
bmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CiAgICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVs
ZWdhdGUoKSBzaG91bGQgaGFuZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAogICAgICAgICAv
LyBpZiB0cnVlLCB0ZWxscyB0aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1
dCkuIEl0IGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIKICAgICAgICAgLy8gcHV0RGVsZWdhdGUo
KSBkaWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBp
dCBkaWRuJ3QgaW4gdGhpcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0
VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw4ICs0NCwxMSBAQCB2b2lkIEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiB2
b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRv
JiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7
CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVv
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0
MywxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpT
VmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01
Niw4ICs1OSwxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2
b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0
byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVy
aW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEwICsxMDUsMTAgQEAgSlNWYWx1ZSBK
U1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZAogCiAgICAgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMudW5j
aGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvSW50MzIoJmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRJbmRleGVkUGFy
YW1ldGVyKHBuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIHRvSlMoJmV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBpbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAg
QEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViRwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBv
YmotPndyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbzsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsK
QEAgLTMzNSw3ICszMzUsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBw
ZWQoKTsKICAgICBjb25zdCBTdHJpbmcgbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250
ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOwpAQCAtMzU3LDEzICszNTcsMTMgQEAgSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25l
ZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25l
ZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZv
IGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC0zODQsNyArMzg0LDcg
QEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3
cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUs
IGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTQwOCw3ICs0MDgsNyBAQCBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBA
IC00MzcsNyArNDM3LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgV2Vi
R0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJh
bWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtNDk2LDYgKzQ5Niw5
IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtNTA4LDcgKzUxMSw3IEBAIGJvb2wgdG9W
ZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0MKICAgICAKICAgICBmb3IgKGludDMyX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigm
c3RhdGUpKTsKICAgICB9CkBAIC01NTYsMTEgKzU1OSwxMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgfSBlbHNlCiAgICAgICAgIGluZGV4ID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwogICAgIAotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFy
cmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTcwNyw3ICs3MTAsNyBAQCBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChECiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKICAgICAKICAgICBib29sIHRyYW5zcG9zZSA9IHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJH
TEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3Vi
dGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MywxMSArNjMsMTQgQEAgZW51bSBjbGFzcyBDcnlwdG9LZXlGb3JtYXQgewogCiBzdGF0
aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRpZmllcjsKLSAgICBpZiAoIUpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZh
bHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlm
aWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNj
ZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
IAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigp
LmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTgxLDcg
Kzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBrZXlGb3Jt
YXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAi
cmF3IikKICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXc7CkBAIC0xMTQsNyAr
MTE3LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSlNW
YWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0ZSwgaSk7CiAgICAgICAgIFN0cmlu
ZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsK
LSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
ZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5cHQiKQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0
b0tleVVzYWdlRW5jcnlwdDsKQEAgLTE0NSwxNiArMTQ4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAg
ICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdv
cml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
ICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBh
cmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJl
ZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMTY3LDEwICsxNjgsMTAgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0
b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNW
YWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTIwMSwxNiArMjAy
LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0
aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
ICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdv
cml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBw
YXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5
Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpA
QCAtMjIzLDEwICsyMjIsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlw
dChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURl
ZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgp
KTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVy
OjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTI1
NiwxNiArMjU1LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAg
aWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvclNpZ24oJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5
cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgh
a2V5KQpAQCAtMjc4LDEwICsyNzUsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6
c2lnbihFeGVjUwogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBp
ZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJv
bWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9i
amVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRX
cmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsK
QEAgLTMxMSwxNiArMzA4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlm
eShFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0g
PSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7
CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5
ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgaWYgKCFrZXkpCkBAIC0zMzMsMTYgKzMyOCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzaWdu
YXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKSkgewotICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWdu
YXR1cmUpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlw
dG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgzKSwgZGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOwor
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQog
CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVy
cmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVk
V3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC0zNzIsMjIgKzM2NywyMCBAQCBKU1ZhbHVl
IEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3Rh
dGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUo
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkg
ewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29w
ZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAg
ICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
IAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRh
KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3Vj
Y2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQ
dHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTQxNywzMCArNDEwLDI4
IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2UKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
YWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0
aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckdlbmVyYXRlS2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
cGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYg
KHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENy
eXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQo
KSA+PSAzKSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2Fn
ZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMiksIGtleVVzYWdlcyk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFz
dWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAg
ICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTQ4NCw3ICs0NzUs
NyBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFr
ZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7
Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtNDk3LDExICs0ODgsMTEgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNT
dGF0ZSYgc3RhdGUsIAogCiAgICAgT3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtUGFpcj4gcmVjb25j
aWxlZFJlc3VsdCA9IGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdvcml0
aG0uZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkpOwogICAgIGlmICghcmVjb25jaWxlZFJlc3VsdCkg
ewotICAgICAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJBbGdvcml0aG0gc3BlY2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJs
ZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0S2V5IGFzIGFyZ3VtZW50IikpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhbGdvcml0
aG0gPSByZWNvbmNpbGVkUmVzdWx0LT5hbGdvcml0aG07CkBAIC01MTMsMTUgKzUwNCwxNSBAQCBz
dGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgQVNTRVJUKHBhcmFt
ZXRlcnMpOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlRXh0cmFjdGFibGUoZXh0
cmFjdGFibGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxp
emF0aW9uLT5yZWNvbmNpbGVVc2FnZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byBrZXlEYXRhID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKQEAgLTUzOSw0NSArNTMwLDQ0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86Omlt
cG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9y
bWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRh
IGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21K
U1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9B
bGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cz4gcGFyYW1ldGVyczsKICAgICBpZiAoIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVs
bCgpKSB7CiAgICAgICAgIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0
YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmICghYWxnb3JpdGht
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCFhbGdv
cml0aG0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQorCiAg
ICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJz
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAK
ICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA+PSA0KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVz
YWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAg
IGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDQp
LCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTU5MCw3ICs1ODAsNyBAQCBKU1ZhbHVlIEpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoCiAgICAgfTsKIAogICAgIFdlYkNvcmU6OmltcG9y
dEtleShzdGF0ZSwga2V5Rm9ybWF0LCBkYXRhLCBXVEZNb3ZlKGFsZ29yaXRobSksIFdURk1vdmUo
cGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxi
YWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNl
KCk7CkBAIC02MTcsNyArNjA3LDcgQEAgc3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYg
c3RhdGUsIAogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SldLOiB7CiAgICAgICAg
IFN0cmluZyByZXN1bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgm
c3RhdGUsIGtleSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7
CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZmZXI7CkBAIC02NDAsMTAgKzYzMCwx
MCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAg
aWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCks
IGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRv
V3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC02
NTksNyArNjQ5LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KAog
ICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwg
V1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9t
aXNlRGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTY3NCwxMCArNjY0LDEwIEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZv
cm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9
IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5
Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTY5NCwxNiArNjg0LDE0IEBA
IEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICB9CiAKICAgICBh
dXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFw
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1l
dGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9t
aXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
JnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3Jh
cHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHBy
b21pc2VEZWZlcnJlZCk7CkBAIC03NDYsMTYgKzczNCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3Vi
dGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAg
IENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9t
SlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9L
ZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7
CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRv
T3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5RGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRh
dGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVk
S2V5RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBz
dWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5n
S2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7
CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQpAQCAtNzY4LDQ0ICs3NTYsNDEgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgIH0KIAogICAgIGF1dG8gdW53cmFw
QWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCB1bndyYXBBbGdvcml0aG0pOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAgYXV0byB1bndyYXBBbGdvcml0aG1Q
YXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJz
Rm9yRGVjcnlwdCgmc3RhdGUsIHVud3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJz
KSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNj
b3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgIGlmICgh
dW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gdW53cmFwcGVkS2V5QWxnb3Jp
dGhtOwogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiB1bndyYXBwZWRLZXlB
bGdvcml0aG1QYXJhbWV0ZXJzOwogICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCku
aXNOdWxsKCkpIHsKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtID0gY3JlYXRlQWxnb3Jp
dGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAg
ICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1
bndyYXBwZWRLZXlBbGdvcml0aG0pOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRo
bSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAg
ICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtl
eUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7Ci0g
ICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgICAgICBp
ZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUg
PSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsKICAgICAgICAg
ZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRl
KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpID49IDcpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNG
cm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwg
a2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3Mp
OworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVm
ZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkp
OwpAQCAtODE5LDExICs4MDQsMTUgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53
cmFwS2V5KAogICAgICAgICBhdXRvIGltcG9ydEZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgp
IG11dGFibGUgewogICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgICAg
ICB9OworCisgICAgICAgIFZNJiB2bSA9IGRvbUdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgICAgIEV4ZWNTdGF0
ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFdlYkNv
cmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQuZGF0
YSgpLCByZXN1bHQuc2l6ZSgpKSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCB1bndyYXBwZWRLZXlB
bGdvcml0aG1QYXJhbWV0ZXJzLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZNb3ZlKGltcG9y
dFN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlv
biBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNl
IHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8g
cHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICB3
cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZleGVjKSk7CiAKICAgICBTdHJpbmcgc2Ny
aXB0VVJMID0gZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygmZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAg
ICAgLy8gU2VlIHNlY3Rpb24gNC44LjIgc3RlcCAxNCBvZiBXZWJXb3JrZXJzIGZvciB3aHkgdGhp
cyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZp
c2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2Jh
bFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTMgKzYyLDE2IEBAIHZvaWQg
SlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEKIAogSlNWYWx1ZSBKU1dvcmtlckds
b2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICB1cmxzLmFw
cGVuZCh2YWx1ZVRvVVNWU3RyaW5nKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkp
KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtODcsNyArOTAsNyBAQCBKU1Zh
bHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQoCiAgICAgICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9
IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCks
IHdyYXBwZWQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4g
anNOdW1iZXIoMCk7CkBAIC0xMDQsNyArMTA3LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNj
b3BlOjpzZXRJbnRlcnZhbAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNl
Y3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBhdXRvIGZ1bmN0aW9uID0gb2JqZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsIHByb3BlcnR5TmFtZSkpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFmdW5jdGlvbi5pc0Z1bmN0
aW9uKCkpIHsKQEAgLTcwLDE5ICs3MCwyMyBAQCBKU0M6OkpTVmFsdWUgUmVhZGFibGVTdHJlYW1E
ZWZhdWx0Q29udHJvCiAKIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aXND
b250cm9sbGVkUmVhZGFibGVTdHJlYW1Mb2NrZWQoKSBjb25zdAogewotICAgIGF1dG8mIHN0YXRl
ID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jaygmc3RhdGUpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CisgICAg
YXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAgICAgYXV0byByZWFkYWJsZVN0cmVh
bSA9IG1fanNDb250cm9sbGVyLT5nZXQoJnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygp
LmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1lKCkpOwotICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNl
cHRpb24oKSk7CiAKLSAgICBhdXRvIGlzTG9ja2VkID0gZ2xvYmFsT2JqZWN0KCktPmJ1aWx0aW5J
bnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxl
U3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0KCk7CisgICAgYXV0byBpc0xvY2tlZCA9IGdsb2JhbE9i
amVjdC0+YnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHMo
KS5tX2lzUmVhZGFibGVTdHJlYW1Mb2NrZWRGdW5jdGlvbi5nZXQoKTsKIAogICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFi
bGVTdHJlYW0pOwogICAgIGF1dG8gcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHN0YXRlLCBpc0xvY2tl
ZCwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwotICAgIEFTU0VSVCghc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgcmV0
dXJuIHJlc3VsdC5pc1RydWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsMTIgQEAg
aW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBSZWFkYWJsZVN0cmVhbQogCiBpbmxpbmUgYm9vbCBS
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1ZXVlKFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyPiYmIGJ1ZmZlcikKIHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUgPSAqZ2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoJnN0
YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAg
IEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSA9ICpnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0p
OwogCiAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgZXJyb3Ioc3RhdGUsIGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoJnN0YXRlKSk7CkBAIC04NCw4ICs4OCw4IEBAIGlubGluZSBib29sIFJlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2wKICAgICBhdXRvIGxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpOwogICAgIGF1dG8gY2h1bmsgPSBKU0M6OlVpbnQ4QXJyYXk6OmNyZWF0ZShXVEZNb3Zl
KGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAgQVNTRVJUKGNodW5rKTsKLSAgICBlbnF1ZXVlKHN0
YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGNodW5rLmdldCgpKSk7Ci0gICAgQVNT
RVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgZW5xdWV1ZShzdGF0ZSwgdG9KUygmc3Rh
dGUsIGdsb2JhbE9iamVjdCwgY2h1bmsuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFjdGlvbjo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgRE9NV3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkLCBDb250
ZW50U2VjdXJpdHlQb2xpY3kqIHBvbGljeSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUg
diA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChn
ZXRDYWxsRGF0YSh2LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaWYg
KHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2YWwoZXhlYykpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHYudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+KG5ldyBTY2hl
ZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRlZFdvcmxkKSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNldChFeGVjU3RhdGUmIHNjcmlwdFN0
YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9udGVuZEhvc3QmIHZhbHVlKQogewog
ICAgIGF1dG8mIHZtID0gc2NyaXB0U3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8m
IGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9iamVjdC5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKSwgdG9KUygmc2NyaXB0U3RhdGUsICZnbG9i
YWxPYmplY3QsIHZhbHVlKSk7Ci0gICAgaWYgKHNjcmlwdFN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3RhdGUsIHNjcmlwdFN0YXRlLmV4Y2Vw
dGlvbigpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAg
IHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
cmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDcgKzM4OSw5IEBAIHByb3Rl
Y3RlZDoKIAogICAgIGJvb2wgc2hvdWxkVGVybWluYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOworICAgICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAg
cmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIHZvaWQgdGhyb3dTdGFja092
ZXJmbG93KCkKQEAgLTI0NDgsNiArMjQ1MCw5IEBAIHByaXZhdGU6CiAKIERlc2VyaWFsaXphdGlv
blJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3RvcjxJZGVu
dGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+
IG91dHB1dE9iamVjdFN0YWNrOwpAQCAtMjQ2OCw3ICsyNDczLDcgQEAgRGVzZXJpYWxpemF0aW9u
UmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkobV9leGVjLCAwLCBtX2dsb2JhbE9iamVjdCwgbGVuZ3RoKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsK
ICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dEFycmF5KTsKICAgICAgICAgICAgIG91
dHB1dE9iamVjdFN0YWNrLmFwcGVuZChvdXRBcnJheSk7CkBAIC0yNzA2LDEzICsyNzExLDE2IEBA
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4dFJl
ZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhvcmlnaW5Db250ZXh0KTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVy
IGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRvSlMoZXhlYywgYXBpVmFsdWUpOwog
ICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhj
ZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVm
KGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVChz
ZXJpYWxpemVkVmFsdWUpOwpAQCAtMjc0MSwxMiArMjc0OSwxNSBAQCBKU1ZhbHVlIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiBKU1ZhbHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmIGRlc3RpbmF0aW9uQ29udGV4dCwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoZGVzdGluYXRpb25D
b250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisg
ICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFs
aXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbnVsbHB0cik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9
IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBz
Y29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBBU1NFUlQodmFsdWUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgs
NyArMTI4LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVj
KCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywg
c291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmds
b2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCkBAIC0xNDQsOSArMTQ0LDEyIEBAIHZv
aWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUoY28KICAgICAgICAgU3RyaW5nIHNv
dXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7CiAgICAgICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIGVycm9yOwogICAgICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2Fu
aXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
c291cmNlVVJMLCBlcnJvciwgc291cmNlQ29kZS5jYWNoZWRTY3JpcHQoKSkpIHsKLSAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UuaW1wbCgpKSk7Ci0gICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHZtLmV4Y2Vw
dGlvbigpOwotICAgICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVh
dGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgc3Vi
IEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogICAgICAgICBteSAkbmVlZEV4
Y2VwdGlvbkNoZWNrID0gMDsKICAgICAgICAgZm9yZWFjaCBteSAkbWVtYmVyIChAeyRkaWN0aW9u
YXJ5LT5tZW1iZXJzfSkgewogICAgICAgICAgICAgaWYgKCRuZWVkRXhjZXB0aW9uQ2hlY2spIHsK
LSAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSlcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiI7CiAgICAgICAgICAgICAgICAgJHJlc3Vs
dCAuPSAiICAgICAgICByZXR1cm4gTnVsbG9wdDtcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0aGlzIHRvIHNoYXJlIGEgbG90
IG1vcmUgY29kZSB3aXRoIEpTVmFsdWVUb05hdGl2ZS4KQEAgLTMxMjcsNyArMzEyNyw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Iik7CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKSBpZiAhJGF0dHJp
YnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7
CkBAIC0zMjI1LDcgKzMyMjUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJl
dHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVl
KSkge1xuIik7CkBAIC0zMjM2LDcgKzMyMzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzk4Miw3ICszOTgyLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpCiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWZWN0b3I8JG5h
dGl2ZUVsZW1lbnRUeXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJndW1lbnRzPCRuYXRpdmVFbGVtZW50
VHlwZT4oKnN0YXRlLCAkYXJndW1lbnRJbmRleCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgk
bmFtZSkiOwpAQCAtNDAxNyw3ICs0MDE3LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRl
bnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZTwkY2xhc3NOYW1lPigqc3RhdGUsICR7
bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRl
bnQgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIk
aW5kZW50ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlmIChVTkxJS0VM
WSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRuYW1lXCIsIFwiJHZpc2libGVJbnRl
cmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKQEAgLTQwNDAsNyArNDA0MCw3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICRuYXRpdmVW
YWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgaWYgKFVOTElLRUxZKCEkbmFtZSkpXG4iKTsKQEAgLTQwODMsNyArNDA4Myw3IEBAIHN1YiBH
ZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIpOwogICAgICAg
ICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CiAgICAgICAgICAgICAgICAgaWYg
KCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NDY0LDcgKzQ0
NjQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01FeGNlcHRpb24oc3Rh
dGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAKICAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgIH0KIApAQCAtNTI3OCw3ICs1Mjc4
LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2ludGVyZmFjZU5hbWV9SW5pdCBldmVu
dEluaXQ7CkBAIC01Mjg3LDcgKzUyODcsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMg
eWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBp
bml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkp
OwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGlu
aXRpYWxpemVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUs
IGluaXRpYWxpemVyT2JqZWN0KTsKQEAgLTU0MzAsNyArNTQzMCw3IEBAIEVORAogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRl
Q29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yQ2Fs
bFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7Cisg
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
Iik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0
LDcgKzIyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXYKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwucG9zdE1lc3Nh
Z2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkocmV2
aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG8KICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbm90aGVyRnVuY3Rpb24oV1RG
TW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1Mzg5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRl
PD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0IGV2ZW50SW5pdDsKQEAg
LTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAog
ICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVj
dC4KICAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1
ZS50b09iamVjdChzdGF0ZSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICAv
LyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmpl
Y3QuCiAgICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KHN0YXRlLCBpbml0aWFsaXplck9i
amVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDIwNTM4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRh
cmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLml0ZW0oV1RGTW92
ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFJlZ3VsYXJBdHRyaWJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yODUsNyArMjg2LDcgQEAgYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRSZWd1bGFyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5Niw3ICsyOTcsOCBAQCBib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMDQsNyArMzA2LDcgQEAgYm9v
bCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNiw3ICszMTgsOCBA
QCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
MjQsNyArMzI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQ
cml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzM3LDcgKzM0MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
RW5hYmxlZEF0UnVudGkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NSw3ICszNDksNyBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcyLDcgKzM3Niw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmEKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZWd1bGFyT3BlcmF0aW9uKFdURk1vdmUodGVz
dFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2Jh
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5h
YmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00MTYsNyArNDIwLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5l
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2Uu
Y3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDEwICsy
MzEsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1
dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02NjMsOSArNjYzLDEw
IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW0KIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgVGVzdElu
dGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNjc4LDcgKzY3OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjIoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTY4Niw3ICs2ODgsNyBAQCBib29sIHNldEpTVGVz
dEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3ICs3MDEsOCBAQCBib29sIHNldEpTVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIzKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MTYsNyArNzE5LDggQEAgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzM5LDkgKzc0MywxMCBAQCBib29s
IHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRlc3RT
dXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzU0LDcgKzc1OSw4IEBAIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc2Miw3ICs3NjgsNyBAQCBib29sIHNl
dEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50
YWxTdHIyKGltcGwsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTc3NSw3ICs3ODEsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMo
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC03OTIsNyArNzk5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50
YWxOb2RlKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZh
Y2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtODUyLDcgKzg2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9i
akFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtOTMwLDcgKzkzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0
aW5Db25zdHJ1Y3RvclRlc3RBdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEzIEBAIHRlbXBsYXRlPD4gRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIg
PSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVs
dFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIp
LmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0g
VGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmNhc3RlZFRoaXMt
PmRvY3VtZW50KCksIFdURk1vdmUoc3RyMSksIFdURk1vdmUoc3RyMiksIFdURk1vdmUoc3RyMyks
IGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lv
biAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsOCBAQCBib29sIHNldEpT
VGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTIxNSw3ICsyMTYsNyBAQCBib29sIHNldEpTVGVz
dE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNp
b24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDgg
QEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
YyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNjksNyArMzcwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRO
b25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zODAsNyArMzgxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1p
bmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODgsNyArMzkwLDcgQEAgYm9v
bCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTksNyArNDAx
LDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MDcsNyArNDEwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTgsNyArNDIxLDggQEAgYm9vbCBzZXRKU1Rlc3RO
b25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MjcsNyArNDMx
LDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
LCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAko
cmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw5NyArNTI1LDk3IEBAIHRl
bXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4KICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0g
Y29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRo
b3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVs
dCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFs
dWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0IikpLCBUZXN0T2Jq
OjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKSwgImRlZmF1bHRTdHJpbmci
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxTdHJpbmc+KHN0
YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
c3RyaW5nV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKSwgZmFsc2UpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJv
b2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRo
b3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBOdWxsb3B0OwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0T3B0aW9uYWw8
VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3MiKSkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWRE
b3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRl
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSksIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlID0gY29udmVy
dE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9u
RmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnRP
cHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpLCBTaG91bGRB
bGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVs
dCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0
ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxs
b3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnRPcHRpb25h
bDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olll
cyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0Owog
ICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8Zmxv
YXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRl
OjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRp
b25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxv
d05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVnZXJDbGFtcGVkID0gY29udmVydE9w
dGlvbmFsPGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpLCBDbGFtcCk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21h
bGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50OF90PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50
ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbFVuc2lnbmVk
SW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0T3B0aW9uYWw8dWludDhfdD4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVu
c2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSksIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxV
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDx1aW50OF90PihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNt
YWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIGludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyIikpLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8
aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIHVuc2lnbmVkSW50ZWdlciA9IGNvbnZlcnRPcHRpb25hbDx1aW50MzJfdD4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25l
ZEludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhE
ZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBsYXJnZUludGVnZXIgPSBjb252
ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGludDY0X3Q+
KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2ln
bmVkTGFyZ2VJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnNpZ25lZExhcmdl
SW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVk
TGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvKiBu
dWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxl
Tm9kZSIpKSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBhbnlWYWx1ZSA9IGNvbnZlcnRPcHRpb25h
bDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGFueVR5
cGVkZWZWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZh
bHVlIikpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERp
Y3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KHN0YXRl
LCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGlj
dGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnkgeyBXVEZN
b3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25W
YWx1ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5n
RGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhv
dXREZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5X
aXRob3V0RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpLCBXVEZNb3ZlKHJlc3Ry
aWN0ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUocmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVm
YXVsdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWRGbG9h
dCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJp
Y3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlckNsYW1wZWQpLCBXVEZN
b3ZlKHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdl
ckVuZm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUo
dW5zaWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdU
Rk1vdmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdU
Rk1vdmUodW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2Vy
V2l0aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSksIFdURk1vdmUoYW55VmFsdWUpLCBX
VEZNb3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OwpAQCAt
NjMxLDEzICs2MzEsMTMgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5
VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byByZXF1aXJlZEVudW1l
cmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRW51bWVy
YXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlv
bmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byogbm9uTnVsbGFibGVO
b2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUi
KSksIElzTnVsbGFibGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSBjb252
ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1l
bWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9s
ZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJv
b2xlYW5XaXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVkRGljdGlvbmFy
eU1lbWJlci52YWx1ZSgpIH07CkBAIC02NTUsNyArNjU1LDcgQEAgdGVtcGxhdGU8PiBPcHRpb25h
bDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAg
ICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9
IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAg
cmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIHsgV1RGTW92
ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBA
IC02NzMsNyArNjczLDcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVEaWN0aW9uYXJ5
TgogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZh
bHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFs
dWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29s
PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIEFsdGVybmF0ZURpY3Rp
b25hcnlOYW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0
aG91dERlZmF1bHQpIH07CkBAIC0zMDkwLDkgKzMwOTAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
b25zdHJ1Y3RvclN0YXRpY1N0cmluZwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0T2JqOjpzZXRTdGF0aWNTdHJpbmdBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxMDMsNyArMzEw
NCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHQKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMTgsNyArMzEyMCw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMjYsNyArMzEyOSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
cGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0
aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTM5LDcgKzMxNDIsOCBAQCBi
b29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTQ3LDcgKzMxNTEsNyBAQCBib29s
IHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJ5dGVB
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNTgsNyAr
MzE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxNjYsNyArMzE3
MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zMTc3LDcgKzMxODIsOCBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3Rh
dGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMTg1LDcgKzMxOTEsNyBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUq
IHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtMzE5Niw3ICszMjAyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFt
cGVkU2hvcnRBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzIwNCw3ICszMjExLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVk
U2hvcnRBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwg
dmFsdWUsIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldENsYW1wZWRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIxNSw3ICszMjIyLDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIyMyw3ICszMjMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+
KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIzNCw3ICsz
MjQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjUwogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI0Miw3ICszMjUx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjUwogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMyNTMsNyArMzI2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIo
RXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTMyNjEsNyArMzI3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhl
Y1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNzIsNyArMzI4Miw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTMyODAsNyArMzI5MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
TG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ2NF90Pigq
c3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdMb25nQXR0cihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjkxLDcgKzMzMDIsOCBA
QCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjk5LDcgKzMzMTEsNyBAQCBi
b29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMzMxMCw3ICszMzIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4
ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzMxOCw3ICszMzMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNT
dGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRT
dHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMz
MjksNyArMzM0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzMzcs
NyArMzM1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VXN2c3Ry
aW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzQ4
LDcgKzMzNjIsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzY5LDcg
KzMzODQsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzkzLDcgKzM0
MDksOCBAQCBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDE0LDcgKzM0MzEs
OCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDIyLDcgKzM0NDAsNyBA
QCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcgKzM0NTEsOCBAQCBib29sIHNldEpT
VGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDQxLDcgKzM0NjAsNyBAQCBib29sIHNldEpTVGVz
dE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJp
bmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVc3ZzdHJp
bmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNDUyLDcgKzM0NzEsOCBAQCBib29sIHNldEpTVGVzdE9iaklt
cGxlbWVudGF0aW9uRW51bUF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNDYwLDcgKzM0ODAsNyBAQCBib29sIHNldEpTVGVzdE9iakltcGxl
bWVudGF0aW9uRW51bUF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1l
Pigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMzQ3Myw3ICszNDkzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpB
dHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzQ5NCw3ICszNTE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhl
Y1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzUwMiw3ICszNTI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0
YXRlKiBzdGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1MTMs
NyArMzUzNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1MjEsNyAr
MzU0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJB
dHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTMyLDcg
KzM1NTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTQwLDcgKzM1
NjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJp
bmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
MzU1MSw3ICszNTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIo
RQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU1
OSw3ICszNTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZs
ZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zNTcwLDcgKzM1OTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVu
c2lnbmVkSW50ZWdyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNTc4LDcgKzM2MDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2ln
bmVkSW50ZWdyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJD
b3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU4OSw3ICszNjE1LDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU5Nyw3ICszNjI0LDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzYwOCw3ICszNjM1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzYxNiw3ICszNjQ0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRVUkxBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM2MjcsNyArMzY1NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkVVNWVVJMQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM2MzUsNyArMzY2NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
VVNWVVJMQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNjQ2LDcgKzM2NzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNjU0LDcgKzM2ODQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFN0cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NjUsNyArMzY5NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM2NzMsNyArMzcwNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tSW50ZWdyYWwKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdl
YkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2ODQsNyArMzcxNSw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2OTIsNyArMzcyNCw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUu
dG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5h
bWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzAzLDcgKzM3MzUsOCBAQCBib29sIHNldEpTVGVzdE9i
alJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zNzExLDcgKzM3NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRN
TE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MjMsNyArMzc1Niw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
RW5hYmxlZEF0UnVudGltZUF0dHJpYnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM3MzEsNyArMzc2NSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5h
YmxlZEF0UnVudGltZUF0dHJpYnUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzQzLDcgKzM3NzcsOCBAQCBib29sIHNldEpTVGVz
dE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzUxLDcgKzM3ODYsNyBAQCBib29sIHNldEpTVGVzdE9i
alR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZh
bHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewogICAgICAgICB0aHJvd0F0dHJpYnV0
ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlB
dHRyIiwgIkZsb2F0MzJBcnJheSIpOwpAQCAtMzc2Niw3ICszODAxLDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc3NCw3ICszODEwLDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJF
eGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc4
NSw3ICszODIxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc5Myw3
ICszODMwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODA0LDcgKzM4NDEsOCBAQCBib29s
IHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODEzLDcgKzM4NTEsNyBAQCBib29sIHNl
dEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUp
LCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODI1LDcgKzM4NjMs
OCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODM0LDcgKzM4NzMsNyBA
QCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Ug
ZWM7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhN
ZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7CkBAIC0zODQ2LDcgKzM4ODUsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0
dHJXaXRoR2V0dGVyRXhjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zODU0LDcgKzM4OTQsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJX
aXRoR2V0dGVyRXhjCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjUsNyArMzkwNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM4NzQsNyArMzkxNSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3Ry
aW5nQXR0cldpdGhTZXR0ZXJFeGMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0
ZSwgZWMpOwpAQCAtMzg4Niw3ICszOTI3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRy
KEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzkwMSw3ICszOTQzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3Rh
dGUqIHN0YXRlLAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzkxNiw3ICszOTU5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVj
U3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzkzMSw3ICszOTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRy
aWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzkzOSw3ICszOTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1
dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzk1MCw3ICszOTk1LDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzk1OCw3ICs0MDA0LDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0
aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBhY3RpdmVET01XaW5k
b3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5NjksNyArNDAxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM5OTMsNyArNDA0MCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQwMTQsNyArNDA2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQwMzgsNyArNDA4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQwNjIsNyArNDExMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQwODYsNyArNDEzNyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQxMTAsNyArNDE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50
c0FuZEMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTQxMzIsNyArNDE4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVj
U3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQx
NDAsNyArNDE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3QK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNDE1Myw3ICs0MjA3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpD
b25kaXRpb25hbEF0dHIyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtNDE2MSw3ICs0MjE2LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25k
aXRpb25hbEF0dHIyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTc0LDcgKzQyMjksOCBA
QCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MTgyLDcgKzQyMzgsNyBAQCBi
b29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRD
b25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQxOTUsNyArNDI1MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENv
bnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTQyMTIsNyArNDI2OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0
cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQy
MjksNyArNDI4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnUK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNDUs
NyArNDMwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSoKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNjIsNyAr
NDMyMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSoKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyODYsNyArNDM0
Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXQKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTAsNyArNDM3Miw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTgsNyArNDM4MSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MzI5LDcgKzQzOTIsOCBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVu
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzM3
LDcgKzQ0MDEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC00MzQ4LDcgKzQ0MTIsOCBAQCBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmli
dXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC00MzYzLDcgKzQ0MjgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxl
QXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00
MzcxLDcgKzQ0MzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzgyLDcgKzQ0NDgsOCBAQCBib29s
IHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzkwLDcgKzQ0NTcsNyBAQCBib29sIHNl
dEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxh
YmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtNDQwMSw3ICs0NDY4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJs
ZVVTVlN0cmluZ1NldHRhYgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtNDQwOSw3ICs0NDc3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVT
VlN0cmluZ1NldHRhYgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZVVTVlN0cmluZ1NldHRh
YmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTQ0MjAsNyArNDQ4OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShF
eGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0
MjgsNyArNDQ5Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGUK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQzOSw3ICs0NTA4LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3ICs0NTE3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpB
dHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRp
b25hbD4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ0NjAsNyArNDUzMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0
Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQ0NjksNyArNDU0MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9y
d2FyZHNBdHRyaWJ1dGUoRXgKICAgICBSZWY8VGVzdE5vZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKICAgICBhdXRvJiBpbXBs
ID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC00NDgwLDcgKzQ1NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialB1dEZv
cndhcmRzTnVsbGFibGVBdHRyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC00NDkxLDcgKzQ1NjMsNyBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndh
cmRzTnVsbGFibGVBdHRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBpbXBsID0g
KmZvcndhcmRlZEltcGw7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNDUwMiw3ICs0NTc0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0
dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtNDUxMCw3ICs0NTgzLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJp
YnV0ZShFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC00NTQ2LDcgKzQ2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00NTY5LDcg
KzQ2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFy
YW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDYy
NywxMCArNDcwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpB
cmcpKQpAQCAtNDY2OCwxMCArNDc0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAz
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJ5dGVBcmcgPSBjb252
ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgx
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJn
ID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5M
SUtFTFkoIW9iakFyZykpCkBAIC00NzA5LDEwICs0NzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2N0
ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc1MCwxMCArNDgyMywxMCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5h
cmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc5MSwxMCArNDg2
NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFw
cGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAt
NDgzMiw3ICs0OTA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSB2YWx1ZVRvU3RyaW5nVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC00ODUyLDcgKzQ5MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlc29sdmVyID0gSlNYUGF0
aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZXIpKQogICAgICAgICByZXR1
cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJyZXNvbHZl
ciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAi
WFBhdGhOU1Jlc29sdmVyIik7CkBAIC00ODk4LDcgKzQ5NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGlu
ZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
U3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZN
b3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTQ5
MjAsNyArNDk5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBUZXN0T2Jq
OjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RP
Ymo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVudW1BcmciLCAi
VGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk0NCw3ICs1MDE3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIE9wdGlvbmFsPFRlc3RPYmo6OkVu
dW1UeXBlPiBlbnVtQXJnOwogICAgIGlmICghZW51bUFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgZW51bUFyZyA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1B
cmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5M
SUtFTFkoIWVudW1BcmcpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVF
bnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0Iiwg
Im1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRl
c3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5NzAsNyArNTA0Myw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgZW51bUFyZyA9IFRlc3RPYmo6OkVu
dW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gb3B0aW9uYWxW
YWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9wdGlv
bmFsVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5OTUsNyArNTA2OCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0ckFyZyA9IHN0
YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEp
KTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC01MDIwLDcgKzUwOTMsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZyhX
VEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC01MDQwLDcgKzUxMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJn
KFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTUwNjAsNyArNTEzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0
cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA4MCw3ICs1MTUzLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2Vy
aWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTc5LDcgKzUyNTIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTE5OSw3ICs1MjcyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUo
c3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTUyMTksMTMgKzUyOTIsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0
ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJy
ZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAgICAg
cmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlz
dGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIi
KTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hZGRFdmVudExpc3RlbmVyKFdURk1v
dmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyNDUsMTMgKzUzMTgsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIi
LCAiVGVzdE9iamVjdCIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsK
ICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKFdURk1v
dmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyODQsNyArNTM1Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlT2JqKCpz
dGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC01MzIxLDcgKzUzOTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0
YXRlLCBlYykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTUzODAs
NyArNTQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRp
b24oKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwg
ZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CiB9CkBAIC01NDAwLDcgKzU0NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAqY29udGV4dCkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDg2
LDcgKzU1NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9w
dCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC01NTA0LDcgKzU1NzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gNjY2IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUob3B0KSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MjQsMTAgKzU1OTcs
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFs
PGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKG5vbk9wdCks
IFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU1NDcsMTMgKzU2MjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFs
QXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSksIFdURk1vdmUob3B0MikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTcxLDcgKzU2NDQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRl
LT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTg5LDcgKzU2NjIsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NjA3LDcgKzU2ODAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nKFdURk1vdmUoc3Ry
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2MjUs
NyArNTY5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImZvbyIp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0
VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNTY0Myw3ICs1NzE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEF0
b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFs
QXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NjEsNyArNTczNCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NzksNyArNTc1Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Njk3LDcgKzU3NzAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKFdURk1v
dmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU3MTUsNyArNTc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3Ry
aW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTU3MzMsNyArNTgwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpT
VGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0
eVN0cmluZygpIDogdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxV
U1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NTEsNyArNTgyNCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZN
b3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC01NzY5LDcgKzU4NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6
OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG51bWJlciA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTc4Nyw3ICs1ODYwLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0
PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6
Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRmxv
YXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC01ODA1LDcgKzU4NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8aW50NjRfdD4oKnN0YXRlLCBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKFdURk1vdmUobnVtYmVy
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MjMs
NyArNTg5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVt
YmVyID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg0MSw3ICs1OTE0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1aW50NjRfdD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9u
Z0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtNTg1OSw3ICs1OTMyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51
bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
ODc3LDcgKzU5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxWZWN0
b3I8U3RyaW5nPj4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODk1LDcgKzU5NjgsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpz
dGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoV1RGTW92ZShhcnJheSkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTEzLDcg
KzU5ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIgPSBz
dGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGJvb2w+KCkgOiBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKFdURk1vdmUoYikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTMxLDcgKzYwMDQs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+
YXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShXVEZNb3ZlKGIpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjAwOSw3ICs2MDgyLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIFJlZlB0cjxYUGF0
aE5TUmVzb2x2ZXI+IHJlc29sdmVyID0gbnVsbHB0cjsKICAgICBpZiAoIXN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIHJlc29sdmVyID0gSlNYUGF0aE5T
UmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXJl
c29sdmVyKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9w
dGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOwpAQCAtNjA1Miw3ICs2
MTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKQEAgLTYxMTYsNyArNjE4OSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwg
ImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2Fs
bGJhY2tGdW5jdGlvbkFyZyIpOwpAQCAtNjI0OSw3ICs2MzIyLDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gc3RyQXJn
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShz
dHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NjI3NSw3ICs2MzQ4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJU
ZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcp
LCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNjI5NSw3ICs2MzY4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjMxNSw3ICs2Mzg4LDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjM3OCw3ICs2NDUxLDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBh
cnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3Zl
KGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTY0MTgsNyArNjQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFy
cmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDM4LDcgKzY1MTEsNyBA
QCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDU4LDcgKzY1MzEsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0
ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NTQ2LDcgKzY2MTks
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IG51bGxw
dHI7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgewpA
QCAtNjU3OCw3ICs2NjUxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdp
dGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0Fy
ZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2Fk
ZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxv
bmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NjYyNCw3ICs2Njk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpD
bwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgw
KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6
OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJnKSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY2NDksNyArNjcyMiw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRN
ZXRob2QxKFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTY2NjYsNyArNjczOSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUodHlwZSkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzA5LDEwICs2NzgyLDEwIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpB
cmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBD
bGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAo
V1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3MzIsMTAgKzY4MDUsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNsYXNz
TWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2Jq
QXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNjc1NSw3ICs2ODI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9
IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2Uo
V1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Nzc2LDcgKzY4NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5
PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwog
CkBAIC02ODIxLDEwICs2ODk0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2
ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMy
X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoV1RGTW92ZShhcnJheUFy
ZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC02ODQ0LDcgKzY5MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGVs
ZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUp
LT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjkyNyw3ICs3MDAwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDMoV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02OTQ3LDcgKzcwMjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5jb252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTcwMTIsMTAgKzcwODUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFk
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPFN0cmluZz4o
KnN0YXRlLCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52YXJpYWRpY1N0cmluZ01l
dGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzAzNSwxMCArNzEwOCwxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGhlYWQgPSBjb252ZXJ0PGRvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8
ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91YmxlPigqc3RhdGUsIDEpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKFdURk1vdmUoaGVh
ZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC03MDg3LDEwICs3MTYwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8
ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6
WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBiID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUoYikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MTM3LDcgKzcyMTAsNyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoV1RGTW92ZShhKSwgRGVmZXJy
ZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9t
aXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNzE4NCw3ICs3MjU3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxp
bnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
dGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KFdURk1vdmUoYSksIERl
ZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
cHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTcyMTAsNyArNzI4Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8Zmxv
YXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0
aW9uKFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlz
LT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczMjQsNyArNzM5Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczNDcsNyArNzQy
MCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczOTAsNyArNzQ2Myw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3Ry
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0MTEs
NyArNzQ4NCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0NTAsNyArNzUyMyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gaW5pdCA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25h
cnk+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5hdHRhY2hTaGFkb3dSb290KGluaXQudmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QnVm
ZmVyID0gdG9BcnJheUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAi
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsKQEAg
LTkzLDcgKzkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVm
ZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWFycmF5QnVmZmVyVmlldykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsKQEAg
LTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpT
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0
ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpAQCAtMTQxLDcgKzE0MSw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rv
cio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIFZlY3Rv
cjxpbnQzMl90PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1lbnRzPGludDMyX3Q+KCpzdGF0ZSwg
MCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdzKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAy
MDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwog
ICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQo
Y2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IHN0YXRlLT5hcmd1bWVu
dCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4oKSA6IHRvTmF0aXZlQXJyYXk8U3Ry
aW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVp
bHRpbnMuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMCw3ICsyMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92
ZXJyCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm5hbWVk
SXRlbShXVEZNb3ZlKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDggQEAgYm9vbCBzZXRKU1Rlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMjU5LDcgKzI2MCw3IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3MCw3ICsyNzEsOCBAQCBib29sIHNldEpTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0yNzgsNyArMjgwLDcgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShy
ZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAg
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBoZWxsbyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50
KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBl
ZGVmcyIsIG51bGxwdHIpOwpAQCAtMzYwLDcgKzM2MCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNVbnNpZ25lZExvbmdMb25nQXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjgsNyArMzY5LDcgQEAgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90
Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xv
bmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3OSw3
ICszODAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVm
cyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
Mzg3LDcgKzM4OSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemUK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVl
LCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTgsNyArNDAwLDggQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNiw3ICs0MDksNyBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC00MTcsNyArNDIwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRo
U2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVk
ZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQyNiw3ICs0MzAsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0
cldpdGhTZXR0ZXJFeGNlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJX
aXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9N
RXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00MzgsNyArNDQyLDggQEAgYm9vbCBzZXRKU1Rlc3RU
eXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0Niw3ICs0NTEsNyBAQCBib29sIHNldEpT
VGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1Nyw3ICs0NjIsOCBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDY2LDcgKzQ3Miw3
IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHQKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRT
dHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtNDkxLDcgKzQ5Nyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byB4ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8aW50MzJfdD4oKSA6IHRvTmF0aXZlQXJyYXk8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxMSwxOSArNTE3LDE5IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gaGVp
Z2h0ID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGJsdXIgPSBj
b252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgyKSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gY29sb3IgPSBzdGF0ZS0+
YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Zmxv
YXQ+KCkgOiBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCg0
KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwuc2V0U2hhZG93KFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCksIFdURk1vdmUoYmx1
ciksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKGFscGhhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU0Myw3ICs1NDksNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUs
IEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRo
b2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01NjMsNyArNTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBz
ZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhX
VEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTU4MywxMCArNTg5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnMSA9IGNvbnZl
cnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYyMiw3ICs2MjgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1
ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RG
TW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02NDUsNyArNjUxLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJh
eTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVj
KSk7CiAKQEAgLTY2Nyw3ICs2NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9S
ZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNCb29sZWFuKGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1
ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9u
IDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsMTIgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQ
LCBOUE9iamVjdCogbwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlz
VmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAg
Ly8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
b2JqLT5pbXA7CkBAIC0xOTMsNyArMTk3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQ
LCBOUE9iamVjdCogbwogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0
IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChl
eGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsgICAg
ICAgIAogICAgIH0KIApAQCAtMjI1LDggKzIyOSwxMyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBu
cHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmot
PnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNW
YWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
b2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMjQwLDcgKzI0
OSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KIAogICAgICAg
ICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4K
ICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNjAsMTQgKzI2OSwx
OCBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywgTlBTCiAgICAgICAgIGlm
ICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
OworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYx
NihzKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1
YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uo
c2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZh
bHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6
SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1
cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjg0LDEwICsyOTcsMTQgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmpl
Y3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJ
ZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAg
SlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAg
cmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihl
eGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMjk1LDcgKzMxMiw3IEBAIGJvb2wgX05QTl9HZXRQcm9w
ZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5n
ZXQoZXhlYywgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50
KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMzE4LDggKzMzNSwxMiBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBO
UE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNW
YWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAg
IEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0g
c3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYg
KGktPmlzU3RyaW5nKCkpIHsKQEAgLTMyNyw3ICszNDgsNyBAQCBib29sIF9OUE5fU2V0UHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUo
KS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBp
LT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RP
YmplY3QpLCBzbG90KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0
aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCksIGNvbnZl
cnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzQ2LDI3ICszNjcsMzIg
QEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICBpZiAo
IXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBz
dGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGkt
PmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSkpIHsKLSAg
ICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+
aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBpZiAoaS0+aXNT
dHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+
c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCkp
OwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zODEsMTcgKzQwNywyMSBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9i
amVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxp
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1
dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
IElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlO
YW1lKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5p
c1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9w
ZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkp
OwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+
bnVtYmVyKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAt
NDE0LDEwICs0NDQsMTQgQEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBO
UAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChl
eGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgCkBA
IC00NDMsOCArNDc3LDEyIEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywg
TlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKIAogICAgICAgICBv
YmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtNDU4LDcgKzQ5Niw3IEBAIGJv
b2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgKmlkZW50aWZp
ZXIgPSBpZGVudGlmaWVyczsKICAgICAgICAgKmNvdW50ID0gc2l6ZTsKIAotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC00NzksOSArNTE3LDEzIEBAIGJvb2wg
X05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8
ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAg
ICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAg
ICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkBAIC00OTYsNyArNTM4LDcgQEAgYm9v
bCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjbwogICAgICAgICAKICAgICAgICAg
Ly8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRv
TlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDEzIEBAIHZvaWQgQ0luc3Rh
bmNlOjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW4KIAogdm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9i
YWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
ICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICB0aHJvd0V4
Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3Ry
aW5nKCkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNj
cmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
NyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8aW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0NhdGNoU2NvcGUuaD4KICNpbXBvcnQg
PHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC0xMjksOCArMTMw
LDEwIEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGlj
IHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6
OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNlcHRpb24pOwogfQogCkBAIC0zMzQs
OSArMzM3LDEyIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4K
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBf
cm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKIAogICAgIEpTQzo6SlNW
YWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTM2
OSwxMCArMzc1LDEyIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkK
ICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogICAg
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgCiAgICAg
SlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpwcm9maWxl
ZEV2YWx1YXRlKGV4ZWMsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgbWFrZVNvdXJjZShT
dHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIApAQCAtMzg2LDE3ICszOTQsMTkgQEAg
LSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIGlmICghW3NlbGYg
X2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBB
U1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtz
ZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihbc2VsZiBf
aW1wXSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKICAgICBvYmplY3QtPm1l
dGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9i
amNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKIAotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0K
IH0KIApAQCAtNDA1LDIyICs0MTUsMjUgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICop
a2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQog
ICAgIGlkIHJlc3VsdE9iajsKICAgICB7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxvY2sgdG8g
ZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICAv
LyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24g
YW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZpbmcgdGhl
IGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
LSAgICAgICAgCisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIEpTQzo6SlNWYWx1ZSBy
ZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAg
ICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQg
PSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KIAogICAgICAgICBy
ZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1
bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpb
c2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNDM3LDE1ICs0NTAsMTcgQEAgLSAodm9pZClyZW1vdmVX
ZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0p
CiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0
XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5t
ZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkBA
IC00NTQsMTUgKzQ2OSwxNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJpbmcgKilr
ZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gTk87CiAK
LSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
YXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOwor
ICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9w
ZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkwLDE2ICs1MDcsMTggQEAg
LSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIGlmICghW3NlbGYg
X2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3Qg
PSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7
CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsK
ICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBp
ZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpy
ZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVj
dDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNTEyLDE1ICs1MzEsMTcgQEAgLSAodm9pZClzZXRX
ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlw
dF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2Jq
ZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBd
LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29u
dmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYg
X3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNl
cHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5z
aW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUlXaXRoTm9VcHBlcgog
ICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhl
YywgY29uc3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQog
eworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQodmVjdG9yLmlzRW1wdHkoKSk7CiAgICAgaWYgKCFh
cnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIENv
bnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwpAQCAtNzEsNyArNzQs
NyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdl
dEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZh
bHVlLmlzU3RyaW5nKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUu
aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAgICAgCiAgICAgICAgIC8vIERvbWFpbnMgc2hvdWxk
IGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KQEAgLTg3LDExICs5MCwxNCBAQCBzdGF0
aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAKIHN0YXRpYyBzdGQ6OmVycm9y
X2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZh
bHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0
IFN0cmluZyYpKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXR5cGVWYWx1ZS5pc09iamVjdCgp
KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgSlNPYmplY3QqIG9iamVjdCA9IHR5
cGVWYWx1ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIWlzSlNBcnJheShv
YmplY3QpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxp
ZFRyaWdnZXJGbGFnc0FycmF5OwogCkBAIC0xMDAsNyArMTA2LDcgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0g
ICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5UcmlnZ2VyRmxhZ3NBcnJheTsKICAgICAg
ICAgCiAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAt
MTE2LDEyICsxMjIsMTUgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhl
YwogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQogeworICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBjb25zdCBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInRyaWdnZXIiKSk7Ci0gICAg
aWYgKCF0cmlnZ2VyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmpl
Y3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9u
KCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyOwogICAgIAogICAgIGNvbnN0IEpTVmFs
dWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOwotICAgIGlmICghdXJsRmlsdGVyT2Jq
ZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygp
KQorICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF1cmxG
aWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXI7CiAKICAgICBTdHJpbmcgdXJsRmls
dGVyID0gdXJsRmlsdGVyT2JqZWN0LnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTEzMSwxMSArMTQw
LDExIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICB0cmln
Z2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsKIAogICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVy
Q2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOwotICAgIGlmICh1cmxG
aWx0ZXJDYXNlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZh
bHVlLmlzQm9vbGVhbigpKQorICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4
Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgdHJp
Z2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgPSB1cmxGaWx0ZXJDYXNlVmFsdWUudG9Cb29s
ZWFuKCZleGVjKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmln
Z2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInJlc291
cmNlLXR5cGUiKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlw
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJlc291
cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9
IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVh
ZFJlc291cmNlVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKICAgICAgICAgICAg
IHJldHVybiB0eXBlRmxhZ3NFcnJvcjsKQEAgLTE0Myw3ICsxNTIsNyBAQCBzdGF0aWMgc3RkOjpl
cnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CiAKICAgICBjb25zdCBKU1Zh
bHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlwZSIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0
aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNl
cHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBl
RmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZs
YWdzLCByZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCiAgICAgICAg
ICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNTEsNyArMTYwLDcgQEAgc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICByZXR1cm4gQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCiAgICAgY29uc3Qg
SlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRp
b24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24o
KSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1dG8gaWZEb21haW5FcnJvciA9
IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QoaWZEb21haW4pLCB0cmlnZ2VyLmRvbWFpbnMp
OwogICAgICAgICBpZiAoaWZEb21haW5FcnJvcikKICAgICAgICAgICAgIHJldHVybiBpZkRvbWFp
bkVycm9yOwpAQCAtMTYzLDcgKzE3Miw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRy
aWdnZXIoRXhlY1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTklu
dmFsaWREb21haW5MaXN0OwogICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluID0g
dHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1
bmxlc3MtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1bmxlc3NE
b21haW4uaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNz
RG9tYWluLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9u
ICE9IFRyaWdnZXI6OkRvbWFpbkNvbmRpdGlvbjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Vbmxlc3NBbmRJZkRvbWFpbjsKICAgICAgICAgYXV0
byB1bmxlc3NEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QodW5sZXNz
RG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsKQEAgLTE4OSwxMyArMTk4LDE2IEBAIHN0YXRpYyBi
b29sIGlzVmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcKIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmplY3Qs
IEFjdGlvbiYgYWN0aW9uLCBib29sJiB2YWxpZFNlbGVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4
ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICB2YWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICBjb25zdCBKU1ZhbHVlIGFjdGlvbk9iamVjdCA9
IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiYWN0
aW9uIikpOwotICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwg
IWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IHNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb247CiAKICAgICBjb25zdCBK
U1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAidHlwZSIpKTsKLSAgICBpZiAoIXR5cGVPYmplY3QgfHwgZXhlYy5o
YWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlmICghdHlwZU9i
amVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGU7
CiAKICAgICBTdHJpbmcgYWN0aW9uVHlwZSA9IHR5cGVPYmplY3QudG9XVEZTdHJpbmcoJmV4ZWMp
OwpAQCAtMjA4LDcgKzIyMCw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEFjdGlvbihF
eGVjU3QKICAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOwogICAgIGVs
c2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7CiAgICAgICAgIEpTVmFs
dWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlmICghc2VsZWN0b3IgfHwgZXhlYy5o
YWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKCFzZWxl
Y3RvciB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKICAgICAg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxh
eU5vbmVBY3Rpb25UeXBlOwogCiAgICAgICAgIFN0cmluZyBzID0gc2VsZWN0b3IudG9XVEZTdHJp
bmcoJmV4ZWMpOwpAQCAtMjQ2LDE3ICsyNTgsMjAgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBs
b2FkUnVsZShFeGVjU3RhdAogCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVs
ZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1bGVzLCBWZWN0b3I8Q29udGVudEV4
dGVuc2lvblJ1bGU+JiBydWxlTGlzdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRklYTUU6IEpT
T05QYXJzZSBzaG91bGQgcmVxdWlyZSBjYWxsYmFja3MgaW5zdGVhZCBvZiBhbiBFeGVjU3RhdGUu
CiAgICAgY29uc3QgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBKU09OUGFyc2UoJmV4ZWMsIHJ1bGVz
KTsKIAotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCisgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCiAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkOwogCiAgICAgaWYgKCFkZWNvZGVkUnVs
ZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CiAKICAgICBjb25zdCBKU09iamVjdCogdG9w
TGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3QoJmV4ZWMpOwotICAgIGlmICghdG9w
TGV2ZWxPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIXRvcExldmVsT2Jq
ZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbk9iamVjdDsKICAgICAKICAgICBpZiAo
IWlzSlNBcnJheSh0b3BMZXZlbE9iamVjdCkpCkBAIC0yNzIsMTEgKzI4NywxMSBAQCBzdGF0aWMg
c3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoCiAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub29NYW55UnVsZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSB0b3BM
ZXZlbEFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1
ZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
T2JqZWN0SW5Ub3BMZXZlbEFycmF5OwogCiAgICAgICAgIGNvbnN0IEpTT2JqZWN0KiBydWxlT2Jq
ZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoIXJ1bGVPYmplY3QgfHwg
ZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFydWxlT2JqZWN0IHx8IHNjb3BlLmV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRSdWxlOwogCiAgICAgICAgIGF1dG8gZXJyb3IgPSBsb2FkUnVsZShleGVjLCAqcnVs
ZU9iamVjdCwgbG9jYWxSdWxlTGlzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MjEsNiArMzkyMSw4IEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKIAogc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWEpCiB7CisgICAg
SlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byBtZWRpYUpTV3JhcHBlciA9IHRvSlMoJmV4ZWMs
ICZnbG9iYWxPYmplY3QsIG1lZGlhKTsKICAgICAKICAgICAvLyBSZXRyaWV2ZSB0aGUgY29udHJv
bGxlciB0aHJvdWdoIHRoZSBKUyBvYmplY3QgZ3JhcGgKQEAgLTM5MjgsMTggKzM5MzAsMTggQEAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKUwogICAgIGlmICghbWVkaWFK
U1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogICAgIAotICAg
IEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMudm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250
cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbHNIb3N0
Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IG1lZGlhSlNXcmFw
cGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sc0hvc3RK
U1dyYXBwZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KGNvbnRy
b2xzSG9zdEpTV3JhcHBlcik7CiAgICAgaWYgKCFjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3Qp
CiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0gICAgSlNDOjpJZGVudGlmaWVyIGNv
bnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52bSgpLCAiY29u
dHJvbGxlciIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQgPSBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbGxlciIpOwogICAgIEpTQzo6SlNWYWx1ZSBj
b250cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4
ZWMsIGNvbnRyb2xsZXJJRCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7CiAKICAgICByZXR1cm4gY29udHJvbGxlckpTV3JhcHBlcjsKQEAgLTM5NzYsOCArMzk3OCwx
MCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250CiAKICAgICBTY3Jp
cHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3Jp
cHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkp
OworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUg
Y29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmplY3Qs
ICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5
bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwpAQCAtNDAwMiw3ICs0
MDA2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udAogCiAgICAg
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBub0FyZ3VtZW50czsKICAgICBKU0M6OmNhbGwoZXhl
YywgbWV0aG9kT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnRyb2xsZXJPYmplY3QsIG5v
QXJndW1lbnRzKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAKICAgICBtX2hhdmVTZXRVcENhcHRpb25Db250YWluZXIgPSB0cnVlOwog
I2VuZGlmCkBAIC02NTE3LDggKzY1MjEsMTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbnN1
cmVNZWRpYUNvbnRybwogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBlbnN1cmVJc29sYXRl
ZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5n
bG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVj
LCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOwog
ICAgIGlmIChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkKQEAgLTY1MzEsOCArNjUzNyw4IEBA
IGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBVUkwgc2NyaXB0
VVJMOwogI2VuZGlmCiAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0
U291cmNlQ29kZShtZWRpYUNvbnRyb2xzU2NyaXB0LCBzY3JpcHRVUkwpLCB3b3JsZCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02
NTkwLDggKzY1OTYsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCku
ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxP
YmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
Ly8gVGhlIG1lZGlhIGNvbnRyb2xzIHNjcmlwdCBtdXN0IHByb3ZpZGUgYSBtZXRob2Qgd2l0aCB0
aGUgZm9sbG93aW5nIGRldGFpbHMuCiAgICAgLy8gTmFtZTogY3JlYXRlQ29udHJvbHMKQEAgLTY2
MTgsMjEgKzY2MjYsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRT
aAogICAgIGFyZ0xpc3QuYXBwZW5kKG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVyKTsKIAogICAg
IEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsK
LSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rp
b24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IEpT
Qzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3Qs
IGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpq
c0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwogICAgIGlmICgh
Y29udHJvbGxlck9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29ubmVjdCB0aGUg
TWVkaWEsIE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250cm9sbGVyIHNvIHRoZSBHQyBrbm93
cyBhYm91dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICBKU0M6OkpTT2JqZWN0KiBtZWRpYUpTV3Jh
cHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMtPnZtKCksICJjb250cm9sc0hvc3QiKTsKICAgICAKICAgICBBU1NFUlQoIW1l
ZGlhSlNXcmFwcGVyT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBjb250cm9sc0hvc3QpKTsKQEAg
LTY2NTIsOCArNjY2MCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50
U2gKICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JKU1Byb3BlcnR5KCk7CiAgICAgdXBkYXRlVXNl
c0xUUlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25KU1Byb3BlcnR5KCk7CiAKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNZWRpYUNvbnRyb2xz
RGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRzT25QYWdlU2NhbGUpCkBAIC02Njg4
LDIxICs2Njk2LDIzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm8K
ICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAg
IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCkt
PnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdv
cmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNW
YWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9i
amVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250
cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVQcmVzZW50
YXRpb25Nb2RlQ2hhbmdlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5j
dGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50
b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwog
ICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpD
YWxsVHlwZTo6Tm9uZSkKQEAgLTY3MjksMjEgKzY3MzksMjMgQEAgU3RyaW5nIEhUTUxNZWRpYUVs
ZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29u
dHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2Ny
aXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRy
b2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09i
amVjdCogY29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdChleGVjKTsK
IAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIEpTQzo6
SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5j
dGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAg
SlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxs
RGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
YXJnTGlzdDsKQEAgLTY3NTIsNyArNjc2NCw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50Ojpn
ZXRDdXJyZW50TWVkaWEKIAogICAgIEpTQzo6SlNWYWx1ZSBvdXRwdXRWYWx1ZSA9IEpTQzo6Y2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBh
cmdMaXN0KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAog
ICAgIHJldHVybiBvdXRwdXRWYWx1ZS5nZXRTdHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTM4
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5Miw5ICszOTIsMTEgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50OjpkaWRBZGRVc2VyQQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3QoaXNvbGF0ZWRXb3JsZCkpOwotICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0
OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CkBA
IC00MDgsOCArNDEwLDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2Vy
QQogICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoZSBKUyBmaWxlIHByb3ZpZGVzIGEgY3JlYXRlT3Zl
cmxheShzaGFkb3dSb290LCB0aXRsZSwgc3VidGl0bGUpIGZ1bmN0aW9uLgogICAgIEpTQzo6SlNP
YmplY3QqIG92ZXJsYXkgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZU92ZXJsYXkiKSkudG9PYmplY3QoZXhlYyk7CiAgICAg
aWYgKCFvdmVybGF5KSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNl
cHRpb24oKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQxOCw3ICs0MjAsNyBA
QCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEpTQzo6Y2FsbChleGVjLCBvdmVybGF5LCBjYWxsVHlwZSwgY2FsbERhdGEsIGds
b2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OnBhcnRPZlNuYXBzaG90T3ZlcmxheShjb25zdCBOb2RlKiBub2RlKSBjb25zdApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsMTAgKzEwMSwxMiBAQCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIg
CiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9t
SWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7ICAgIAotICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIHJldHVybiBnZXRDYWxsRGF0YSh2YWx1ZSwgY2FsbERhdGEpICE9IENh
bGxUeXBlOjpOb25lOwpAQCAtMTQ3LDcgKzE0OSw5IEBAIGJvb2wgTlBKU09iamVjdDo6aGFzUHJv
cGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmll
clJlcC0+aXNTdHJpbmcoKSkKQEAgLTE1NSw3ICsxNTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omhh
c1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBtX2pzT2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CiAKLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTY3LDcgKzE3MSwxMCBAQCBib29sIE5QSlNPYmplY3Q6
OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGpzUmVzdWx0OwogICAgIGlmIChp
ZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQogICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3Qt
PmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJl
cCkpOwpAQCAtMTc1LDcgKzE4Miw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJ
ZGVudGlmaWUKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRp
ZmllclJlcC0+bnVtYmVyKCkpOwogICAgIAogICAgIG1fb2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1
ZVRvTlBWYXJpYW50KGV4ZWMsIGpzUmVzdWx0LCAqcmVzdWx0KTsKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE4Nyw3ICsxOTQsOSBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5Q
SWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnRO
UFZhcmlhbnRUb0pTVmFsdWUoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCAqdmFs
dWUpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CkBAIC0xOTUsNyArMjA0
LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgICAgICBt
X2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRl
bnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApLCBqc1ZhbHVlLCBz
bG90KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0
QnlJbmRleChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwg
anNWYWx1ZSwgZmFsc2UpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOCwyNiAr
MjE3LDI5IEBAIGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBp
ZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIGlm
IChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRl
bnRpZmllcikpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50
aWZpZXJSZXAtPm51bWJlcigpKSkgewotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgp
LT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmll
clJlcC0+bnVtYmVyKCkpOwogICAgIH0KIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU5
LDcgKzI3MSw5IEBAIGJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWEKICAg
ICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVj
dFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEp
OwpAQCAtMjc1LDEzICsyODksMTYgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3Qg
TlBWYXJpYQogICAgIAogICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgbmV3IG9iamVjdC4K
ICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwg
KnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aW52
b2tlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50
Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKQEAgLTI5Niw3
ICszMTMsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsCiAKICAg
ICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4K
ICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwg
KnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMjA1Mzg5KQorKysgU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC04ODUsOCArODg1LDExIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLnZtKCkpOwotICAgIFN0cm9uZzxKU0dsb2Jh
bE9iamVjdD4gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQo
KS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2Jh
bE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAg
ICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gT3B0
aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkg
OiBOdWxsb3B0KTsKQEAgLTg5NCw3ICs4OTcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6ZXZhbHVhCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGV4ZWMs
IG1ha2VTb3VyY2Uoc2NyaXB0KSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3Vs
dCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTkxNSw5ICs5MTgsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9r
ZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9
IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVuY3Rpb24g
PSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7
CkBAIC05MzAsNyArOTM2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omlu
dm9rZQogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIAogICAgIG1hcnNoYWxWYWx1ZShl
eGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTk0OCw5ICs5NTQsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlOjpOb25lKQpAQCAtOTYyLDcgKzk3MSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBvYmpl
Y3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0KTsKICAgICAKICAgICBtYXJz
aGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC05ODAsOSArOTg5LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZp
ZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0
cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEob2JqZWN0
LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTk5NSw3ICsxMDA3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAgIEpTVmFsdWUgdmFsdWUgPSBKU0M6OmNvbnN0cnVj
dChleGVjLCBvYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOwog
ICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMTMsMTMgKzEwMjUsMTYgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBybwogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywg
cHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3Vs
dERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTAz
NCwxMyArMTA0OSwxNiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJv
CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0g
cGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1
ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTEwNTgsMTUgKzEwNzYsMTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnNldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3
ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVl
TGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xv
dCk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDg0LDE0ICsxMTA1LDE3IEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hh
bFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZh
bHNlKTsKICAgICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMTAsMTUgKzExMzQsMTgg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCku
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlw
dCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKQEAgLTEx
MzYsMTYgKzExNjMsMTkgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92
ZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9
IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTExNjMsMTEgKzExOTMsMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKQEAgLTExODUsMTEgKzEyMTksMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCkBA
IC0xMjA3LDExICsxMjQ1LDE0IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpo
YXNNZXQKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYg
dm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5k
ZWZpbmVkKCk7CiB9CiAKQEAgLTEyMjksOSArMTI3MCwxMiBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5W
aWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdp
bldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAg
CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVN
b2RlOjpTdHJpbmdzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFt
ZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC0x
MjUxLDcgKzEyOTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVy
CiAKICAgICBtZW1jcHkocmVzdWx0RGF0YSwgW2RhdGEgYnl0ZXNdLCByZXN1bHRMZW5ndGgpOwog
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCShyZXZpc2lvbiAyMDUzODkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5MzYsNiArNjkzNiw5IEBAIC0gKEJPT0wpc2hv
dWxkQ2xvc2UKICNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0
b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2Mg
PSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gW05TQXBw
bGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUuYXNCb29sZWFu
KCldOwpAQCAtNjk3Niw4ICs2OTc5LDggQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3Iq
IGFlRGVzY0ZybwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEpTQzo6SlNWYWx1
ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVu
dERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBh
ZURlc2NGcm9tSlNWYWx1ZShleGVjLCBwcmltaXRpdmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287902</attachid>
            <date>2016-09-04 07:57:00 -0700</date>
            <delta_ts>2016-09-04 08:03:57 -0700</delta_ts>
            <desc>work in progress: rebased again.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785801</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMywxMSArMTAzNSwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA1MCw5ICsxMDU1LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzOCwxMSArMTE0MywxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjUzLDkgKzEyNjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDQzLDcgKzE0NTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NzcsNyArMTQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE1MDUsNyArMTUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUyNiw3ICsxNTMzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTU0Myw3ICsx
NTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU1OCw3ICsxNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjE4LDggKzE2
MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg3MiwxNCArMTg4MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4OTcsMTQgKzE5MDcs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTIzLDcgKzE5MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDksMTQg
KzE5NjEsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzksNyArMTk5
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwODUsNiArMjA5OSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDkz
LDkgKzIxMTcsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMTA3LDExICsyMTM1LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcEV4Y2VwdGlvbikKIHsKLSAg
ICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9u
KSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFt
ZSAnJXMnIGJ1dCBub25lIHdhcyB0aHJvd25cbiIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjExOSwxMyArMjE1MCwxMyBA
QCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKLSAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgdm0uZXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBl
Y3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlv
biBjbGFzcyBpcyBub3QgZGVmaW5lZFxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBpc0luc3Rh
bmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvbkNsYXNz
KS0+aGFzSW5zdGFuY2UoZXhlYywgZXhjZXB0aW9uKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
IHsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3Rl
ZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBj
bGFzcyBmYWlscyBwZXJmb3JtaW5nIGhhc0luc3RhbmNlXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5h
bWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMTQ5
LDYgKzIxODAsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpID0gdHJ1ZTsKIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKIAogICAgIGF1dG8g
Y2hlY2tFeGNlcHRpb24gPSBbJl0gKGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24s
IEpTVmFsdWUgdmFsdWUpIHsKQEAgLTIxOTEsNyArMjIyMyw3IEBAIHN0YXRpYyBib29sIHJ1bldp
dGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgaWYgKGlzTW9kdWxlKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb21pc2UpCiAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGxvYWRBbmRFdmFs
dWF0ZU1vZHVsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdEJ1
ZmZlciwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdWxmaWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewog
ICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGZhbHNlLCBleGVjLT5h
cmd1bWVudCgwKSk7CkBAIC0yMjA4LDEzICsyMjQwLDE0IEBAIHN0YXRpYyBib29sIHJ1bldpdGhT
Y3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdEJ1ZmZlciwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRp
b24pOworICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCk7CiAgICAgICAgICAgICBjaGVja0V4Y2VwdGlv
bihpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yMjI3LDYgKzIyNjAsOSBAQCBzdGF0aWMgYm9vbCBy
dW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZl
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBTdHJpbmcgaW50ZXJwcmV0ZXJOYW1lKEFTQ0lJTGl0ZXJhbCgiSW50ZXJwcmV0ZXIiKSk7CiAg
ICAgCiAgICAgYm9vbCBzaG91bGRRdWl0ID0gZmFsc2U7CkBAIC0yMjc3LDcgKzIzMTMsNyBAQCBz
dGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygp
OwogICAgIH0KICAgICBwcmludGYoIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElVdGlscy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSVV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMyBAQCBlbnVtIGNsYXNz
IEV4Y2VwdGlvblN0YXR1cyB7CiAKIGlubGluZSBFeGNlcHRpb25TdGF0dXMgaGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhj
ZXB0aW9uUmVmKQogewotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uUmVmKQogICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uUmVm
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEyOCwxMiArMjEyOCwxOSBAQAogCQlG
RTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY2MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovOyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDRE
IC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUx
RTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM3MUQ3OEYwMUQwMEE2OTRE
NCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkx
MzkxRDc4RjNBRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAv
KiBFeGNlcHRpb25TY29wZS5jcHAgKi87IH07CisJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAv
KiBFeGNlcHRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2NDkxM0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkxM0Qx
RDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBF
eGNlcHRpb25FdmVudC5jcHAgKi87IH07CiAJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTY4QzYzODFCOTBERTBCMDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjhDNjM1MUI5
MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovOyB9OwogCQlGRTdC
QTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuY3BwICovOyB9OwogCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QzQxOTYxQjk3RkM0
QjAwRjRENTk4IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovOyB9OworCQlGRTgwQzE5NzFENzc1
Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTgw
QzE5OTFENzc1RkJFMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi87IH07CisJCUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNl
cHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFODBDMTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RTk5QjI0QTFDMjRDM0Q3MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQzNSwxMSAr
NDQ0MiwxOCBAQAogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291
cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE1MTgzQzVB
MjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDRE
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxM0ExRDc4RjQ2MTAw
QTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRTFBMUE3Q0VDMDBG
MUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5NjFE
Nzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXRjaFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBD
MTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhdGNoU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVu
dExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdD
RjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYx
QkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njk4LDggQEAKIAkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAogCQkJCUJDQTYy
REZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlE
RjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCisJCQkJRkU4MEMxOTgxRDc3NUZCNDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuY3BwICovLAorCQkJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi8sCiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNz
SW5mby5oICovLAogCQkJCTBGRTA1MDFDMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuY3BwICovLAogCQkJCTBGRTA1MDFEMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuaCAqLywKQEAgLTU3NDgsMTAgKzU3NjQsMTYgQEAKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAw
RjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNG
Q0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggKi8sCisJCQkJRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8qIEV4Y2VwdGlv
bkV2ZW50LmNwcCAqLywKKwkJCQlGRTY0OTEzQTFENzhGNDYxMDBBNjk0RDQgLyogRXhjZXB0aW9u
RXZlbnQuaCAqLywKKwkJCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAgKi8sCisJCQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyog
RXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0
aW9uSGVscGVycy5jcHAgKi8sCiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2Vw
dGlvbkhlbHBlcnMuaCAqLywKKwkJCQlGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovLAorCQkJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRp
b25TY29wZS5oICovLAogCQkJCTg2Q0EwMzJEMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxl
LmNwcCAqLywKIAkJCQk4NkNBRkVFMjEwMzVEREU2MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oICov
LAogCQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKQEAg
LTYxNDMsNyArNjE2NSw2IEBACiAJCQkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RS
dW5uZXJVdGlscy5oICovLAogCQkJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Nj
b3BlLmNwcCAqLywKIAkJCQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5o
ICovLAotCQkJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24u
aCAqLywKIAkJCQkwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUu
aCAqLywKIAkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi8sCiAJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLywKQEAgLTc2OTIsNyArNzcxMyw3IEBACiAJCQkJMEZFMDUwMUExQUE5MDkxMTAw
RDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQgLyogVGhy
b3dTY29wZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTYwMjlEOTFENkUxRTRGMDAz
MDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMUIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMDgsNiArODIyOSw3IEBA
CiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFp
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0
MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMDEsNiArODMyMyw3IEBACiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5
IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDdBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RENCOTczMTJFNTE5M0YwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQTRFQzkwQzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkI2RDc1MzE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJy
aWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4MzMz
LDcgQEAKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAvKiBFeGNlcHRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFD
QjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODMzLDYgKzg4NTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNlcHRpb25T
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyog
QWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFD
MTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTMwNyw2ICs5MzMyLDcgQEAKIAkJCQkwRjJCNjZFNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENhdGNoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzM5
LDYgKzkzNjUsNyBAQAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBC
Mzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEzRDFENzhGQzJGMDBBNjk0RDQg
LyogRXhjZXB0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1
OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxOSw2ICs5NDQ2LDcgQEAK
IAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3
QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVBQjQ5REMxQkVDODA4MjAwNzAyMEZCIC8qIFBlckdsb2JhbE9iamVjdFdyYXBwZXJXb3JsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTAgKzEwNSwxMiBAQCBKU1ZhbHVlIFNj
cmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEwICsxMjIsMTMgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogcwogCiBTdHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1
ZShzY3JpcHRTdGF0ZSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlv
biBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0Lgot
ICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHNjcmlwdFN0YXRl
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjMsNiArNjIzLDkgQEAgdm9pZCBEZWJ1Z2dlcjo6
dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZgogCiB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVk
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAobV9p
c1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjIsNyArNjY1LDcgQEAgdm9pZCBEZWJ1
Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIHsKICAgICAgICAgUGF1c2VSZWFz
b25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIGRpZEhpdEJyZWFrcG9pbnQgPyBQYXVzZWRGb3JC
cmVha3BvaW50IDogbV9yZWFzb25Gb3JQYXVzZSk7CiAgICAgICAgIGhhbmRsZVBhdXNlKHZtRW50
cnlHbG9iYWxPYmplY3QsIG1fcmVhc29uRm9yUGF1c2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgbV9wYXVzaW5nQnJlYWtwb2ludElEID0g
bm9CcmVha3BvaW50SUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNyw3ICsyMTcsOSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFs
dWF0ZVdpdGhTCiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gY2F0
Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBudWxscHRyOwogICAgIGlmIChpc1RhaWxEZWxldGVkKCkpCkBAIC0yMjgsNyArMjMw
LDYgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBEZWJ1Z2dlckV2YWxFbmFibGVyIGV2YWxF
bmFibGVyKGNhbGxGcmFtZSk7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogCiAgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTI0Myw5ICsyNDQsOSBA
QCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgSlNTY29wZTo6
Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlKCktPmpzU2NvcGUoKSwgdmFyaWFibGVzVW5k
ZXJURFopOwogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKGNhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3JpcHQpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmRlcml2ZWRDb250ZXh0VHlwZSgp
LCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFs
Q29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkg
eworICAgICAgICBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIApAQCAtMjU3LDkgKzI1OCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6
OmV2YWx1YXRlV2l0aFMKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdGhpcy0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Cisg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZiAoc2Nv
cGVFeHRlbnNpb25PYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiwxNCArMTEyLDE1IEBAIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworCisgICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOwogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICAvLyBJ
dCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFu
eXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCkBA
IC0xMzEsNyArMTMyLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5k
ID09IEdlbmVyaWNVbndpbmQpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICBBU1NFUlQoISF2bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgCiAgICAgCiAgICAgcHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCB0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9vbCBk
aXJlY3Q+CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgSklUX09QRVJBVElPTiAKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3Bl
cnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHN0cmljdCk7CkBAIC0xNzksMTEgKzE4MCwx
MiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3Rv
ciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKS0+c3RydWN0dXJlKCkpOwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChwcm90by5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgYXNPYmplY3QocHJvdG8pKTsKQEAgLTIwNywx
MiArMjA5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAg
SlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90
IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIo
ZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhICYgYikpOwpAQCAt
MjIyLDEyICsyMjUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsK
ICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGlu
dDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9J
bnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgfCBiKSk7
CkBAIC0yMzcsMTIgKzI0MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAg
ICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSBe
IGIpKTsKQEAgLTI1MiwxMiArMjU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7
CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IG9wMi50b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGEgPDwgKGIgJiAweDFmKSkpOwpAQCAtMjY3LDEyICsyNzMsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoYSA+PiAoYiAmIDB4MWYpKSk7CkBAIC0yODIsMTIgKzI4OSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUg
b3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgdWludDMyX3QgYSA9IG9w
MS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGEgPj4gKGIgJiAweDFmKSkpKTsKQEAgLTMxMywxMiArMzIxLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIC8gYikpOwpAQCAtMzI4LDEwICszMzcsMTEgQEAgZG91Ymxl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhBYnMoRQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGZhYnMoYSk7CiB9CkBAIC0zNDAsMTAgKzM1MCwx
MSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENvcyhFCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gY29zKGEpOwogfQpAQCAtMzUy
LDEwICszNjMsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bgog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihhKTsKIH0KQEAgLTM2NCwxMCArMzc2LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoTG9nKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBsb2coYSk7CiB9CkBAIC0zNzYsMTAgKzM4OSwxMSBAQCBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNpbihFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVt
YmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gc2luKGEpOwogfQpAQCAtMzg4LDEwICs0MDIsMTEg
QEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KAogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9
IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CkBAIC00MTcs
NyArNDMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9w
ZXJ0eSk7CiAKQEAgLTQ0MywxMCArNDU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJj
aWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXko
ZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOwogfQpAQCAtNDU1LDcgKzQ3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKICAgICBpZiAocHJvcGVydHkuaXNVSW50
MzIoKSkKQEAgLTQ3Niw3ICs0OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC04NDUsNiArODYyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWwg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFRoaXMpOwpAQCAtODcwLDExICs4ODgsMTEgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGJhc2VW
YWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5n
ZXQoZXhlYywgcHJvcGVydHksIHNsb3QpKTsKIH0KQEAgLTg5OSw5ICs5MTcsMTAgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIg
cHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9
CkBAIC05MTAsOSArOTI5LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlz
LCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0KQEAgLTE0MjQsOSArMTQ0NCw5IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRl
Y29kZShhKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8g
SW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVz
dCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFs
dWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxv
d3M8aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpKSkgewogICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTQ0MywxMSArMTQ2MywxMSBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1Zh
bHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNl
IHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIg
PSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNTdHJpbmcq
IHN0cjMgPSBKU1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2
bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgpLCBzdHIyLT5sZW5ndGgoKSwg
c3RyMy0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw2ICs3OTcsNyBAQCB2b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhl
YXBSb290CiB2b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBHQ1BIQVNFKE1hcmtpbmdFeGNlcHRpb24pOworCiAgICAgaWYgKCFtX3ZtLT5l
eGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDcgKzEzMyw5IEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6Omlu
amVjdGVkU2MKIAogSlNDOjpKU09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgaW50IGlkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKKyAgICBW
TSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU2
LDcgKzE1OCw3IEBAIEpTQzo6SlNPYmplY3QqIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3IKICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihpZCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6
OmNhbGwoc2NyaXB0U3RhdGUsIGZ1bmN0aW9uVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xv
YmFsVGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQuZ2V0T2JqZWN0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIw
LDcgKzIyMCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUodm0pOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENh
bGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKGluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoKSkKQEAgLTIyOCw4ICsyMjksMTIg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgfQogCiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9T
eXN0ZW1Db25zb2xlKCkpIHsKICAgICAgICAgaWYgKGNhbGxTdGFjay0+c2l6ZSgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgcHJvZ3JhbSA9IHNjcmlw
dFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlv
bjsKQEAgLTI1OSwxMiArMjU5LDEzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omdl
dEludGVybmEKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAKICAgICBpZiAo
SlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21pc2UqPih2YWx1ZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgc3dpdGNoIChwcm9t
aXNlLT5zdGF0dXMoZXhlYy0+dm0oKSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1
czo6UGVuZGluZzoKQEAgLTI4Niw3ICsyODcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJ0YXJnZXRGdW5jdGlv
biIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImJvdW5kVGhpcyIsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpKSk7CkBAIC0yOTgsNyAr
Mjk5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChQcm94eU9iamVjdCogcHJveHkgPSBqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0Kj4odmFsdWUp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgidGFyZ2V0IiksIHByb3h5LT50YXJnZXQoKSkpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoImhhbmRsZXIiKSwgcHJveHktPmhhbmRsZXIoKSkp
OwpAQCAtMzEyLDcgKzMxMyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYXJyYXkiLCBpdGVyYXRlZFZhbHVl
KSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29u
c3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGtpbmQpKTsKQEAgLTMzNSw3ICsz
MzYsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAg
IH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgIm1hcCIsIG1hcEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKQEAgLTM1
Nyw3ICszNTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInNldCIsIHNldEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsK
QEAgLTM2Nyw3ICszNjgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRl
cm5hCiAgICAgaWYgKEpTU3RyaW5nSXRlcmF0b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWlj
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdHJpbmciLCBzdHJpbmdJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0z
NzYsNyArMzc3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQog
ICAgIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpz
RHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAib2JqZWN0
IiwgcHJvcGVydHlOYW1lSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICByZXR1
cm4gYXJyYXk7CkBAIC00MDQsNiArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6d2Vha01hcEVudAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBK
U1dlYWtNYXAqIHdlYWtNYXAgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha01hcCo+KHZhbHVlKTsKICAg
ICBpZiAoIXdlYWtNYXApCkBAIC00MTgsNyArNDIwLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha01hcEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBEYXRh
KCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpA
QCAtNDUxLDYgKzQ1Myw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRF
bnQKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrU2V0KiB3
ZWFrU2V0ID0ganNEeW5hbWljQ2FzdDxKU1dlYWtTZXQqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFr
U2V0KQpAQCAtNDY1LDcgKzQ2OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtTZXRFbnQKICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihm
ZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5iZWdpbigp
OyBpdCAhPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBK
U09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ5NSw2ICs0
OTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
cjsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
aWYgKEpTTWFwSXRlcmF0b3IqIG1hcEl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJh
dG9yKj4odmFsdWUpKQpAQCAtNTA1LDcgKzUwOSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xv
bmUoZXhlYyk7CiAgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlO
YW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1
ZSkpIHsKICAgICAgICAgaXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpKSB7CkBAIC01MjUsMTggKzUyOSwxOCBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4
ZWMsIG5leHQpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlVwogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikpOwogCiAgICAgU3RyaW5nIHNjcmlwdCA9
IHNjcmlwdFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4
Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIFJlZjxTY3JpcHRDYWxsU3RhY2s+
IGNyZWF0ZVNjcmlwdENhbGxTdGEKIAogc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0
aW9uRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGV4Y2VwdGlv
bk9iamVjdCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlciwgU3RyaW5nKiBzb3Vy
Y2VVUkwpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IG5lZWQgdG8gZXZhbHVhdGUgSmF2
YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNl
cHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJsaW5lIikpOwogICAgICpsaW5lTnVtYmVyID0gbGluZVZhbHVlICYmIGxpbmVWYWx1
ZS5pc051bWJlcigpID8gaW50KGxpbmVWYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwpAQCAtMTI2
LDcgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb20KICAg
ICAqY29sdW1uTnVtYmVyID0gY29sdW1uVmFsdWUgJiYgY29sdW1uVmFsdWUuaXNOdW1iZXIoKSA/
IGludChjb2x1bW5WYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwogICAgIEpTVmFsdWUgc291cmNl
VVJMVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7CiAgICAgKnNvdXJjZVVSTCA9IHNv
dXJjZVVSTFZhbHVlICYmIHNvdXJjZVVSTFZhbHVlLmlzU3RyaW5nKCkgPyBzb3VyY2VVUkxWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykgOiBBU0NJSUxpdGVyYWwoInVuZGVmaW5lZCIp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKIH0KIAogUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwg
c2l6ZV90IG1heFN0YWNrU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBt
X2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxl
KCksIGNhbGxGcmFtZSwgJm1fcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBhcmd1bWVudENvdW50
ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCksIG1fYXJndW1lbnRzLmRhdGEoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUsIHNjb3BlKTsKLSAgICAgICAgICAgIG1fdmFsaWQgPSAhY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIG1fdmFsaWQgPSAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgY2FsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiwxNCArMTE2LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBw
b2ludGVyLCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFy
aW5nbHkgaW4gbmV3IGNvZGUuCiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBw
bGFjZXMgaW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUg
c29vbi4KIAotICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0
aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGxhc3RF
eGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmxhc3RFeGNlcHRpb24oKTsgfQotICAgICAg
ICB2b2lkIGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckxhc3RFeGNlcHRpb24oKTsg
fQotCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21t
b25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3Bl
cnR5TmFtZXM7IH0KICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAg
ICAgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZy
YW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CkBA
IC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIgYmFpbGVk
LCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhj
YWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogCkBAIC0yMjcsNyArMjI3
LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAgICAg
ICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCkp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjY2LDEzICs2NjYsMTUgQEAgcHJpdmF0ZToK
IAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpIHsKLSAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUt
PnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQog
ICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUpOwot
ICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTc2MCw2ICs3NjIsOCBAQCBwcml2YXRlOgogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodW53aW5kU3RhcnQg
PT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc3OCw3ICs3ODIsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp1CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzRW1wdHkoKSB8
fCAoZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgJiYgIWV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKSkK
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsKIAotICAgIEFTU0VSVCh2bS5leGNl
cHRpb24oKSAmJiB2bS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpICYmIHNjb3BlLmV4Y2VwdGlvbigpLT5zdGFj
aygpLnNpemUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBD
LCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyID0gbnVsbHB0cjsKQEAgLTk3Nyw3ICs5ODEsNyBAQCBmYWlsZWRKU09OUDoKIAogICAg
IC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9ncmFtLT5nZW5l
cmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotCisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0K
IApAQCAtOTg2LDcgKzk5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmEKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVz
eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMDQ5LDcgKzEwNTMsNyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0
dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52
YWxpZCBzdGF0ZS4KQEAgLTExMDAsMTIgKzExMDQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwog
Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoTElLRUxZKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7
CkBAIC0xMTE1LDcgKzExMTksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiB7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpA
QCAtMTE2NCw3ICsxMTY4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9y
QnVzeSgpKQpAQCAtMTI3MCw3ICsxMjc0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShNb2R1bGVQcm9ncgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQpAQCAtMTMxMSwxMiArMTMxNSwxNCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVi
dWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBz
d2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBA
IC0xMzM4LDcgKzEzNDQsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKLX0gICAgCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTQgQEAKICNkZWZpbmUgSW50ZXJwcmV0ZXJfaAogCiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xMDUsOCArMTA3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0p
CiAgICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEV4Y2Vw
dGlvbiA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAg
ICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2Vw
dGlvblNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFBy
aW50U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIEpJVENv
ZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0
ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSkKIHsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZvaWQqIGVudHJ5QWRkcmVzczsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHBy
b3RvQ2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgSlNWYWx1ZSBKSVRD
b2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxzZQogICAgICAgICBlbnRyeUFk
ZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2Ny
aXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7Ci0gICAgcmV0dXJuIHZtLT5l
eGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJldHVybiBzY29wZS5leGNlcHRp
b24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6
OmRmZ0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0tPnNoYWRvd0NoaWNrZW4oKS5s
b2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGhy
b3dQYWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0
aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
dm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgdW53aW5k
U3RhcnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9wdGltaXplLCBiYXNlLT5j
bGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0
ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0g
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vzc1R5cGUp
OwpAQCAtNDk5LDYgKzQ5OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdP
clN5bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC01MjAsNyArNTIx
LDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CiAgICAgLy8g
RG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0g
ICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KSkKQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogeworICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAg
ICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0
cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJl
IHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC01NjMsNyArNTY2LDcgQEAgc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1
YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eSkpIHsKQEAgLTc4NiwxNCArNzg5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAKKyAg
ICBWTSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAg
IAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpLCBn
bG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1
ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTgxNyw3
ICs4MjIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAg
ICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04NDYsNyArODUxLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVj
Q2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ3
Miw4ICsxNDc3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBlIHsKIAogc3RhdGljIHZvaWQg
cHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0KiBhY2Nlc3NvciwgQWNjZXNz
b3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHByb3BlcnR5S2V5
ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCkBA
IC0xNjE4LDggKzE2MjUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1
aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNh
blVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVm
UHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkgewpAQCAtMTY2MSwxMCArMTY3
MCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0x
ODU1LDYgKzE4NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKICAgICAKQEAgLTE4NzIsMTAgKzE4ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFz
ZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7
CiAgICAgfQpAQCAtMTkyNCwxMCArMTkzNCwxMCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQogICAgICAgICBj
b3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CkBAIC0yMTMyLDcg
KzIxNDIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQo
c2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8sIHNsb3QsIGlkZW50KTsK
QEAgLTIzODMsMTEgKzIzOTMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
TXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKQEAgLTIzOTUsNiArMjQwNiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDAyLDEwICsyNDE0LDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ4MCwxMSArMjQ5MiwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ5Miw2ICsyNTA1LDcgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVz
ID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKQEAgLTI0OTksMTAgKzI1MTMs
MTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC0y
NTkyLDEzICsyNjA2LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lm
RXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBleHRlcm4gIkMiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgSW5zdHJ1Y3Rp
b24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCksICIgKHJl
dHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9u
KCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICByZXR1cm4gTExJbnQ6OmV4
Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTUsNyArNTYsOCBAQCB2b2lkKiBjYWxsVG9U
aHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgZGF0YUxv
ZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIiAoY2FsbFRvVGhyb3cp
LlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKGNhbGxU
b1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0
aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmICh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChP
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMTUgKzc4LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBCeXRlY29kZVNlcXVlbmNlOjpm
b3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIp
OwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2UtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGls
YXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyOCAr
MTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIEpTVmFs
dWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRC
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHByb2ZpbGVkQnl0
ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0Fy
cmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlw
dGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVz
Y3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fY291bnRlcnMuYmVnaW4o
KSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpT
T2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTE0
NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJz
LCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXpl
KCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29z
ckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBK
U0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCArMTAwLDI1IEBAIHZvaWQg
RGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpTVmFsdWUgRGF0YWJhc2U6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICBKU0FycmF5KiBi
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBieXRlY29kZXMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMp
OwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxh
dGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV2ZW50cy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFk
ZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9yaWdpblN0YWNrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6
ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsx
OTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQgewogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRUNNQSA5LjQuMi4z
OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUK
ICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoTElLRUxZ
KGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUsNyArMjA4LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsK
IAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9u
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rv
ci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogICAgICAgICAgICAg
aWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB9IGVsc2Ug
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAKICAg
ICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIyOCw3ICsyMzEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBKU09i
amVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3Bl
Y2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0KTsKIH0KQEAgLTI4
NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgK
ICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2ln
bmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtMzMwLDMxICszMzMsMzIg
QEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgICAgICB1bnNp
Z25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4
SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8v
IDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRo
aXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgLy8gMi4g
TGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpv
aW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRo
ZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4NywxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlH
ZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAg
ZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMsMTQgKzQwNywxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1MiArNDI0LDUyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0cmlu
Z0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAg
QXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24g
PSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcp
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNP
YmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAj
ZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQsMTYgQEAgc3RhdGljIGlubGlu
ZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1N0cmluZyogc2VwYXJhdG9y
LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDUuIElmIGxlbiBpcyB6
ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwot
CiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxl
bWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRlZmluZWQgb3Ig
bnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgUiBiZSA/IFRv
U3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsK
ICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgpAQCAtNTI0
LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAg
ICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4g
TGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVm
aW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxl
dCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUsNyArNTQyLDcgQEAgc3RhdGlj
IEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBl
bGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHBy
b2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAtNTYxLDYgKzU2OCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBT
dHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4o
RXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRl
LCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CkBA
IC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0
ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAt
NjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUK
ICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBqc0RvdWJsZU51bWJlcih2YWx1
ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3du
VG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
c3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZShzdGF0ZS52bSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdl
bmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYzMCw2ICs2NDAsOSBAQCBnZW5l
cmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUg
PyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3Ro
KD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMs
IHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQg
c2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtNjUzLDcgKzY2
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3Ro
KTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1Nl
cGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJp
bmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1
ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmpl
Y3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywg
dGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTcwMSw3ICs3MTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTcxNCw2ICs3
MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1Zh
bHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpAQCAtNzI2LDcgKzc0MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKQEAgLTczOCw3
ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8
aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHN3
aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc5OCw0MSArODEzLDQxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2ln
bmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWdu
ZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMg
PSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAg
ICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhp
c3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlz
dHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBw
ZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElu
bGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb3dlckV4aXN0
cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCB1cHBl
ciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
ICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtODU2LDcgKzg3
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9IGVs
c2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAgLTg2NywxMSArODg0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIHsKICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2Fy
cmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAgLTg5MiwxNCArOTEwLDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0
ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CkBA
IC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtOTMyLDcgKzk1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKQEAgLTk2NywxMiArOTg1LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2sp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgyLDcgKzEwMDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJl
Z2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVj
LT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxl
dGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNl
PihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElu
bGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTAxMywyNCArMTAzMSwyNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMp
OwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewogICAgICAg
ICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGspLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihsZW5ndGggKyBuckFyZ3MpOwpAQCAtMTA0MCwyNiArMTA2MCwyOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogICAgIEpT
VmFsdWUgc2VhcmNoRWxlbWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBpbmRl
eCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFs
KGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTEw
NjgsNiArMTA5MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNQogICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKQEAgLTEwODksMTggKzEx
MTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBkbyB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKTsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFy
Y2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAK
QEAgLTExMDksMjMgKzExMzMsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc291
cmNlLT5pbmRleGluZ1R5cGUoKSkgJiYgIXNvdXJjZS0+c3RydWN0dXJlKCktPmhvbGVzTXVzdEZv
cndhcmRUb1Byb3RvdHlwZSh2bSkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNvdXJj
ZS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRPZmZzZXQgKyBp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHNvdXJjZSwgaSk7
Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTExNTMsNyArMTE3OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25jYXRBcHBlbmRPbmUoRXgKIAogICAgIGlmICghcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhl
Yywgdm0sIDAsIGZpcnN0KSkgewogICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTExOTcsMTIgKzEyMjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RBcnJheS0+bWVy
Z2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZEFycmF5LT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgaWYgKHR5cGUgPT0gTm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZhc3RDb3B5KHZtLCBz
ZWNvbmRBcnJheSkgfHwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXpl
KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQogICAgICAgICAgICAgfHwgIW1vdmVFbGVtZW50
cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFy
cmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bS5leGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE0IEBAIHZvaWQgQm9vbGVh
bkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIC8vIEVDTUEgMTUuNi4yCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJvb2xlYW4gPSBq
c0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKICAgICBTdHJ1Y3R1
cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
Ym9vbGVhblN0cnVjdHVyZSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCks
IGJvb2xlYW4pOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0
ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBi
b29sZWFuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEyIEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnUKIAogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYXRjaFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXRjaFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitD
YXRjaFNjb3BlOjpDYXRjaFNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29w
ZUVudHJ5LCBsb2NhdGlvbikKK3sKK30KKworQ2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisKKyAgICBtX3Zt
LnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpDYXRj
aFNjb3BlRXhpdCwgbV9kZXB0aCwgbV9sb2NhdGlvbik7CisgICAgCisgICAgaWYgKG1fdm0ubV90
cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25F
dmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fbG9jYXRpb24pOworICAgICAgICBpZiAobV92bS5tX25l
ZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLm1fdHJh
Y2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAgICAgICBXVEZSZXBvcnRC
YWNrdHJhY2UoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5leGNlcHRpb24o
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2F0Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhdGNoU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2F0
Y2hTY29wZV9oCisjZGVmaW5lIENhdGNoU2NvcGVfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uU2Nv
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlv
blNjb3BlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYXRjaFNjb3BlKFZNJiwg
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgQ2F0Y2hTY29wZShjb25zdCBDYXRjaFNjb3Bl
JikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRjaFNjb3BlJiYpID0gZGVmYXVsdDsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5DYXRjaFNjb3BlKCk7CisKKyAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkKKyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbV92bS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KK307CisKKyNkZWZpbmUg
REVDTEFSRV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElO
RV9fKSkKKworI2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoK
KyAgICBBTFdBWVNfSU5MSU5FIENhdGNoU2NvcGUoVk0mIHZtKQorICAgICAgICA6IEV4Y2VwdGlv
blNjb3BlKHZtKQorICAgIHsgfQorICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0g
ZGVsZXRlOworICAgIENhdGNoU2NvcGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fdm0uY2xlYXJFeGNlcHRpb24o
KTsgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwKKyAgICBKU0M6
OkNhdGNoU2NvcGUoKHZtX18pKQorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2F0Y2hTY29w
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgQkVHSU5fTk9fU0VUX1BDKCkgXAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKQorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsgXAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIFNF
VF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKQEAgLTk5LDEwICsxMDEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBkb0V4Y2VwdGlvbkZ1enppbmdJZkVuYWJsZWQoZXhlYywgIkNvbW1vblNsb3dQ
YXRocyIsIHBjKTsgICBcCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpIHsg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYyk7ICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
IHsgICBcCisgICAgICAgICAgICBSRVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAg
IFwKICAgICAgICAgICAgIEVORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBFTkQoKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMTQ0LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBDQUxM
X0NIRUNLX0VYQ0VQVElPTihleGVjLCBwYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBFeGVjU3RhdGUqIGNjZUV4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBJbnN0cnVjdGlvbiogY2NlUEMgPSAocGMpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgQ0FMTF9FTkRfSU1QTChjY2VFeGVjLCBMTEludDo6Y2FsbFRvVGhy
b3coY2NlRXhlYykpOyAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCkBAIC00MjcsNyArNDI5
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX211bCkKICAgICBKU1ZhbHVlIGxlZnQgPSBP
UF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7
CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVt
YmVyKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtNDQy
LDcgKzQ0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdWIpCiAgICAgSlNWYWx1ZSBs
ZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9QX0MoMykuanNW
YWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSByaWdo
dC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgLSBiKTsK
QEAgLTQ1NywxMCArNDU5LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kaXYpCiAgICAg
SlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9Q
X0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91Ymxl
IGIgPSByaWdodC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
UkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC8gYik7
CiAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewpAQCAtNDcyLDcgKzQ3NCw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihqc01vZChhLCBi
KSkpOwpAQCAtNDgyLDEwICs0ODQsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvdykK
IHsKICAgICBCRUdJTigpOwogICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGRvdWJsZSBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIFJFVFVSTihq
c051bWJlcihvcGVyYXRpb25NYXRoUG93KGEsIGIpKSk7CiB9CkBAIC00OTQsNyArNDk2LDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGlu
dDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9D
KDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA8PCAo
YiAmIDMxKSkpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPj4gKGIgJiAzMSkpKTsKQEAgLTUxNCw3ICs1MTYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJTigpOwog
ICAgIHVpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMzEpKSkpOwpAQCAtNTMxLDcgKzUzMyw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRhbmQpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBP
UF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhICYg
YikpOwpAQCAtNTQxLDcgKzU0Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRvcikK
IHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAg
UkVUVVJOKGpzTnVtYmVyKGEgfCBiKSk7CkBAIC01NTEsNyArNTUzLDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9Q
X0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgp
LnRvSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgXiBiKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIGJvb2wgb3BJbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVy
dHkoZXhlYywgaSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gcHJvcE5hbWUudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IGludGVycHJldGVyVGhyb3dJbkNhbGxlcihFeGVjU3RhdGUqCiAKICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAg
ZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIi5cbiIpOwor
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBzY29wZS5leGNlcHRpb24oKSwgIi5c
biIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTYgKzg3LDE5
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKIAogSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
CiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcHJvZ3JhbSk7CiAgICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24o
KTsKLSAgICAgICAgZXhlYy0+dm0oKS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTEwNSw5
ICsxMDgsOSBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4
ZWMsIE5vdFN0cmljdE1vZGUpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJl
dGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgdGhpc09iaik7CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xNDcsOSArMTUwLDExIEBAIHN0YXRpYyBTeW1ib2wq
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnQKIAogc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBy
ZWplY3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QpOwogICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTE3NiwxNyArMTgxLDE5IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSBpbml0aWF0b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVh
ZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+
dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3Rm
VGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2
bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZv
ckVudHJ5UG9pbnRNb2R1bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVT
eW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJbnNlcnQg
dGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhl
IGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIo
KS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBzb3Vy
Y2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJuIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZShsb2NrLCBleGVjLCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5p
dGlhdG9yKTsKQEAgLTIxMywxOCArMjIwLDIwIEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9k
dWxlKEV4ZWNTdGF0ZSoKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
Ci0gICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMt
PnZtKCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVs
ZSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0
byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5
LgogICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgSlNTb3VyY2VDb2RlIG9iamVjdCB0byB3cmFwIGFy
b3VuZCB0aGlzIHNvdXJjZS4KICAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92
aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3
KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gbG9hZE1vZHVsZShsb2NrLCBleGVj
LCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5pdGlhdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTQgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGJvb2wgY29uZGl0aW9u
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKGNvbmRp
dGlvbikKQEAgLTIyNSw2ICsyMjcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNiw3ICsyNDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUpOwpAQCAtMjQ1LDYg
KzI0OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVF
bmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNs
aWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAg
IGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMjU2LDcgKzI2Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGNsaWVudC0+cHJvZmlsZUVuZChleGVjLCB0aXRsZSk7CkBAIC0yNjUsNiArMjcxLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0yNzYsNyArMjg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Y2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsKQEAgLTI5Miw2ICszMDAsOCBA
QCBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoCiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTMwMSw3
ICszMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHRpdGxlID0gQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0zMTEsNiArMzIxLDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMjAsNyArMzMyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRs
ZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUg
PSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0YXRpYyBkb3VibGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIAogICAg
IGRvdWJsZSB2YWx1ZTsKQEAgLTE2Nyw3ICsxNjgsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0
ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHZhbHVlID0gbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMoZXhlYywgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogCiAgICAgU3RydWN0dXJlKiBkYXRl
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CkBAIC0yMDIsMTAgKzIwMywxMiBAQCBDYWxs
VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBTdHJpbmcgZGF0ZVN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLT52bSgpLCBkYXRlU3RyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDMsNyArNjAzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkRh
dGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJlIGFu
IG9iamVjdC4iKTsKQEAgLTYxNCw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBKU1ZhbHVlIGhpbnRWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdHlwZSA9IHRvUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZShleGVjLCBoaW50VmFsdWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAodHlwZSA9PSBOb1By
ZWZlcmVuY2UpCkBAIC0xMTIzLDIwICsxMTI0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBK
U1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVy
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEodGltZVZhbHVlLmlzSW50MzIoKSB8
fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgpKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCi0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTE0NSw3ICsxMTQ3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0
cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChl
eGVjLCBhc09iamVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmlu
ZyBkaWQgbm90IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsMTEgQEAgdm9pZCBFcnJvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRD
b3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVy
ZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUs
IG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihFeGVjUwogU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmFt
ZVZhbHVlOwogICAgIGF1dG8gbmFtZVByb3BlcnROYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZTsKQEAgLTE3NiwxNCArMTc3LDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRU
b1N0cmluZygKICAgICAgICAgfQogICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5
cGVEaXJlY3QoKTsKICAgICB9Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbmFtZVN0cmluZzsKICAgICBp
ZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3Ii
KTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWVWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKQEAgLTE5MiwxNCArMTkzLDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNl
OjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICBQcm9wZXJ0eVNsb3QgbWVzc2FnZVNsb3QodGhpcywg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgaWYgKEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgbWVzc2FnZVByb3BlcnROYW1l
LCBtZXNzYWdlU2xvdCkgJiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdl
VmFsdWUgPSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmc7CiAgICAgaWYgKCFtZXNzYWdlVmFsdWUp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyAzLiBMZXQgbmFtZSBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCAibmFtZSIuCiAgICAgSlNWYWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUg
aXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJlICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUg
VG9TdHJpbmcobmFtZSkuCkBAIC05NCwxMyArOTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJF
cnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gNS4gTGV0
IG1zZyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudCAibWVzc2FnZSIuCiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IC8vIChzaWMpCkBAIC0xMTEsNyArMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlcnJvclByb3RvRgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZl
bnQuaCIKKworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnQgZXZlbnQp
Cit7CisgICAgY29uc3QgY2hhciogZXZlbnROYW1lOworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeToKKyAgICAgICAgZXZl
bnROYW1lID0gIkNhdGNoU2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpT
Qzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0OgorICAgICAgICBldmVudE5hbWUgPSAi
Q2F0Y2hTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlv
bkV2ZW50OjpOZWVkRXhjZXB0aW9uQ2hlY2s6CisgICAgICAgIGV2ZW50TmFtZSA9ICJOZWVkIGV4
Y2VwdGlvbiBjaGVjayI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25F
dmVudDo6VGhyb3dTY29wZUVudHJ5OgorICAgICAgICBldmVudE5hbWUgPSAiVGhyb3dTY29wZSBF
bnRyeSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6VGhy
b3dTY29wZUV4aXQ6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvd1Njb3BlIEV4aXQiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93OgorICAgICAg
ICBldmVudE5hbWUgPSAiVGhyb3ciOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnQoZXZlbnROYW1lKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitlbnVtIGNsYXNzIEV4Y2Vw
dGlvbkV2ZW50IHsKKyAgICBDYXRjaFNjb3BlRW50cnksCisgICAgQ2F0Y2hTY29wZUV4aXQsCisg
ICAgTmVlZEV4Y2VwdGlvbkNoZWNrLAorICAgIFRocm93U2NvcGVFbnRyeSwKKyAgICBUaHJvd1Nj
b3BlRXhpdCwKKyAgICBUaHJvdworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudExvY2F0aW9uLmgiCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpFeGNlcHRpb25FdmVudExv
Y2F0aW9uIGxvY2F0aW9uKQoreworICAgIG91dC5wcmludChsb2NhdGlvbi5mdW5jdGlvbk5hbWUs
ICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5KQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaDoyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKCkg
eyB9CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkKKyAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVu
Y3Rpb25OYW1lKQorICAgICAgICAsIGZpbGUoZmlsZSkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisg
ICAgeyB9CisgICAgCisgICAgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9Owor
ICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbGluZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRp
b24oKSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorc3RydWN0IEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24geworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oKSB7IH0KKyAgICBFeGNlcHRp
b25FdmVudExvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmls
ZSwgdW5zaWduZWQgbGluZSkKICAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQog
ICAgICAgICAsIGZpbGUoZmlsZSkKICAgICAgICAgLCBsaW5lKGxpbmUpCkBAIC00MSwzICs0MSwx
MSBAQCBzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgRXhjZXB0aW9uSGVscGVyc19oCiAjZGVmaW5l
IEV4Y2VwdGlvbkhlbHBlcnNfaAogCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUg
IkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlRocm93
U2NvcGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25TY29wZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1ND
T1BFX1ZFUklGSUNBVElPTikKKyAgICAKK0V4Y2VwdGlvblNjb3BlOjpFeGNlcHRpb25TY29wZShW
TSYgdm0sIEV4Y2VwdGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24g
bG9jYXRpb24pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9wcmV2aW91c1Njb3BlKHZtLm1fdG9w
RXhjZXB0aW9uU2NvcGUpCisgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbV9kZXB0
aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK3sK
KyAgICBtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUgPSB0aGlzOworICAgIAorICAgIGlmIChtX3Zt
Lm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnRIZWFkZXIoZW50cnlF
dmVudCwgbV9sb2NhdGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
KQorICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOworICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50
c1dpdGhTdGFja1RyYWNlcykKKyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAg
IH0KK30KKworRXhjZXB0aW9uU2NvcGU6On5FeGNlcHRpb25TY29wZSgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlKTsKKyAgICBtX3ZtLm1fdG9wRXhjZXB0
aW9uU2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cit9CisKK3ZvaWQgRXhjZXB0aW9uU2NvcGU6Omxv
Z0V2ZW50KEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0
aW9uKQoreworICAgIGxvZ0V2ZW50SGVhZGVyKGV2ZW50LCBsb2NhdGlvbik7CisgICAgZGF0YUxv
ZygiXG4iKTsKK30KKwordm9pZCBFeGNlcHRpb25TY29wZTo6bG9nRXZlbnRIZWFkZXIoRXhjZXB0
aW9uRXZlbnQgZXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAg
ZGF0YUxvZygiPCIsIG1fdm0ubV9leGNlcHRpb25FdmVudENvdW50KyssICI+IFsiLCBtX2RlcHRo
LCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25T
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvblNjb3BlX2gKKyNk
ZWZpbmUgRXhjZXB0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisgICAgCitjbGFzcyBFeGNlcHRpb247CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9T
Q09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIHVuc2lnbmVkIGRlcHRo
KCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aDsgfQorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkK
KyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IEV4Y2VwdGlvblNjb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnQgZW50cnlFdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2NvcGUm
KSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRlZmF1
bHQ7CisgICAgfkV4Y2VwdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGxvZ0V2ZW50KEV4Y2VwdGlv
bkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICB2b2lkIGxvZ0V2ZW50SGVhZGVy
KEV4Y2VwdGlvbkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKworICAgIFZNJiBtX3Zt
OworICAgIEV4Y2VwdGlvblNjb3BlKiBtX3ByZXZpb3VzU2NvcGU7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIHVuc2lnbmVkIG1fZGVwdGg7Cit9OworICAgIAor
I2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiBl
eGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvblNjb3BlKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZt
KQorICAgIHsgfQorICAgIEV4Y2VwdGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBk
ZWxldGU7CisgICAgRXhjZXB0aW9uU2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0Owor
CisgICAgVk0mIG1fdm07Cit9OworICAgIAorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NP
UEVfVkVSSUZJQ0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25TY29wZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25T
a2lwcGluZ0V2YWxFCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBzdWJjbGFzc1N0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rhcmdl
dCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBm
dW5jdGlvbiwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBzdWJjbGFzc1N0cnVjdHVyZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsx
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgLy8g
RWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgaWYgKHRhcmdldE9iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkpIHsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICAvLyBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUg
bGVuZ3RoIG9mIEEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxMyArMjE5LDE2IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6ZGVmaW5lT3duUHIKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCkpCiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChleGVjLCBpICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT52bSgpLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxNSArNzMsMTcgQEAgR2V0dGVyU2V0dGVyKiBHZXR0ZXJTZXR0ZXI6OndpdGhTZXR0
ZXIoVgogCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIEZJWE1FOiBTb21l
IGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBleGNlcHRp
b24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2luZyBoZXJlLgot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCk7
CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRl
ci0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlLCBBcmdMaXN0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0OjpkaXMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHZhbHVl
ID0gdGFyZ2V0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhTG9nKHZh
bHVlLCAiXG4iKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBA
IFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIHsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIC8vIFdlIGFsbG93IG5ld1RhcmdldCA9PSBKU1ZhbHVlKCkgYmVjYXVzZSB0aGUgQVBJ
IG5lZWRzIHRvIGJlIGFibGUgdG8gY3JlYXRlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgYSByZWFs
IEpTIGZyYW1lLgogICAgIC8vIFNpbmNlIHdlIGRvbid0IGFsbG93IHN1YmNsYXNzaW5nIGluIHRo
ZSBBUEkgd2UganVzdCB0cmVhdCBuZXdUYXJnZXQgPT0gSlNWYWx1ZSgpIGFzIG5ld1RhcmdldCA9
PSBleGVjLT5jYWxsZWUoKQogICAgIEFTU0VSVCghbmV3VGFyZ2V0IHx8IG5ld1RhcmdldC5pc0Nv
bnN0cnVjdG9yKCkpOwpAQCAtMTEwLDEzICsxMTEsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAgICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0
cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmlsZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4K
ICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5
cGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0
YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uo
dm0sIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGVWYWx1ZSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3Qu
Y29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBj
b25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDYgKzE2Miw5IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVE
YXRhKGMKIAogdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgLy8gMTAuMS4xIEluaXRpYWxpemVDb2xsYXRvciAoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgY29sbGF0b3IgaGFzIGFu
IFtbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gaW50ZXJuYWwgc2xvdCB3aXRoIHZhbHVlIHRydWUs
IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgICAvLyAyLiBTZXQgY29sbGF0b3IuW1tp
bml0aWFsaXplZEludGxPYmplY3RdXSB0byB0cnVlLgpAQCAtMTY5LDcgKzE3Miw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAvLyAzLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMp
OwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwg
dGhlbgpAQCAtMTgxLDE0ICsxODQsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25z
KS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOwogICAg
ICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIDcuIExldCB1IGJlIEdldE9wdGlv
bihvcHRpb25zLCAidXNhZ2UiLCAic3RyaW5nIiwgwqsic29ydCIsICJzZWFyY2giwrssICJzb3J0
IikuCi0gICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2gi
IH0sICJ1c2FnZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQi
KTsKKyAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2giIH0sICJ1c2Fn
ZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQiKTsKICAgICAv
LyA4LiBSZXR1cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIDkuIFNldCBjb2xsYXRvci5bW3VzYWdlXV0gdG8gdS4KICAgICBpZiAodXNhZ2VTdHJpbmcg
PT0gInNvcnQiKQpAQCAtMjEyLDkgKzIxNSw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoRXgKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CiAKICAgICAv
LyAxMy4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwg
InN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCi0gICAgU3Ry
aW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgp
LnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCAiYmVzdCBmaXQiKTsKKyAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIs
ICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBv
ciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyAxNC4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxNS4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjMzLDE2ICsyMzYsMTYgQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIHsKICAgICAgICAgU3RyaW5n
IG51bWVyaWNTdHJpbmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgICAgICBib29s
IG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2sp
OworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIXVzZXNGYWxsYmFjaykKICAgICAgICAgICAgIG51bWVyaWNT
dHJpbmcgPSBBU0NJSUxpdGVyYWwobnVtZXJpYyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAg
ICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgia24iKSwgbnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAg
IHsKLSAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCB7ICJ1cHBlciIsICJs
b3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJzdCBtdXN0IGJlIGVpdGhlciBcInVwcGVyXCIsIFwi
bG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24o
c3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAi
bG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBc
Imxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBvcHQuYWRk
KEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsKICAgICB9CkBAIC0yNzcsOSArMjgwLDkg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIG1fbnVtZXJp
YyA9IChyZXN1bHQuZ2V0KEFTQ0lJTGl0ZXJhbCgia24iKSkgPT0gInRydWUiKTsKIAogICAgIC8v
IDI0LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIs
IMKrImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KLSAg
ICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFj
Y2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBc
ImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7
CisgICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIHsgImJhc2UiLCAiYWNjZW50
IiwgImNhc2UiLCAidmFyaWFudCIgfSwgInNlbnNpdGl2aXR5IG11c3QgYmUgZWl0aGVyIFwiYmFz
ZVwiLCBcImFjY2VudFwiLCBcImNhc2VcIiwgb3IgXCJ2YXJpYW50XCIiLCBudWxscHRyKTsKICAg
ICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyAyNi4gSWYgcyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICAvLyBhLiBJZiB1IGlzICJz
b3J0IiwgdGhlbiBsZXQgcyBiZSAidmFyaWFudCIuCkBAIC0zMDAsMTEgKzMwMywxMSBAQCB2b2lk
IEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKICAgICAvLyAyOC4gTGV0IGlw
IGJlIEdldE9wdGlvbihvcHRpb25zLCAiaWdub3JlUHVuY3R1YXRpb24iLCAiYm9vbGVhbiIsIHVu
ZGVmaW5lZCwgZmFsc2UpLgogICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3Jl
UHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0o
KS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKKyAgICBi
b29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2spOwogICAg
IGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uID0gZmFsc2U7CiAg
ICAgLy8gMjkuIFJldHVybklmQWJydXB0KGlwKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIDMwLiBTZXQgY29sbGF0b3IuW1tpZ25vcmVQdW5jdHVhdGlvbl1dIHRvIGlwLgog
ICAgIG1faWdub3JlUHVuY3R1YXRpb24gPSBpZ25vcmVQdW5jdHVhdGlvbjsKQEAgLTMxOCwxMSAr
MzIxLDEzIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKIAogdm9p
ZCBJbnRsQ29sbGF0b3I6OmNyZWF0ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgQVNTRVJUKCFtX2NvbGxhdG9yKTsKIAogICAgIGlmICghbV9pbml0aWFsaXpl
ZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0ZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIH0KIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAtNDE2LDYg
KzQyMSw5IEBAIGNvbnN0IGNoYXIqIEludGxDb2xsYXRvcjo6c2Vuc2l0aXZpdHlTdHIKIAogSlNP
YmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJu
cyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFz
IGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRv
IGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAtNDI3LDEwICs0MzUsOSBA
QCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAKICAgICBpZiAoIW1f
aW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUs
IGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBt
X2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dXNhZ2UsIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIEFTQ0lJTGl0ZXJhbCh1c2FnZVN0cmlu
ZyhtX3VzYWdlKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmZpbmlzaENyZWEKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIC8vIDEwLjEuMiBJbnRsLkNvbGxhdG9yIChbbG9jYWxlcyBbLCBvcHRpb25zXV0p
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0
IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFy
Z2V0IGJlIE5ld1RhcmdldC4KICAgICAvLyAyLiBMZXQgY29sbGF0b3IgYmUgT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29sbGF0b3JQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChjb2xsYXRvcikuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2Fs
bGVlKCkpLT5jb2xsYXRvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSW50bENvbGxhdG9yKiBjb2xs
YXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAg
IEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQoY29sbGF0b3IpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxp
emVDb2xsYXRvcihjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzcsMTMgKzEzOSwx
NSBAQCBDYWxsVHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjIu
MiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAo
RUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBp
ZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxl
TG9jYWxlc11dLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBAQCB2
b2lkIEludGxDb2xsYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjMuNCBDb2xsYXRvciBDb21wYXJlIEZ1
bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBjb2xsYXRvciBiZSB0aGUgdGhp
cyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoY29sbGF0b3IpIGlzIE9iamVjdCBhbmQg
Y29sbGF0b3IgaGFzIGFuIFtbaW5pdGlhbGl6ZWRDb2xsYXRvcl1dIGludGVybmFsIHNsb3Qgd2hv
c2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTkxLDEzICs5MywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmcoeCkuCiAg
ICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpOwogICAg
IC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDcuIExldCBZIGJlIFRvU3Ry
aW5nKHkpLgogICAgIEpTU3RyaW5nKiB5ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0
YXRlKTsKICAgICAvLyA4LiBSZXR1cm5JZkFicnVwdChZKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA5LiBSZXR1
cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgpAQCAtMTI1LDcgKzEyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KIAogICAgICAgICAvLyBjLiBM
ZXQgYmMgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAg
IGJvdW5kQ29tcGFyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB0YXJnZXRPYmplY3QsIGNvbGxhdG9yLCBudWxscHRyLCAyLCBBU0NJSUxpdGVyYWwo
ImNvbXBhcmUiKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91bmRDb21w
YXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0sIGJvdW5k
Q29tcGFyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0CiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25zIGFic3RyYWN0IG9wZXJhdGlv
biAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxLiBJZiBvcHRpb25zIGlzIHVu
ZGVmaW5lZCwgdGhlbiBsZXQgb3B0aW9ucyBiZSBudWxsLCBlbHNlIGxldCBvcHRpb25zIGJlIFRv
T2JqZWN0KG9wdGlvbnMpLgogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgpAQCAt
MjI0LDcgKzIyNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQK
ICAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBleGVjLmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgSlNPYmplY3QqIG9yaWdpbmFsVG9PYmplY3QgPSBvcmlnaW5hbE9wdGlv
bnMudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMs
IG9yaWdpbmFsVG9PYmplY3QpOwogICAgIH0KQEAgLTI0MSwyNSArMjQyLDI1IEBAIHN0YXRpYyBK
U09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJy
dXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBs
ZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgd2Vla2RheSA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF3ZWVrZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSB5ZWFyID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXllYXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVl
ZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIG1vbnRoID0gb3B0aW9ucy0+Z2V0KCZl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFtb250aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVm
YXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5kYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZh
bHNlOwpAQCAtMjczLDE5ICsyNzQsMTkgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0
aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2
LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFs
c2UuCiAgICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5ob3VyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IWhvdXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAg
ICBKU1ZhbHVlIG1pbnV0ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bWludXRlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1p
bnV0ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAg
IEpTVmFsdWUgc2Vjb25kID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZWNvbmQpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghc2Vj
b25kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwpAQCAtMjk5
LDE1ICszMDAsMTUgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAog
ICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgQVND
SUlMaXRlcmFsKCJudW1lcmljIikpOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNDI4LDEzICs0MjksMTMg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDMuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoZXhlYywgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9j
YWxlcyksCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gTGV0IG9wdGlv
bnMgYmUgVG9EYXRlVGltZU9wdGlvbnMob3B0aW9ucywgImFueSIsICJkYXRlIikuCiAgICAgSlNP
YmplY3QqIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZXhlYywgb3JpZ2luYWxP
cHRpb25zKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyA3LiBMZXQgb3B0IGJlIGEgbmV3IFJlY29yZC4KQEAg
LTQ0Myw3ICs0NDQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
CiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAg
ICAgU3RyaW5nIGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIg
fSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0
XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRj
aGVyXV0gdG8gbWF0Y2hlci4KICAgICBsb2NhbGVPcHQuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIuc3RyaW5nKCksIGxvY2FsZU1hdGNoZXIpOwpAQCAtNDcyLDcgKzQ3Myw3IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAxNy4gTGV0
IHR6IGJlIEdldChvcHRpb25zLCAidGltZVpvbmUiKS4KICAgICBKU1ZhbHVlIHR6VmFsdWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICAvLyAx
OC4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIDE5LiBJZiB0eiBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC00ODEsNyArNDgyLDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgICAgICAvLyBhLiBM
ZXQgdHogYmUgVG9TdHJpbmcodHopLgogICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9IHR6VmFs
dWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh0eiku
Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBjLiBJ
ZiB0aGUgcmVzdWx0IG9mIElzVmFsaWRUaW1lWm9uZU5hbWUodHopIGlzIGZhbHNlLCB0aGVuIGku
IFRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIC8vIGQuIExldCB0eiBiZSBD
YW5vbmljYWxpemVUaW1lWm9uZU5hbWUodHopLgpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICBhdXRvIHNob3J0TG9uZyA9IHsg
InNob3J0IiwgImxvbmciIH07CiAKICAgICBTdHJpbmcgd2Vla2RheSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSwgbmFycm93U2hvcnRM
b25nLCAid2Vla2RheSBtdXN0IGJlIFwibmFycm93XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIi
LCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF3ZWVrZGF5
LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh3ZWVrZGF5ID09ICJuYXJyb3ciKQpAQCAtNTI2LDcg
KzUyNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9
CiAKICAgICBTdHJpbmcgZXJhID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lcmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFlcmEuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGVyYSA9PSAi
bmFycm93IikKQEAgLTUzOCw3ICs1MzksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHllYXIgPSBpbnRsU3RyaW5nT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywg
InllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXllYXIuaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKHllYXIgPT0gIjItZGlnaXQiKQpAQCAtNTQ4LDcgKzU0OSw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgbW9udGgg
PSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRo
LCB0d29EaWdpdE51bWVyaWNOYXJyb3dTaG9ydExvbmcsICJtb250aCBtdXN0IGJlIFwiMi1kaWdp
dFwiLCBcIm51bWVyaWNcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51
bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1vbnRoLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmIChtb250aCA9PSAiMi1kaWdpdCIpCkBAIC01NjQsNyArNTY1LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGRheSA9PSAiMi1kaWdpdCIpCkBAIC01
NzQsNyArNTc1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAog
ICAgIH0KIAogICAgIFN0cmluZyBob3VyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCB0d29EaWdpdE51bWVyaWMsICJob3VyIG11c3QgYmUg
XCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVkIGhvdXIxMiB0byBtYWtlIHRoZSBob3VyIHNrZWxl
dG9uIHBhdHRlcm4gZGVjaXNpb24sIHNvIGRvIHRoaXMgZWFybHkuCkBAIC01ODIsNyArNTgzLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIGJvb2wgaXNI
b3VyMTJVbmRlZmluZWQ7CiAgICAgYm9vbCBocjEyID0gaW50bEJvb2xlYW5PcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEyLCBpc0hvdXIxMlVuZGVmaW5lZCk7CiAg
ICAgLy8gMzMuIFJldHVybklmQWJydXB0KGhyMTIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghaG91ci5pc051bGwoKSkgewpAQCAtNjA1LDcgKzYwNiw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcg
bWludXRlID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5taW51dGUsIHR3b0RpZ2l0TnVtZXJpYywgIm1pbnV0ZSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9y
IFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbWludXRlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtaW51dGUgPT0gIjItZGlnaXQi
KQpAQCAtNjE1LDcgKzYxNiw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgc2Vjb25kID0gaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNl
Y29uZCBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc2Vjb25kLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChzZWNvbmQgPT0gIjItZGlnaXQiKQpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgdGlt
ZVpvbmVOYW1lID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT50aW1lWm9uZU5hbWUsIHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0IGJlIFwic2hv
cnRcIiBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIXRpbWVab25lTmFtZS5pc051bGwoKSkgewogICAgICAgICBpZiAodGltZVpvbmVO
YW1lID09ICJzaG9ydCIpCkBAIC02MzksNyArNjQwLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDI2LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24o
b3B0aW9ucywgImZvcm1hdE1hdGNoZXIiLCAic3RyaW5nIiwgwqsiYmFzaWMiLCAiYmVzdCBmaXQi
wrssICJiZXN0IGZpdCIpLgogICAgIGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+Zm9ybWF0TWF0Y2hlciwgeyAiYmFzaWMiLCAiYmVzdCBmaXQiIH0sICJm
b3JtYXRNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwiYmFzaWNcIiBvciBcImJlc3QgZml0XCIiLCAi
YmVzdCBmaXQiKTsKICAgICAvLyAyNy4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIHVzZSBJQ1UgZGF0ZSBmb3JtYXQg
Z2VuZXJhdG9yLCByYXRoZXIgdGhhbiBvdXIgb3duIHBhdHRlcm4gbGlzdCBhbmQgbWF0Y2hlci4K
QEAgLTgzNCwxNSArODM1LDE3IEBAIGNvbnN0IGNoYXIqIEludGxEYXRlVGltZUZvcm1hdDo6dGlt
ZVpvbmUKIAogSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4
ZWNTdGF0ZSYgZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTIuMy41IEludGwuRGF0ZVRp
bWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5k
IGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZiBjb25zdHJ1Y3RlZCBieSBhbiBvYmplY3QgbGl0ZXJh
bCBhc3NpZ25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgdGhlIHZhbHVl
IG9mIHRoZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1h
dCBvYmplY3QgKHNlZSAxMi40KTogbG9jYWxlLCBjYWxlbmRhciwgbnVtYmVyaW5nU3lzdGVtLCB0
aW1lWm9uZSwgaG91cjEyLCB3ZWVrZGF5LCBlcmEsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1p
bnV0ZSwgc2Vjb25kLCBhbmQgdGltZVpvbmVOYW1lLiBQcm9wZXJ0aWVzIHdob3NlIGNvcnJlc3Bv
bmRpbmcgaW50ZXJuYWwgc2xvdHMgYXJlIG5vdCBwcmVzZW50IGFyZSBub3QgYXNzaWduZWQuCiAg
ICAgLy8gTm90ZTogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBFQ01BU2NyaXB0IDIwMTUgSW50ZXJu
YXRpb25hbGl6YXRpb24gQVBJLCB0aGUgdGltZVpvbmUgcHJvcGVydHkgd2lsbCBiZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgaWYgbm8gdGltZVpvbmUgcHJvcGVydHkgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zIG9iamVjdCBwcm92aWRlZCB0byB0aGUgSW50bC5EYXRlVGlt
ZUZvcm1hdCBjb25zdHJ1Y3Rvci4gVGhlIHByZXZpb3VzIHZlcnNpb24gbGVmdCB0aGUgdGltZVpv
bmUgcHJvcGVydHkgdW5kZWZpbmVkIGluIHRoaXMgY2FzZS4KICAgICBpZiAoIW1faW5pdGlhbGl6
ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhl
YywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05vbnRyaXZpYWxTdHJpbmco
JmV4ZWMsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2NhbGVuZGFyKSk7
CkBAIC04ODksNyArODkyLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChF
eGVjUwogICAgIC8vIDEyLjMuNCBGb3JtYXREYXRlVGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVD
TUEtNDAyIDIuMCkKICAgICBpZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAg
ICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIC8vIDEuIElmIHggaXMg
bm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMS4yIEludGwuRGF0ZVRpbWVGb3JtYXQgKFtsb2NhbGVz
IFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMg
dW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBl
bHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIuIExldCBkYXRlVGltZUZv
cm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRhdGVUaW1lRm9y
bWF0KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9y
bWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVyZSk7
CisgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZv
cm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7
CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVUaW1lRm9y
bWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00
MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9y
bWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVk
TG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxT
dHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZTo6ZmluaXNoCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxE
YXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAvLyAxMi4zLjQgRGF0ZVRpbWUgRm9ybWF0IEZ1bmN0aW9ucyAoRUNNQS00
MDIgMi4wKQogICAgIC8vIDEuIExldCBkdGYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4g
QXNzZXJ0OiBUeXBlKGR0ZikgaXMgT2JqZWN0IGFuZCBkdGYgaGFzIGFuIFtbaW5pdGlhbGl6ZWRE
YXRlVGltZUZvcm1hdF1dIGludGVybmFsIHNsb3Qgd2hvc2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTEw
MSw3ICsxMDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAg
ICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9IGRh
dGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4KLSAg
ICAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xNDAsNyArMTQyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3Vu
ZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQg
PSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0
T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0
Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSW50bE51bWJlckZv
cm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVzdGVkTG9j
YWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAgIC8vIDQu
IFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgpAQCAtMTc3
LDcgKzE3Nyw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0
dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLC
uywgImJlc3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAi
LCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIg
b3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxNi4gTGV0IHMgYmUgR2V0
T3B0aW9uKG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAiZGVjaW1hbCIsICJwZXJjZW50
IiwgImN1cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmluZyBzdHlsZVN0cmluZyA9IGlu
dGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IiB9LCAic3R5bGUg
bXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBcImN1cnJlbmN5XCIi
LCAiZGVjaW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0
byBzLgogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE5LiBM
ZXQgYyBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMjQuIExl
dCBjZCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5RGlzcGxheSIsICJzdHJpbmciLCDC
qyJjb2RlIiwgInN5bWJvbCIsICJuYW1lIsK7LCAic3ltYm9sIikuCiAgICAgU3RyaW5nIGN1cnJl
bmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3lt
Ym9sIiwgIm5hbWUiIH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIs
IFwic3ltYm9sXCIsIG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIC8vIDI1LiBSZXR1cm5J
ZkFicnVwdChjZCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAyNi4gSWYg
cyBpcyAiY3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3VycmVuY3lEaXNwbGF5XV0gdG8g
Y2QuCiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4
LiBSZXR1cm5JZkFicnVwdChtbmlkKS4KICAgICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21p
bmltdW1JbnRlZ2VyRGlnaXRzXV0gdG8gbW5pZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmlt
dW1JbnRlZ2VyRGlnaXRzOwogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDMyLiBSZXR1cm5JZkFicnVwdChtbmZkKS4K
ICAgICAvLyAzMy4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1GcmFjdGlvbkRpZ2l0c11dIHRv
IG1uZmQuCiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVt
RnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMg
PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CiAKQEAgLTMwMCwyMCArMzAwLDIwIEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzNi4gUmV0dXJuSWZBYnJ1
cHQobXhmZCkuCiAgICAgLy8gMzcuIFNldCBudW1iZXJGb3JtYXQuW1ttYXhpbXVtRnJhY3Rpb25E
aWdpdHNdXSB0byBteGZkLgogICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGlu
dGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1h
eGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAK
ICAgICAvLyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMiKS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0
aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9w
dGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEu
IFJldHVybklmQWJydXB0KG14c2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyA0Mi4gSWYgbW5zZCBpcyBub3QgdW5kZWZpbmVkIG9yIG14c2QgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgbW5zZCBiZSBHZXROdW1iZXJPcHRpb24o
b3B0aW9ucywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIsIDEsIDIxLCAxKS4KICAgICAgICAg
dW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtbnNk
KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBj
LiBMZXQgbXhzZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyIsIG1uc2QsIDIxLCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhz
ZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8g
ZS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERpZ2l0c11dIHRvIG1uc2Qu
CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25pZmljYW50
RGlnaXRzOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlh
bGl6ZU51bWJlckYKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1c2VHcm91cGluZyA9
IHRydWU7CiAgICAgLy8gNDQuIFJldHVybklmQWJydXB0KGcpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1c2VHcm91cGluZ11dIHRv
IGcuCiAgICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwpAQCAtMzYyLDExICszNjIsMTQg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogCiB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmNyZWF0ZU51bWJlckZvcm1hdChFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgQVNTRVJUKCFtX251bWJlckZvcm1hdCk7CiAKICAgICBpZiAoIW1faW5p
dGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChz
dGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAg
LTQ4MCw2ICs0ODMsOSBAQCBjb25zdCBjaGFyKiBJbnRsTnVtYmVyRm9ybWF0OjpjdXJyZW5jeURp
CiAKIEpTT2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1h
dC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUg
ZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmli
dXRlcyBhcmUgc2V0IGFzIGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVy
YWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAt
NDkxLDEwICs0OTcsOSBAQCBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRp
CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlh
bGl6ZU51bWJlckZvcm1hdChzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9j
YWxlLCBqc1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bWJlcmluZ1N5c3RlbSIpLCBqc1N0
cmluZygmc3RhdGUsIG1fbnVtYmVyaW5nU3lzdGVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaXNoCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMS4yIElu
dGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAg
ICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUg
YWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4K
ICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVj
dG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVy
bklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rh
cmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxl
ZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0
KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0
cnVjdHVyZSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQp
OwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0
LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmdlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3Rh
dGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjAp
CiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2
YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEludGxOdW1iZXJGCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNiArODIsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5j
Rm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEx
LjMuNCBGb3JtYXQgTnVtYmVyIEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExl
dCBuZiBiZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUobmYpIGlzIE9i
amVjdCBhbmQgbmYgaGFzIGFuIFtbaW5pdGlhbGl6ZWROdW1iZXJGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlICB0cnVlLgpAQCAtOTEsNyArOTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFs
dWUpLgogICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3Rh
dGUpOwogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDYuIFJldHVy
biBGb3JtYXROdW1iZXIobmYsIHgpLgpAQCAtMTI4LDcgKzEzMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91
bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0
ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdl
dE9iamVjdCwgbmYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYt
PnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsOSBAQCB2b2lkIGNvbnZlcnRJQ1VMb2NhbGVUb0JDUDQ3TGFuZ3VhZ2VU
YWcoCiAKIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBv
cHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJvb2wmIHVzZXNGYWxsYmFjaykKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5
cGUsIHZhbHVlcywgZmFsbGJhY2spCiAgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLiB2YWx1ZXMg
aXMgYWx3YXlzIHVuZGVmaW5lZC4KIApAQCAtMTMwLDE0ICsxMzMsMTQgQEAgYm9vbCBpbnRsQm9v
bGVhbk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLAogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9u
cy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBi
ZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0
YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW4KQEAgLTE3MiwxNCArMTc1LDE0IEBAIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9P
YmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChv
cHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHBy
b3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTE5Miw3ICsxOTUsNyBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVj
U3RhdGUmIHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAvLyBk
LiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjIwLDE0ICsyMjMsMTQgQEAg
dW5zaWduZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgIEpTT2JqZWN0KiBv
cHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1
cHQob3B0cykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gMy4gTGV0
IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMt
PmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVl
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0yMzUsNyArMjM4LDcgQEAgdW5zaWduZWQgaW50bE51
bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyAxLiBJZiB2YWx1
ZSBpcyBOYU4gb3IgbGVzcyB0aGFuIG1pbmltdW0gb3IgZ3JlYXRlciB0aGFuIG1heGltdW0sIHRo
cm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIGlmICghKGRvdWJsZVZhbHVlID49
IG1pbmltdW0gJiYgZG91YmxlVmFsdWUgPD0gbWF4aW11bSkpIHsKQEAgLTU1NiwxNiArNTU5LDE2
IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9CiAKICAg
ICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAi
bGVuZ3RoIikpLgogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQ
cm9wZXJ0eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUg
YmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KQEAgLTU4MSw3ICs1ODQsNyBAQCBWZWN0b3I8U3RyaW5n
PiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2Nh
bGVzT2JqZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVy
bklmQWJydXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1
ZSwgdGhlbgpAQCAtNTkwLDcgKzU5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+
Z2V0KCZzdGF0ZSwgayk7CiAKICAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFs
dWUpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkg
aXMgbm90IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KQEAg
LTYwMyw3ICs2MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4
CiAgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAK
ICAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKHRhZykg
aXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkBAIC05MzMsNiArOTM2LDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogewogICAgIC8vIDku
Mi44IFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICAvLyAxLiBJ
ZiBvcHRpb25zIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTk0MCw3ICs5NDQsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBt
YXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDC
qyAibG9va3VwIiwgImJlc3QgZml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIg
PSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2Nh
bGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3Qg
YmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgpAQCAtOTYwLDcgKzk2NCw3IEBA
IEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9y
dGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlG
cm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KQEAgLTk2OSw3ICs5NzMsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vi
c2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZz
dGF0ZSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+
Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExv
Y2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tp
XSwgZGVzYywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFi
cnVwdCBjb21wbGV0aW9uLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTUgKzQwLDE3IEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0
aFdvcmthcm8KICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxp
dHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBpZiAoIWpzRHluYW1pY0Nhc3Q8SW50bEluc3RhbmNlKj4odGhpc1ZhbHVlKSkgewogICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUpOwogICAgICAgICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIEludGxJbnN0YW5jZSogaW5zdGFuY2UgPSBmYWN0b3J5KHZtKTsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3Rh
bmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQ2FsbERh
dGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUgaXRlcmF0
b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAg
ICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5l
eHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXJlc3Vs
dC5pc09iamVjdCgpKQpAQCAtODAsMTEgKzgwLDE0IEBAIGJvb2wgaXRlcmF0b3JDb21wbGV0ZShF
eGVjU3RhdGUqIGV4ZWMsIEoKIAogSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGl0ZXJhdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmIChkb25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKQEAgLTk3LDEyICsx
MDAsMTMgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0
b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkgewpAQCAtMTI5LDcgKzEzMyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKQEAgLTE2Nyw3ICsx
NzEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgaXRl
cmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5pdGVyYXRvclN5bWJvbCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIAogICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTE3OSw3
ICsxODMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAKICAg
ICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
ciA9IGNhbGwoc3RhdGUsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlw
ZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFy
Z3VtZW50cyk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAg
aWYgKCFpdGVyYXRvci5pc09iamVjdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQ3LDIwICs0OCwyMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbEJh
Y2tUeXBlPgogdm9pZCBmb3JFYWNoSW5JdGVyYWJsZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IGl0ZXJhYmxlLCBjb25zdCBDYWxsQmFja1R5cGUmIGNhbGxiYWNrKQogewogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGl0ZXJhdG9yRm9ySXRlcmFibGUoc3RhdGUsIGl0
ZXJhYmxlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChzdGF0ZSwgaXRlcmF0b3IpOwotICAgICAg
ICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgdm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChuZXh0
LmlzRmFsc2UoKSB8fCBVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKHN0YXRl
LCBuZXh0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNh
bGxiYWNrKHZtLCBzdGF0ZSwgbmV4dFZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDcgQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlM
ZW5ndGgoKSAtIDE7CiAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCiAgICAgaWYgKCFk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CkBAIC02NDMsNyArNjQz
LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAK
ICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0
aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUp
OwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFy
cmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAg
ICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAg
ICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
Njk1LDcgKzY5NSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgYm9v
bCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSwgcHV0UmVzdWx0KSkgewot
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBvbGRMZW5ndGggPCAweEZG
RkZGRkZGdSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3Ro
IDwgMHhGRkZGRkZGRnUpCiAgICAgICAgICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIG9sZExlbmd0
aCArIDEsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MzEsNyAr
NzMxLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAg
ICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAg
IG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgo
KSwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAg
NiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTExOTAsNiArMTE5MCw5IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpID0g
b2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwogICAgIHVuc2lnbmVk
IHZlY3RvckVuZDsKQEAgLTEyNTUsNyArMTI1OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGV4ZWMs
IGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMg
aW4gZmFjdCBjb3JyZWN0IHRvIHNheQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIFN0cnVjdHVyZSog
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CiAgICAgCiAgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwyNCArNzAsMjYgQEAgaW5saW5lIGJvb2wgSlNBcnJheTo6Y2Fu
RmFzdENvcHkoVk0mIHZtLAogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNB
cnJheShvYmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgo
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iai0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvVUlu
dDMyKGV4ZWMpOwogfQogCiBBTFdBWVNfSU5MSU5FIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNBcnJheShv
YmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iai0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gUE5hTjsKICAgICByZXR1cm4gbGVuZ3RoVmFsdWUudG9MZW5ndGgoZXhlYyk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw4ICsxMjYs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlCiAKIGlubGluZSBT
dHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlv
bikKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IHRhcmdldEpTRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRGdW5j
dGlvbik7CiAKQEAgLTE1OCw2ICsxNTksNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0CiAKIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTQXJyYXkqIGJvdW5k
QXJncywgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3RE
YXRhKHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBib29sIGNhbkNvbnN0cnVj
dCA9IGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZTsKQEAgLTE3MCw3ICsxNzIs
NyBAQCBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAgICAgIGNh
bkNvbnN0cnVjdCA/IChzbG93Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwKICAgICAgICAgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0dXJlKHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQm91bmRGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSogCiAgICAgICAgIH0KIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4
ZWMKICAgICAKICAgICBKU09iamVjdCogcHJvdG90eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwpAQCAtMzc4LDExICszNzgsMTEgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nh
c2UoRXhlYwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gYXND
ZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U1N0cmluZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIGlubGluZSBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHRvUHJlZmVycmUKICAgICB9CiAKICAgICBTdHJpbmdJbXBsKiBoaW50
U3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiAKICAgICBpZiAoV1RGOjpl
cXVhbChoaW50U3RyaW5nLCAiZGVmYXVsdCIpKQpAQCAtNzg0LDggKzc4NCw5IEBAIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxi
YWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9v
ZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNW
YWx1ZTo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxs
YmFjaykgY29uc3QKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBib29sIGZvdW5kID0gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC04OTcsNiArODk4LDcgQEAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6ZXF1YWwoRXhlY1N0YXRlKiBleAogQUxXQVlTX0lOTElORSBi
b29sIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiB2MS5hc051
bWJlcigpID09IHYyLmFzTnVtYmVyKCk7CkBAIC05MjQsNyArOTI2LDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogICAgICAgICAgICAgaWYgKHYyLmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogICAgICAgICAgICAgSlNWYWx1
ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MSA9IHAxOwogICAg
ICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkBAIC05MzQsNyArOTM2
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogCiAgICAgICAg
IGlmICh2Mi5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9Qcmlt
aXRpdmUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHYyID0gcDI7CiAgICAgICAgICAgICBpZiAodjEu
aXNJbnQzMigpICYmIHYyLmlzSW50MzIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDE0ICsxMzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0
aGUgYnl0ZU9mZnNldCkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wg
bGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQg
YW5kIHZhbHVlKSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25l
ZCBkYXRhU2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKQEAgLTE5MSwxNCAr
MTkxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0g
dTsKIAogICAgIHUudmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRpYW4g
PSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw2ICs1OTAsOSBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKFZNJiB2bSwgCiAKIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1l
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8v
IFRoZSAibmFtZSIgcHJvcGVydHkgbWF5IGhhdmUgYmVlbiBhbHJlYWR5IGJlZW4gZGVmaW5lZCBh
cyBwYXJ0IG9mIGEgcHJvcGVydHkgbGlzdCBpbiBhbgogICAgIC8vIG9iamVjdCBsaXRlcmFsIChh
bmQgdGhlcmVmb3JlIHJlaWZpZWQpLgogICAgIGlmIChoYXNSZWlmaWVkTmFtZSgpKQpAQCAtNjA1
LDEyICs2MDgsMTEgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygm
dWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4
ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5
TmFtZShleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1Zh
bHVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTQgKzg5LDE0IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9y
YWdlOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9y
U3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMs
IG5leHQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBzdG9yYWdlLmFwcGVuZChuZXh0SXRlbSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBA
QCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIHN0b3JhZ2Uuc2l6ZSgpKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0
SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChpKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIs
NyArMTYyLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAg
ICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgICAgICAvLyBXZSB3b3VsZCBsaWtlIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFz
IGl0IGlzIHBhaW5mdWxseSBzbG93LiBGb3J0dW5hdGVseSwgdW5sZXNzCkBAIC0xODMsMjEgKzE4
MywyMSBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmd1bWVudHM7CiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdG
cm9tSXRlcmF0b3I8Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAw
IDogbGVuZ3RoU2xvdC5nZXRWYWx1ZShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIAogICAgICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjM1LDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRTdHJ1Y3R1cmUgPSBmdW5jdGlv
bi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIHBh
cmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKQEAgLTI1MiwxMiArMjUyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9wdDsKICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYgYXJnQ291
bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIp
IHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvVUlu
dDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY29u
c3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBpbmxpbmUgSlNBcnJh
eUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVz
ID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3lt
Ym9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3Bl
Y2llcy5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVj
dG9yKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBh
cmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihyZXN1bHQpKSB7CkBAIC0xNDcsNyArMTQ3
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuNQpAQCAtMTU3LDEzICsxNTYsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBs
ZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIGxvbmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGV4ZWMsIDIsIGxlbmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQpAQCAtMTgz
LDcgKzE4Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpz
Q2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CkBAIC0xOTgsNyArMTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEpTVmFsdWUgdmFs
dWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTIwOSw3ICsyMDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBB
U1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlm
IChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0y
MzAsNyArMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMTMKQEAgLTI0NSw3ICsy
NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBK
U1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTI1NSw3ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xh
c3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7
CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAt
MjY5LDcgKzI2Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
IHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganND
YXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTI4MiwxMSArMjc4LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKCpleGVjLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAg
am9pbmVyLmFwcGVuZCgqZXhlYywgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CkBAIC0yOTksNyArMjk1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5n
KiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0zMTAsNyArMzA2LDYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8v
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjE2CkBAIC0zMzgsNyArMzMzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICAgICAgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQogCi0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0
LT5pc05ldXRlcmVkKCkpCkBAIC0zNDksNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CiAKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9
IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRl
eCkgewpAQCAtNDMyLDcgKzQyNyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4yNgpAQCAt
NDQ1LDEwICs0MzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAg
IHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAt
NDY3LDcgKzQ2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50
eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAg
ICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkp
OwpAQCAtNTE4LDcgKzUxMiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMu
MjMKQEAgLTUzNyw5ICs1MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVtYmVyKCkpOwogICAgIEFT
U0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDEp
LmlzTnVtYmVyKCkpOwogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB1bnNpZ25lZCBl
bmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5n
dGgsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSk7CiAKQEAgLTU3Miw3ICs1NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3Ms
ICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxNSwxMiArODE1LDE0IEBAIGlubGluZSBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVt
cHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0g
MCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+PSBNSU5f
QVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKQogICAgICAgICBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAg
ICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCkpOwpAQCAtODMzLDggKzgzNSwxMCBAQCBp
bmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzKSk7CiB9CkBAIC04NDYsOCArODUwLDEwIEBA
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQog
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJv
ZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9y
KHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgp
KTsKIH0KQEAgLTg1OSw4ICs4NjUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4
ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVk
IGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2
ICs2NCw5IEBAIFJlZjxNaWNyb3Rhc2s+IGNyZWF0ZUpTSm9iKFZNJiB2bSwgSlNWYWwKIAogdm9p
ZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0YTsKICAgICBDYWxsVHlwZSBoYW5kbGVyQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxEYXRhKTsKICAgICBBU1NF
UlQoaGFuZGxlckNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKQEAgLTcyLDcgKzc1LDcgQEAg
dm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYwogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwLCBsZW5ndGggPSBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7IGluZGV4IDwgbGVu
Z3RoOyArK2luZGV4KQogICAgICAgICBoYW5kbGVyQXJndW1lbnRzLmFwcGVuZChtX2FyZ3VtZW50
cy0+SlNBcnJheTo6Z2V0KGV4ZWMsIGluZGV4KSk7CiAgICAgcHJvZmlsZWRDYWxsKGV4ZWMsIFBy
b2ZpbGluZ1JlYXNvbjo6TWljcm90YXNrLCBtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxUeXBlLCBo
YW5kbGVyQ2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGhhbmRsZXJBcmd1bWVudHMpOwotICAgIGV4
ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcgKzc4LDE5IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKIAogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
TW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVu
dCo+KGNlbGwpOwogICAgIEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0
aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIGlmIChyZXNvbHV0aW9u
LnR5cGUgPT0gSlNNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAg
ICAgICAgIC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhl
IGltcG9ydGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAg
ICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNv
bHV0aW9uLm1vZHVsZVJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKICAgICAgICAgUHJvcGVy
dHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9j
YWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAgICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9k
dWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9y
dGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVj
dFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAg
QVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVlKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
cmVkaXJlY3RTbG90LmdldFZhbHVlKGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lKTsKLSAgICAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgcmVkaXJlY3RTbG90LmF0dHJpYnV0ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwx
MyArMTQ5LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2gKICAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMs
IGtleSksICJcbiIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGlmIChnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQog
ICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5t
b2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgaW5pdGlhdG9y
KTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBt
b2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OkpTTW9kdWxlTmFtZXNwYQogdm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3Jk
LCBjb25zdCBJZGVudGlmaWVyU2V0JiBleHBvcnRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKQEAg
LTgxLDcgKzgyLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl
Yy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUt
bmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZlbnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFi
bGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogfQogCiB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKQEAgLTEzNiw3ICsxMzcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpnZXRPd25Qcm9wCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKIAogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdHJhbXBvbGluZVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBmaWxsZWQgd2l0aCBURFogdmFsdWUsIHRocm93IGEgcmVmZXJlbmNlIGVycm9yLgogICAgICAg
ICBpZiAoIXZhbHVlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
OSw3ICs3NzksNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAg
ICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhvc3RSZXNvbHZlSW1wb3J0
ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7CiAgICAgICAgIGlmIChp
bXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpIHsKICAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3QgPSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIGltcG9ydEVudHJ5LmxvY2FsTmFtZSwgbmFtZXNwYWNlT2JqZWN0LCAvKiBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUs
IHB1dFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNiArMjIwLDE4IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAsIG1fcmVwbGFj
ZXJDYWxsVHlwZShDYWxsVHlwZTo6Tm9uZSkKICAgICAsIG1fZ2FwKGdhcChleGVjLCBzcGFjZS5n
ZXQoKSkpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCFtX3JlcGxhY2VyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3JlcGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRz
KEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVl
OwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+IGFycmF5ID0gbV9yZXBsYWNlci5hc09iamVjdCgp
OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgbmFtZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBpZiAobmFtZS5pc09iamVjdCgpKSB7CkBAIC0yNDgsMzYgKzI1MCwzOSBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAKIExvY2FsPFVua25vd24+IFN0cmlu
Z2lmaWVyOjpzdHJpbmdpZnkoSGFuZGxlPFVua25vd24+IHZhbHVlKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0g
ICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtu
b3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsK
IAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdChtX2V4ZWMtPnZtKCksIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIsIHZhbHVlLmdldCgpKTsKKyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwg
ZW1wdHlQcm9wZXJ0eU5hbWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
LCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBw
ZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJv
cGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBMb2NhbDxV
bmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgp
LCBqc051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmlu
ZWQoKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U09OKEpTVmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJv
cGVydHlOYW1lKQogewotICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXQpOwogICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3QpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAg
ICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvSlNPTik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBy
ZXR1cm4gdG9KU09OSW1wbCh2YWx1ZSwgdG9KU09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9
CkBAIC0zMDEsNyArMzA2LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogCiAgICAgLy8gQ2FsbCB0aGUgdG9KU09OIGZ1bmN0aW9uLgogICAgIHZhbHVlID0gdG9K
U09OKHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5
RmFpbGVkOwogCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uCkBAIC0zMTAsNyAr
MzE1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAg
ICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFsdWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5n
ZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBtX3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJn
cyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAg
ICAgfQogCkBAIC0zMjQsNyArMzI5LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBT
dHJpbmdpZmllcgogCiAgICAgdmFsdWUgPSB1bndyYXBCb3hlZFByaW1pdGl2ZShtX2V4ZWMsIHZh
bHVlKTsKIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKSB7CkBAIC0zNzcsMTQgKzM4MiwxNCBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1w
dHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHkoKTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChI
b2xkZXIodm0sIG1fZXhlYywgb2JqZWN0KSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKIAogICAgIGRvIHsKICAgICAgICAgd2hpbGUg
KG1faG9sZGVyU3RhY2subGFzdCgpLmFwcGVuZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikp
IHsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lm
eUZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBtX2hvbGRlclN0YWNrLnJlbW92ZUxhc3QoKTsK
QEAgLTQzNiw2ICs0NDEsOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zaXplKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZpcnN0IHRpbWUg
dGhyb3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKQEAgLTQ0NCw3ICs0NTEs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAg
ICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29i
amVjdC5nZXQoKSktPmxlbmd0aCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0
LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00NTIsNyArNDU5
LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAg
ICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5n
ZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9i
amVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Niw3
ICs0OTMsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIApAQCAtNTA0LDcgKzUxMSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVp
bGRlci5sZW5ndGgoKTsKQEAgLTY0MCw3ICs2NDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xv
dC5nZXRWYWx1ZShtX2V4ZWMsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC02NTgsNyArNjY1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxr
KEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpLCBmaWx0ZXJlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAg
ICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTY3NSw3ICs2ODIsNyBAQCBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpAQCAtNjk4LDcgKzcwNSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBi
ZSBtb2RpZmllZCBieSB0aGUgcmV2aXZlciBmdW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJv
dwotICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTcxNyw3ICs3MjQsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBtX2V4ZWMsIHByb3ApOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0
LCBtX2V4ZWMsIHByb3AsIGZpbHRlcmVkVmFsdWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdv
dG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTc1NCw3ICs3NjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUg
cGFyYW1ldGVyIikpKTsKICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIC8vIDMuIEVTNiBQcm94eS4K
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBvd25EZXNjcmlwdG9yOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDcs
MTMgKzQ0OCwxMyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBvd25EZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5
XV0oUCkuCiAgICAgICAgIGJvb2wgb3duRGVzY3JpcHRvckZvdW5kID0gY3VycmVudC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgb3duRGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQpIHsKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1h
IExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJvdG90eXBlT2ZdXSgpLgogICAgICAgICAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4K
QEAgLTQ4NSw3ICs0ODYsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJlY2VpdmVy
KTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsKICAgICAg
ICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3Ip
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZp
bmVkLCB0aGVuCkBAIC0xMzYxLDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5
cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVu
c2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CkBAIC0xNjIxLDcgKzE2MjIsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29w
ZS5leGNlcHRpb24oKTsKICAgICBpZiAoZnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09
IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAt
MTY0OSw3ICsxNjUwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Qcmlt
aQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAg
QVNTRVJUKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBtb2RlID09IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgp
IDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLnRvUHJp
bWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIpKTsKQEAgLTE2ODcsNyArMTY4OCw3IEBAIEpTVmFs
dWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoRXgKICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJObyBkZWZhdWx0IHZhbHVlIikpOwogfQpAQCAtMTc4
Nyw3ICsxNzg4LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFvYmplY3RWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTgwOSwxMiArMTgxMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByaXZhCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBK
U1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODI2LDEwICsxODI4LDEwIEBAIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBy
b3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTkyNywxNiArMTkyOSwyMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtCiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9Qcmlt
aXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5jcHAKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJl
cihleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1p
dGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwog
fQpAQCAtMzExMywxNSArMzExOSwxOCBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURl
c2NyaXB0b3IoCiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZt
ICA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRl
ZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBk
ZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAog
ICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBk
ZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxl
dGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZs
YWcgdG8gbWFrZSB0aGlzIHdvcmsuCi0gICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKGV4ZWMtPnZtKCksIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJs
ZSk7CisgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwogICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgIGJvb2wgaXNFeHRlbnNp
YmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRl
c2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0K
QEAgLTMyMjEsMTIgKzMyMzAsMTMgQEAgdm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVy
dHlOYW1lcwogdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVk
ZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzIzOCwxMCArMzI0OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90
b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVh
azsKQEAgLTMyNTcsNyArMzI2Nyw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFtZXRob2QuaXNDZWxsKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE2IEBAIHZvaWQgY3Jl
YXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1
ZT4gcmVzdWx0OwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4
ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNE
b3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3Vi
bGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3Ro
QXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhl
YywgaW5kZXgpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKQEAg
LTk1LDggKzk1LDEwIEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EK
IHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQ
cm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2Fs
bGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ym9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC0x
MDQsNiArMTA2LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYQog
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0
UHJvdG90eXBlOwpAQCAtMTExLDE0ICsxMTQsMTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1
cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFw
cm90b3R5cGUuaXNPYmplY3QoKSkKQEAgLTEzMyw2ICsxMzYsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAg
IE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBl
ID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTE0NCw3ICsxNDgsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMTUyLDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9u
SW5kZXgKICAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVj
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5w
cm9taXNlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpj
cmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBA
QCBwcml2YXRlOgogaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1l
RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDMyX3QgaW5kZXhlZExlbmd0aCA9IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKTsKIApAQCAtMTE5LDE4ICsxMjAsMTggQEAg
aW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydAogCiAgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCiAg
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFz
ZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2
ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNv
IGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxp
bmRleGVkTGVuZ3RofCB0byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwx
MCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
cHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVu
dW1lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTYgKzIwMCwxOCBAQCBKU09iamVj
dCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlCiAvLyBXaGVuIGFuIGV4Y2VwdGlvbiBv
Y2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UuCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2
bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF1bnNjb3BhYmxlcy5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSBibG9ja2VkID0ganND
YXN0PEpTT2JqZWN0Kj4odW5zY29wYWJsZXMpLT5nZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBibG9ja2VkLnRvQm9v
bGVhbihleGVjKTsKQEAgLTIxNyw2ICsyMTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNj
b3BhYmxlKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZN
JiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwog
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOwogICAgIHdoaWxlICgx
KSB7CkBAIC0yMzksNyArMjQzLDcgQEAgSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0
YXRlKiBleAogICAgICAgICBpZiAob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsK
ICAgICAgICAgICAgIGlmICghaXNVbnNjb3BhYmxlKGV4ZWMsIHNjb3BlLCBvYmplY3QsIGlkZW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghZXhlYy0+aGFkRXhjZXB0aW9uKCksICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1
cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UiKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5z
Y29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDkgKzc0LDExIEBAIHZvaWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25z
dCBKU0NlbGwKIAogYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBvdGhlcikgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgc3RyMSA9
IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzdHIyID0gb3RoZXItPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0
cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihF
eGVjU3RhdGUmIAogICAgIEFTU0VSVChtX3N0cmluZ3Muc2l6ZSgpIDw9IG1fc3RyaW5ncy5jYXBh
Y2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFsZW5n
dGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2ICs1NzIsOCBAQCBU
b2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJz
ZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBz
dGF0ZSA9IGluaXRpYWxTdGF0ZTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFj
azsKICAgICBKU1ZhbHVlIGxhc3RWYWx1ZTsKQEAgLTU4Myw3ICs1ODUsNyBAQCBKU1ZhbHVlIExp
dGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICBzdGFydFBhcnNlQXJy
YXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0UGFyc2VBcnJheTogewogICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDApOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVu
ZChhcnJheSk7CiAgICAgICAgICAgICB9CkBAIC02ODEsNyArNjgzLDcgQEAgSlNWYWx1ZSBMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09IG1f
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlICE9IFN0cmljdEpTT04gJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFVu
ZGVyc2NvcmVQcm90by5hZGQob2JqZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhcnNlRXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8g
cmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwpAQCAtNjkzLDcgKzY5NSw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRlbnQpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQsIGxhc3RWYWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+dHlwZSA9PSBUb2tDb21tYSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3Ry
dWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTcxLDcgKzcx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24g
PSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBm
b3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIG5leHRJdGVtKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYgKCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIsOCArMTYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q2x6MzIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBkb3VibGUgbWF4ID0gMDsKICAgICBWZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFy
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
ICAgICAgICBpZiAoc3RkOjppc2luZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSkpOwpAQCAtMjkyLDggKzI5NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3Qg
bGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRl
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVs
ZUtleS5pbXBsKCkpOwpAQCAtMTQyLDEyICsxNDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVs
ZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBt
b2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5r
XSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
dmlzaXRDaGlsZHIKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNT
RVJUKGVycm9yU3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDkgKzg1LDExIEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFYKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVy
T2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9i
amVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9i
amVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbmV3VGFyZ2V0IGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQg
b2YgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAv
LyBTaW5jZSBpZiB3ZSBmb3VuZCB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3Qg
ZmFsbCBpbnRvIHRoZSB0eXBlIGNvbnZlcnNpb24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsx
MzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYg
KG5ld1RhcmdldCAmJiBuZXdUYXJnZXQgIT0gb2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAg
Ly8gYS4gUmV0dXJuID8gT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAi
JU9iamVjdFByb3RvdHlwZSUiKS4KICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJn
ZXQsIGdsb2JhbE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAg
ICB9CkBAIC0yMTEsOCArMjEzLDEwIEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90
b3R5cGVPZigKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4
ZWMsIG9iamVjdCkpOwogfQpAQCAtMjMxLDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dFZhbHVlKTsKIAogICAgIGlmICghY2hlY2tQcm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywg
b2JqZWN0KSkgewpAQCAtMjQxLDE2ICsyNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7
CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhl
YywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQo
ZGlkU2V0UHJvdG90eXBlLCB2bS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAg
IEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRT
ZXRQcm90b3R5cGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwog
fQogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3Jp
cHRvcik7CkBAIC0yNjEsMTkgKzI2NywyMSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlECiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmpl
Y3QqIGRlc2NyaXB0b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBp
ZiAoIWRpZEdldERlc2NyaXB0b3IpCkBAIC0yODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGRlc2NyaXB0b3JzKTsKICAgICAgICAgZGVzY3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1h
eUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMs
MTkgKzMwMSwyMyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JzKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAtMzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlv
biBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JH
ZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwog
fQpAQCAtMzIyLDggKzMzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBl
eGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0Nywy
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTog
VXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0
eUtleXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpA
QCAtMzYwLDQwICszODAsNDAgQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZQogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2Ny
aXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51
bWVyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVl
OwogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAg
IH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlw
dGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
ZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQp
KSB7CiAgICAgICAgIEpTVmFsdWUgZ2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoIWdldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTQwMywxMiArNDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBk
ZXNjLnNldEdldHRlcihnZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wg
dG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQpAQCAtNDQ1LDcgKzQ2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikp
OwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0
b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7
CkBAIC00NTMsNyArNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29y
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVm
aW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0
KiBwcm9wZXJ0aWVzKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGll
cyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0
aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNj
cmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
cHJvcCA9IHByb3BlcnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkKQEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNW
YWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsKICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pc1ByaXZhdGVOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3JzW2ldLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9i
amVjdDsKQEAgLTUzMSw2ICs1NTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmpl
Y3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0
LT5zZWFsKHZtKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0K
IAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBy
b3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1
cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwog
ICAgICAgICAvLyBjLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJl
dmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTU3NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9y
RnJlZXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhl
Yy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdDsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFt
ZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwx
NCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8v
IGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIHRvIGZhbHNlLgogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAg
ICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMo
b2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2
NDYsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmop
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBh
c09iamVjdChvYmopKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTYzOSw2ICs2NzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1Nl
YWxlZChleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CkBAIC02NzAsMTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAg
Ly8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBv
YmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAg
ICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVj
dCgpKQpAQCAtNjg0LDEyICs3MjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAg
aWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAK
ICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSAr
NzQ2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAv
LyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxz
ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4K
ICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iaik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5z
aWJsZSkpOwogfQpAQCAtNzM1LDEzICs3NzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVN
b2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRp
ZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFt
ZU1vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDgg
KzEwMSw5IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSAr
MTE1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09
IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB9CiB9CkBAIC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1Zh
bHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
CkBAIC0xNjAsNyArMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKQEAgLTE2OSw3ICsxNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhp
c1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsy
NTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJh
YmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpOwpAQCAtMjU0LDkgKzI2OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3Ry
aW5nKCkKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0
IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFs
dWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAv
LyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBA
IC0yOTIsNyArMzA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYg
dG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVj
LCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJp
bmdUYWcuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwpAQCAtMzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0
YWcgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRo
aXNPYmplY3QsIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2Jq
ZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ0LDExICs0NCwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dD
YXNlKENhbGxGCiB7CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4g
ZGVmYXVsdFZhbHVlKCkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1By
aW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldFVuZGVmaW5lZCgpCiBH
ZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3JpcHRvcjo6c2xvd0dldHRlclNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2dldHRlciAmJiAhbV9n
ZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIodm0s
IGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMjMgKzU2LDIzIEBAIFByb3h5Q29u
c3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJveHkucmV2b2NhYmxl
IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSB0YXJnZXQgYW5kIHRo
ZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBcmdMaXN0IGFy
Z3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUg
aGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmpl
Y3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFu
ZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tl
LCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIFBy
b3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0sIFN0cnVjdHUKIFN0cmluZyBQcm94eU9iamVj
dDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBj
b25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgICAgICBpZiAoaXNB
cnJheShleGVjLCB0YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuIHRhcmdldC0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4ZWMpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQs
IEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFuZGxlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTU1LDcg
KzE1Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0
SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwpAQCAtMTY5LDcgKzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZv
cm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiB0cmFwUmVzdWx0OwpAQCAt
MTc3LDggKzE3OCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRl
CiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhpcywgc2xvdC50aGlz
VmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0gMDsKICAgICBzbG90LnNldFZhbHVl
KHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwpAQCAtMjEyLDcgKzIxNSw3IEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5
RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2Fs
bFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFT
Q0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgp
OwpAQCAtMjIxLDcgKzIyNCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxs
KGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09i
amVjdCgpKSB7CkBAIC0yMzEsNyArMjM0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlu
dGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVz
Y3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRh
cmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewpAQCAtMjQ0LDcgKzI0Nyw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklY
TUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRv
bid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQ
cm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENvbWUg
dXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVjYXVz
ZQpAQCAtMjU4LDExICsyNjEsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcjsKICAgICB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBm
YWxzZTsKICAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwKQEAgLTI4MSw3ICsy
ODQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBp
ZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5z
bG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCB0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgZ2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYg
KHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpICYmICF0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMzIwLDcgKzMyMyw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGhhc01ldGhvZCA9IGhhbmRs
ZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMt
PmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3Jt
RGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0zMjksMTcgKzMzMiwxNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNW
YWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaXNQ
cm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Nyw3ICszNTAsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlBy
b3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0
JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSIpKTsKQEAgLTQyMCw3ICs0MjMs
NyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlm
IChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTQzMiwxMCArNDM1LDEwIEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1
dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzMsOCArNDc2LDkgQEAgYm9vbCBQcm94eU9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlYwogYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRl
eENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1
dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDgsNyArNTEyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJn
ZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTE5LDcgKzUy
Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAK
ICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0
PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKQEAgLTU1OCw3ICs1NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBB
U0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94
eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBA
IC01NjksMTQgKzU3MywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
ZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVj
LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3Qo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3Vs
dCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9i
amVjdCIpKTsKQEAgLTYxOSw3ICs2MjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVs
ZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZGVsZXRlUHJv
cGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAg
ICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTYyOSwxMSArNjMz
LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9T
YWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFz
Qm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCkBAIC02NDcsNyArNjUx
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNjkzLDcgKzY5Nyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJwcmV2ZW50
RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwoIidwcmV2ZW50RXh0ZW5zaW9ucycgcHJvcGVydHkg
b2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdl
dCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAt
NzAyLDE2ICs3MDYsMTYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNp
bwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBwcmV2ZW50
RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1
bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
dGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJl
dHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91
bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKQEAgLTc0Niw3ICs3NTAsNyBAQCBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2libGVNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVuc2libGUnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMt
PnRhcmdldCgpOwpAQCAtNzU2LDE1ICs3NjAsMTUgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2Fs
bChleGVjLCBpc0V4dGVuc2libGVNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNUYXJnZXRFeHRlbnNpYmxl
ID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sICE9IGlzVGFyZ2V0RXh0ZW5zaWJs
ZSkgewpAQCAtODEzLDE0ICs4MTcsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmlu
ZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2Qo
ZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZpbmVQcm9wZXJ0
eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blByb3BlcnR5KCk7CiAKICAgICBKU09iamVj
dCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTgyOCwxMSArODMyLDExIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3Jp
cHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQ
cm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wg
PSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtODQwLDExICs4NDQsMTEgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZp
bmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRv
RmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5j
b25maWd1cmFibGUoKTsKIApAQCAtOTAyLDcgKzkwNiw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMi
KSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTkxMyw3ICs5MTcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0T3duUHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9
IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQcm9wZXJ0eU5hbWVNb2Rl
IHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKQEAgLTk0MSw3ICs5NDUsNyBA
QCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgICAgICAgICBy
ZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUu
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRv
RXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwo
KSk7CkBAIC05NTAsMjEgKzk1NCwyMSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFy
cmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVy
YWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5
LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFBy
b3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogCiAgICAgUHJvcGVydHlOYW1lQXJy
YXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxVbmlx
dWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0
IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdl
dC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRv
cik7IAotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChpc1By
b3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKICAgICAgICAgICAg
IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7CkBAIC0xMDUz
LDcgKzEwNTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBlT2YiKSwgQVNDSUlM
aXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtMTA2NCwxMSArMTA2OCwxMSBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90eXBlKTsKICAgICBK
U1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF0
cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDc4LDEzICsxMDgyLDEzIEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0
ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2FtZVZh
bHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdzZXRQcm90b3R5cGVP
ZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4gaXRzIHRhcmdldCBpcyBub24tZXh0ZW5zaWJsZSBh
bmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50
IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC0x
MTE4LDcgKzExMjIsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBl
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxs
RGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVND
SUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTExMjgsNyArMTEz
Miw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYm
ICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBAIC0xMTM3LDEzICsxMTQxLDEzIEBAIEpTVmFsdWUg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICB9CiAKICAgICBib29sIHRhcmdl
dElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAg
IHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJn
ZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0
KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdl
dCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7CkBAIC0xMzksMTQg
KzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
aWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVBy
b3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIFJlZmxlY3QuZGVm
aW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Q
cm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpA
QCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHJl
Y2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Iikp
KTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CkBAIC0y
MjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09i
amVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAg
ICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9u
cyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVz
dWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJn
ZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTMw
Nyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAK
ICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQ
cm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3Rv
dHlwZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUgUmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUq
IGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZsYWdz
OwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmluZyA9IGZsYWdzLnRvU3RyaW5nKGV4ZWMpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBmbGFnc1N0cmluZyk7CiAgICAgaWYgKCFmbGFn
c1N0cmluZykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIH0KIAogICAgIFJlZ0V4cEZsYWdzIHJlc3VsdCA9
IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAgICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3Mp
CiAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgcGF0dGVy
biA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBwYXR0ZXJuQXJn
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NB
cmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4
ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogfQpAQCAtMjU1LDYg
KzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1
ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwYXR0ZXJuQXJnID0gYXJn
cy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0gYXJncy5hdCgxKTsKIApAQCAtMjYzLDcg
KzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKIAogICAg
IGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25zdHJ1Y3RBc1JlZ2V4cCAmJiBmbGFn
c0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBwYXR0
ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoY2FsbGVlID09
IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBp
cyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBA
IC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4
ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHApIHsKICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBq
c0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVybkFyZyktPnJlZ0V4cCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTIgKzEzMywxMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnJlCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1
cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhl
Y1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAw
OwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgpIHsKQEAgLTIzMywxNCArMjMzLDE0IEBAIEpTVmFs
dWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVjU3RhdGUKIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJlZ0V4
cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwo
KSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwotCiAgICAgc2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKQEAgLTI0OSwxNCArMjQ5LDE0
IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QKICAgICBpZiAocmVn
RXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcy5sZW5n
dGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAgICAgKnZtLCBl
eGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgICAgICB2
bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhwLAogICAgICAgICAg
ICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgICAgIHJldHVybiBh
ZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJpbmdMZW5ndGgsIGVuZCk7CiAgICAgICAgICAgICB9
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAqdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKKyAgICAgICAgdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgWyZd
IChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGVuZCArIDE7CiAg
ICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTks
MTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
bXB0eVN0cmluZygpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBp
ZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFn
cyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29u
c3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSArMTg5LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NT
dHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBzdHJpbmdbMF0gPSAwOwogCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFs
dWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgc3Rp
Y2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhpc09i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgZmxhZ3Mg
PSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycsIHNvdXJjZSwgJy8n
LCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NT
dHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkpOwpAQCAtNDcyLDEyICs0NzMs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwpAQCAtNTg0LDcgKzU4Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFu
ZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNT
dHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAg
ICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5w
dXQuaXNOdWxsKCkpOwogCkBAIC01OTksNyArNjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4K
ICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpT
U2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQp
OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcg
Kzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBj
b2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CkBAIC0xMjEsMTAgKzEyMSwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3Bl
cnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAogICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJy
ZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7
CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxw
dHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZp
bmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAog
ICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAg
ICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJl
Z0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2Jh
bCkgewogICAgICAgICAvLyBFUzUuMSAxNS41LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4
cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVu
Z3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1
bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQo
KSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcgKzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7
CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJp
bmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFy
Y2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAg
Ly8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNp
bmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVj
KSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgsMTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFs
dWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwxMSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNo
VmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1
ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShl
eGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmlu
ZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEyICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRj
aFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFj
ZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJl
cGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEs
MTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3Ry
aW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDggKzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2go
ZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1l
bnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBh
cmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwy
MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAg
ICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBp
dCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5p
c051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlm
IGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMg
dGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4KQEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJh
dG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEw
LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5s
ZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0
cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0xMzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Q29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcm
IHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcg
KzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsx
NTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9
CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8
L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxl
KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1
OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7
CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAi
PC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsxNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyAr
MTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1Rv
U2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhw
cmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0
byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAg
ICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0
NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxl
bmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0
aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlm
IChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90
IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9T
ZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMsNyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9z
aXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQ
b3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9T
ZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmluZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3Rh
cnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0g
c3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3Rh
cnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhl
YyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2Vh
cmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcg
KzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIw
MTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2Ug
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFs
aXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJn
dW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAg
Q2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJp
bmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
bGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEy
ICs0NiwxMyBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAg
ICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRl
bXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVj
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewpAQCAtNjAsMTIgKzYxLDEyIEBAIEpTQXJy
YXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVt
cGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3
T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi0jaWYgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKLQotbmFt
ZXNwYWNlIHsKLQotLy8gTG9ncyBhbGwgVGhyb3dTY29wZSBhY3Rpdml0eSB0byBoZWxwIGRlYnVn
IHRoZSBzb3VyY2Ugb2YgYSB2ZXJpZmljYXRpb24gZmFpbHVyZS4KLWJvb2wgdHJhY2VPbiA9IGZh
bHNlOwotCi0vLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysg
c3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5nLgotYm9vbCB0
cmFjZVdpdGhTdGFja1RyYWNlcyA9IGZhbHNlOwotCi0vLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1
bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KLWJvb2wgdmVy
aWZpY2F0aW9uT24gPSBmYWxzZTsKLQotdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7Ci19OworI2lm
IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiAvKgogICAgIFRocm93U2Nv
cGUgdmVyaWZpY2F0aW9uIHdvcmtzIHRvIHNpbXVsYXRlIGV4Y2VwdGlvbiB0aHJvd3MgYW5kIGNh
dGNoIGNhc2VzIHdoZXJlCkBAIC0yMjAsNyArMjA3LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9
IDA7CiAKICAgICBiLiBUdXJuIG9uIFRocm93U2NvcGUgdHJhY2luZwogIAotICAgICAgIEp1c3Qg
c2V0IHRyYWNlT249dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWls
ZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAorICAgICAgIEp1c3Qgc2V0IFZNOjptX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzPXRydWUgaW4gdGhlIFZNLCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91
IHNob3VsZAogICAgICAgIHNlZSBhIHRyYWNlIG9mIFRocm93U2NvcGVzIGJlaW5nIGVudGVyZWQg
YW5kIGV4aXRlZCBhcyB3ZWxsIGFzIHRoZWlyIGRlcHRoIGUuZy4KIAogICAgIFRocm93U2NvcGUg
WzFdIEVudGVyOiBsbGludF9zbG93X3BhdGhfamZhbHNlIEAgL1ZvbHVtZXMvRGF0YS93czYvT3Bl
blNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEw
MzIKQEAgLTIzNCw3ICsyMjEsNyBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKIAogICAgIGMu
IFR1cm4gb24gVGhyb3dTY29wZSBzdGFjayBkdW1wcwogCi0gICAgICAgSnVzdCBzZXQgdHJhY2VX
aXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVi
dWlsZC4KKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcz10cnVlIGF0IGluIHRoZSBWTSwgYW5kIHJlYnVpbGQuCiAgICAgICAgVGhlcmVhZnRl
ciwgeW91IHNob3VsZCBzZWUgYSBzdGFjayB0cmFjZXMgYXQgdmFyaW91cyByZWxldmFudCBUaHJv
d1Njb3BlIGV2ZW50cy4KIAogICAgIGQuIFVzaW5nIHRocm93U2NvcGVQcmludElmTmVlZENoZWNr
KCkKQEAgLTI0OSwzMyArMjM2LDE4IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgICAg
IGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVkIHRoZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
aygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCiAqLwogCi1UaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZN
JiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxvY2F0aW9uKQotICAgIDogbV92bSh2bSkKLSAgICAs
IG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRocm93U2NvcGUpCi0gICAgLCBtX2xvY2F0aW9uKGxv
Y2F0aW9uKQotICAgICwgbV9kZXB0aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUt
Pm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2NvcGU6OlRocm93U2NvcGUoVk0mIHZtLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2Vw
dGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BU
aHJvd1Njb3BlID0gdGhpczsKLQotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2co
IjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAi
LCBsb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0
aW9uLmxpbmUpOwotICAgICAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAg
ICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LQotICAgICAgICBpZiAodHJhY2VXaXRoU3RhY2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBv
cnRCYWNrdHJhY2UoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1Nh
dGlzZmllZChTaXRlOjpTY29wZUVudHJ5KTsKKyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIG1fZGVwdGgs
IG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAKICAgICBpZiAoIW1faXNSZWxlYXNlZCkKLSAgICAg
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsK
KyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRp
b25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBJZiB3ZSByZWxlYXNlZCB0aGUgc2NvcGUsIHRoYXQgbWVhbnMgd2UncmUg
bGV0dGluZyBvdXIgY2FsbGVycyBkbyB0aGUKICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrLiBI
b3dldmVyLCBiZWNhdXNlIG91ciBjYWxsZXIgbWF5IGJlIGEgTExJbnQgb3IgSklUCkBAIC0yOTcs
MjcgKzI2OSwyNSBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAgICAgIHdpbGxCZUhh
bmRsZUJ5TExJbnRPckpJVCA9IHRydWU7CiAgICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxM
SW50T3JKSVQpCi0gICAgICAgIHNpbXVsYXRlVGhyb3coKTsKKyAgICAgICAgc2ltdWxhdGVUaHJv
dyhFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQpOwogCi0gICAgaWYgKHRyYWNlT24pIHsK
LSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9k
ZXB0aCwgIl0gRXhpdDogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0
aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lKTsKKyAgICBpZiAobV92bS5tX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpU
aHJvd1Njb3BlRXhpdCwgbV9sb2NhdGlvbik7CiAgICAgICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQogICAgICAgICAgICAgZGF0YUxvZygiLCB3aXRoIHJldGhyb3ciKTsKICAgICAg
ICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICAgICBkYXRhTG9nKCIs
IG5lZWRzIGNoZWNrIik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAKLSAgICAgICAgaWYgKHRy
YWNlV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzKQogICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAg
ICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93U2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CiB9CiAK
IHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNlcHRpb24oKSAmJiBtX3ZtLmV4Y2Vw
dGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlv
bik7CiAgICAgCiAgICAgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpA
QCAtMzI1LDcgKzI5NSw3IEBAIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGVycm9yKQogewogICAgIGlmICghZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHluYW1pY0Nh
c3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxsKCkpKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25D
aGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2RlcHRo
LCBtX2xvY2F0aW9uKTsKICAgICAKICAgICByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBlcnJvcik7CiB9CkBAIC0zMzMsNyArMzAzLDcgQEAgSlNWYWx1ZSBUaHJvd1Njb3BlOjp0aHJv
d0V4Y2VwdGlvbihFeGVjUwogSlNPYmplY3QqIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8
RXhjZXB0aW9uKj4ob2JqKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7
CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KQEAg
LTM0MSw1NSArMzExLDI0IEBAIEpTT2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihF
eGUKIHZvaWQgVGhyb3dTY29wZTo6cHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiB7CiAgICAgaWYgKG1fdm0u
bV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50Kyss
ICI+IE5lZWQgZXhjZXB0aW9uIGNoZWNrIGF0ICIsIGZ1bmN0aW9uTmFtZSwgIiBAICIsIGZpbGUs
ICI6IiwgbGluZSwgIlxuIik7CisgICAgICAgIGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpOZWVk
RXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oZnVuY3Rpb25OYW1lLCBmaWxl
LCBsaW5lKSk7CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6c2ltdWxhdGVUaHJvdygpCit2b2lkIFRo
cm93U2NvcGU6OnNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQgZXZlbnQpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisgICAgbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRF
dmVudCA9IGV2ZW50OwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb24gPSBt
X2xvY2F0aW9uOwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGggPSBtX2RlcHRo
OwogICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSB0cnVlOwogCi0gICAgaWYgKHRyYWNl
T24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBb
IiwgbV9kZXB0aCwgIl0gVGhyb3cgZnJvbTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iKTsKLSAgICAg
ICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRp
b25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcykKICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KIH0KIAot
dm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChUaHJv
d1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAgaWYgKCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7
Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0
aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0aW9uID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9p
bnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRvIHNpdGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4g
Y29uc3QgY2hhciogewotICAgICAgICAgICAgc3dpdGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBj
YXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0g
ICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRXhpdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
IkV4aXQiOwotICAgICAgICAgICAgY2FzZSBTaXRlOjpUaHJvdzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsK
LQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sg
dmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAgICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20g
VGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAiXSAiLCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFp
bExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIsIGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZh
aWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBU
aHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAg
ICAgICAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRp
b25DaGVjayk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklG
SUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4OCArMjYs
NjQgQEAKICNpZm5kZWYgVGhyb3dTY29wZV9oCiAjZGVmaW5lIFRocm93U2NvcGVfaAogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25T
Y29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNP
YmplY3Q7CiAKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2lmIEVOQUJM
RShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCi1jbGFzcyBUaHJvd1Njb3BlIHsKK2Ns
YXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBUaHJvd1Njb3BlTG9jYXRpb24pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9u
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyb3dTY29wZSgpOwogCiAgICAgVGhyb3dTY29w
ZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CiAgICAgVGhyb3dTY29wZShUaHJvd1Njb3Bl
JiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhj
ZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIAotICAgIGlubGluZSBFeGNlcHRp
b24qIGV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KKyAgICB2b2lk
IHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpOwogCiBwcml2YXRlOgotICAgIHZvaWQgc2ltdWxh
dGVUaHJvdygpOworICAgIHZvaWQgc2ltdWxhdGVUaHJvdyhFeGNlcHRpb25FdmVudCk7CiAKLSAg
ICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAgICBTY29wZUVudHJ5LAotICAgICAgICBTY29wZUV4
aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsKLSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0gICAgVk0mIG1fdm07Ci0gICAgVGhyb3dTY29wZSog
bV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9uOwotICAg
IHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9vbCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9OwogfTsK
IAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKLSAgICBKU0M6OlRocm93U2Nv
cGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9f
LCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNlcHRpb25F
dmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKSkKIAogI2RlZmlu
ZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjayhzY29wZV9fKSBcCiAgICAgc2NvcGVfXy5wcmlu
dElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQogCi0jZWxzZSAv
LyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7Citj
bGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBU
aHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIEFMV0FZU19JTkxJTkUg
VGhyb3dTY29wZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCiAgICAgeyB9
CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CisgICAgVGhyb3dT
Y29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9
Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0gICAgCi0g
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9Ci0g
ICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFs
dWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9Owog
CiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NPUEUodm1fXykgXAogICAgIEpTQzo6VGhyb3dTY29w
ZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQor
I2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0K
LSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQotICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlv
bk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxlKQotICAgICAgICAsIGxpbmUobGluZSkKLSAgICB7
IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07Ci0gICAg
Y29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBsaW5lIHsgMCB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Myw0ICs4NzMsMjYgQEAgc2l6ZV90IFZNOjpj
b21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9u
RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0
aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9p
bnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4
Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlv
biB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhy
b3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRl
cHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAg
fQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtNDgsNyArNTAsNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNs
dWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKQEAgLTgyLDYgKzgzLDcgQEAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247Citj
bGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2Zp
bGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTA5LDcgKzExMSw2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhy
b3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC00NDAsMTIgKzQ0
MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAg
IEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxG
cmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAg
RXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9u
OyB9CkBAIC02NDEsMTEgKzY0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICBtX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKICAgICAgICAgbV9sYXN0RXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0K
KyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9
CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wg
bV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKQEAgLTY3MCwxMSArNjc1LDIzIEBAIHByaXZhdGU6
CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlv
biogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShUSFJPV19TQ09QRV9W
RVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29wZSogbV90b3BUaHJvd1Njb3BlIHsgbnVsbHB0ciB9
OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsK
KyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICBFeGNlcHRpb25T
Y29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7IG51bGxwdHIgfTsKKyAgICBFeGNlcHRpb25FdmVu
dCBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudDsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9u
IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOwogICAgIHVuc2lnbmVkIG1fc2ltdWxhdGVk
VGhyb3dQb2ludERlcHRoIHsgMCB9OwogICAgIG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25D
aGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBMb2dzIGFsbCBleGNlcHRpb24gYWN0aXZpdHkgdG8g
aGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgYm9v
bCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAgIC8vIEEgbW9yZSB2ZXJi
b3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVn
aWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcuCisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzIHsgZmFsc2UgfTsKKworICAgIC8vIERpc2FibGVkIHRlbXBvcmFy
aWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRpb24gZmFpbHVyZXMgYXJlIGZpeGVkLgorICAg
IGJvb2wgbV92ZXJpZnlFeGNlcHRpb25FdmVudHMgeyBmYWxzZSB9OworCisgICAgdW5zaWduZWQg
bV9leGNlcHRpb25FdmVudENvdW50IHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fZmFpbE5l
eHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwpAQCAtNzAwLDYgKzcxNywxMCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeTsKIAorICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBw
dXJwb3NlIG9ubHkuCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIENh
dGNoU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEV4Y2VwdGlvblNjb3BlOwogICAgIGZyaWVuZCBj
bGFzcyBUaHJvd1Njb3BlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1
Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFw
U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUo
ZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7CiAK
ICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRl
cmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlm
ICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3
ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdl
YWtTZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgw
KTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNW
YWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxs
RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDkgKzMwMSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewogICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBkYXRhTG9nKGFyZ1N0cik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgs
OCArOTE4LDggQEAKICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5k
ZWYgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklGSUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1df
U0NPUEVfVkVSSUZJQ0FUSU9OICghZGVmaW5lZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgorI2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNo
IGFsbG9jYXRvciB0byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBp
ZiB0aGUgYXNzZW1ibGVyIGlzIGNvbXBpbGVkIGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFy
cgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFyS2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpT
VmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09OUGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVk
OiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
OSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4g
b2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw3
ICs4NTcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAg
Ly8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0
aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlm
ICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsK
KyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VUaHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVl
KGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg3MSw3ICs4NzMsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQgdmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBr
ZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBA
QCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVk
V29ybGQpKTsKKyAgICBWTSYgdm0gPSBleGVjLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1Zh
bHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAg
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9p
c29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUy
OSw5IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdM
aXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0df
RVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlv
bk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0g
aXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFj
ZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAog
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1
aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xODgsMTUgKzE5MCwxOCBAQCBib29s
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRD
b250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIAogICAgIC8vIExvb2t1cCB0
aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUg
cmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFj
ZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwz
MiArMjE0LDMyIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAg
ICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVz
KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
bV92YWx1ZXMpKTsKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1p
bi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1f
bWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAg
ICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFp
bGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiBy
ZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFs
dWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3Qg
PSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6
ZV90IGluZGV4LCBEaWN0aQogCiBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0
cmluZyYgdmFsdWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9v
bCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB2YWx1ZSA9IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVy
dGllc0FzU3RyaW4KIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRp
YWxpemVyT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNT
dGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSgpKTsKQEAgLTY5LDEwICs3MSwxMCBAQCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRp
ZXNBc1N0cmluCiAgICAgICAgIGlmIChzdHJpbmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
ICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFs
dWUpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxMyArOTAsMTQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFs
TwogCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
dm0uYXBpTG9jaygpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBhdXRvJiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25l
ZCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJy
YXkuYXQoaSkuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBw
bGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24o
c3RhdHVzLCBuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwpAQCAtODgsMTkgKzg4LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNl
bGVjdGlvbihzdGF0dXMsIG5ld1NoaXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVt
cywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1
LDExIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMCkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlv
bihuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0
MywxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpT
QXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01
Niw4ICs1OSwxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2
b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0
byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNM
ZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywg
ZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VChibG9iUGFydHMpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRp
bmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGlu
Z3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0
IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUi
LCB0eXBlKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0g
PSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAo
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3
ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAg
ICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBl
bmRpbmdzKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFu
ZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSog
Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxw
dHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90
IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291
bnQ7ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5
QVNDSUkoKSkgewpAQCAtMTA2LDEyICsxMDYsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29y
aXRobShKU0RpY3Rpb25hcgogICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRv
IHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUu
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0
KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJoYXNoIik7CiAKICAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBv
YmplY3QsICJoYXNoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1Zh
bHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBpdkRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
ZXhlYywgaXYsIGl2RGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgaWYgKGl2RGF0YS5zZWNvbmQgIT0gMTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRh
dGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKQEAgLTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0
aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVu
Z3RoID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2Up
OwpAQCAtMTg5LDEwICsxOTEsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRP
YmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwg
cmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkg
anNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlm
ICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVz
dWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICByZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFy
eS5nZXQoImxlbmd0aCIsIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsy
MzgsMTYgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMp
OwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUs
IHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBG
aWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3Rh
dGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVl
ID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50
Iik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVp
bnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25l
bnRWYWx1ZSk7CkBAIC0yNzksMTMgKzI4MSwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1
ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0Fs
Z29yaXRobVJzYU9hZXBQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGlj
dGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdl
dEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVu
dDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAg
IEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgp
LCAibGFiZWwiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5
MywxMCArMjk1LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4K
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgbGFiZWxEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQogCiAgICAgcmVzdWx0LT5sYWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBs
YWJlbERhdGEuc2Vjb25kKTsKIApAQCAtMzE2LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
JnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBz
dWNjZXNzID0gZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFz
aFJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVj
dGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNP
TihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYg
KCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQg
YW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24uCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0
cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5
IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEg
Ym9vbGVhbiB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjpKU0NyeXB0b0tleQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUganNvblZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNv
blZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBr
ZXlPcHMtPmdldEluZGV4KG1fZXhlYywgaSk7CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9u
OwogICAgICAgICAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRy
aWJ1dGUgY291bGQgbm90IGJlIHByb2Nlc3NlZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0s6OnJlY29uYwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJpbmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2
NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
ayIsIGtleUJhc2U2NFVSTCkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90
IHByZXNlbnQgaXMgSldLIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
MjAsNyArNDIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwog
ICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkg
ewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICgh
Z2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4
cG9uZW50KSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlz
c2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1
cykpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBl
eHBvbmVudCk7CiAgICAgfQpAQCAtNDQ2LDM4ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQ
cmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUlu
Zm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlm
ICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAi
LCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVu
dCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVj
LCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwg
cHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JG
cm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3Rv
ckNSVEV4cG9uZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50KTsKICAgICB9CiAKICAgICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAg
aWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhl
clByaW1lSW5mb0pTQXJyYXkpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25l
bnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAg
ICAgfQpAQCAtNDg1LDI0ICs0ODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+
IEpTQ3J5cHRvSwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0Fy
cmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gaW5mbzsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUlu
Zm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMsIGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJKV0sgXCJvdGhcIiBhcnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5w
cmltZUZhY3RvcikpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1l
IGZhY3RvciBmb3IgYSBwcmltZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJW
ZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9y
Q1JURXhwb25lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0
b3IgQ1JUIGV4cG9uZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0Qmln
SW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0
aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUx
OSw3ICs1MTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAK
ICAgICBTdHJpbmcgandrS2V5VHlwZTsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1
aXJlZCBKV0sgXCJrdHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtNTQ5LDYgKzU0OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZv
ck9jdGV0U2VxdWVuY2UoRXgKIAogc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50
cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMm
IGRhdGEsIEpTQzo6SlNPYmplY3QqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRv
SlNPTihleGVjLCByZXN1bHQsICJrdHkiLCAiUlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJl
c3VsdCwgIm4iLCBiYXNlNjRVUkxFbmNvZGUoZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pT
T04oZXhlYywgcmVzdWx0LCAiZSIsIGJhc2U2NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsK
QEAgLTU3MCw5ICs1NzMsOCBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRz
KEpTCiAgICAgaWYgKGRhdGEub3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBk
YXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZv
cygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBKU09iamVjdCoganNQcmltZUlu
Zm8gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0
aWMgdm9pZCBhZGRKV0tBbGdvcml0aG1Ub0pTT04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2Fn
ZXNUb0pTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAg
LTczOCwxMyArNzQxLDEzIEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNl
cmkKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAK
ICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04oZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJl
c3VsdCwgImV4dCIsIGtleS5leHRyYWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihl
eGVjLCByZXN1bHQsIGtleS51c2FnZXNCaXRtYXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4o
KmtleURhdGEpKQpAQCAtNzU1LDcgKzc1OCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OnNlcmkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiS2V5IGRvZXNuJ3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgVk0m
IHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIW1f
Y29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTEgKzgwLDExIEBA
IFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIGF1dG8mIHN0
YXRlID0gKmNvbnRleHQtPmV4ZWNTdGF0ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KSwgdm0sIHN0YXRlLCBtX2NvbnN0cnVjdG9yLmdldCgpLCBsb2NhbE5hbWUpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBlbGVtZW50KTsKICAgICBpZiAoIWVsZW1l
bnQpIHsKLSAgICAgICAgYXV0byogZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IEFTU0VSVChleGNlcHRpb24pOwogICAgICAgICBpZiAoc2hvdWxkQ2xlYXJFeGNlcHRpb24gPT0g
U2hvdWxkQ2xlYXJFeGNlcHRpb246OkNsZWFyKSB7Ci0gICAgICAgICAgICBzdGF0ZS5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24pOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTEwLDcgKzExMSw3IEBAIHN0YXRpYyBSZWZQdHI8
RWxlbWVudD4gY29uc3RydWN0Q3VzdG9tRWwKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25D
b25zdHJ1Y3QoJmRvY3VtZW50LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhKTsKICAgICBK
U1ZhbHVlIG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3QoJnN0YXRlLCBjb25zdHJ1Y3RvciwgY29uc3Ry
dWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmZG9jdW1lbnQpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVCghbmV3RWxlbWVudC5pc0VtcHR5KCkpOwpAQCAt
MTY2LDcgKzE2Nyw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwK
ICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCAqbV9pc29sYXRl
ZFdvcmxkKTsKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBDb25zdHJ1Y3REYXRhIGNv
bnN0cnVjdERhdGE7CkBAIC0xODUsNyArMTg2LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2U6OnVwZ3JhZGVFbAogCiAgICAgbV9jb25zdHJ1Y3Rpb25TdGFjay5yZW1vdmVMYXN0KCk7
CiAKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBlbGVtZW50LnNldElzRmFpbGVkQ3VzdG9tRWxl
bWVudCgqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDcgKzQ2LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBnZXRDdXN0b21FbGVtZW50Q2FsbGJhYwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgY2Fs
bGJhY2sgPSBwcm90b3R5cGUuZ2V0KCZzdGF0ZSwgaWQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY2FsbGJhY2suaXNVbmRlZmluZWQoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50
UmVnaXN0cnk6OmRlZmluZSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQXRv
bWljU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygm
c3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZh
bHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgSlNW
YWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgIH0KIAogICAgIEpTVmFs
dWUgcHJvdG90eXBlVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgaWYgKCFwcm90b3R5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDdXN0b20gZWxlbWVu
dCBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCIpKTsKQEAgLTEyOSwy
NSArMTI5LDI1IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKIAog
ICAgIGlmIChhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFj
ayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNv
bm5lY3RlZENhbGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRDb25uZWN0
ZWRDYWxsYmFjayhjb25uZWN0ZWRDYWxsYmFjayk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0g
Z2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVs
ZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5lY3RlZENhbGxi
YWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBp
ZiAoYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRl
LCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRvcHRlZENh
bGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBZG9wdGVkQ2FsbGJhY2so
YWRvcHRlZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBhdXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVt
ZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sp
IHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4o
c3RhdGUsIGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAg
ICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0cmli
dXRlQ2hhbmdlZENhbGxiYWNrLCAqdmFsdWUpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBK
U1ZhbHVlIHdoZW5EZWZpbmVkUHJvbWlzZShFeGVjU3QKICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCF2
YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lQW5kVGhyb3dJZk5lZWRlZChzdGF0ZSwgbG9jYWxOYW1l
KSkKQEAgLTE5MSwxMyArMTkxLDE1IEBAIHN0YXRpYyBKU1ZhbHVlIHdoZW5EZWZpbmVkUHJvbWlz
ZShFeGVjU3QKIAogSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6d2hlbkRlZmluZWQo
RXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RShzdGF0ZS52bSgpKTsKKwogICAgIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QgPSAq
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
ICAgICBhdXRvJiBwcm9taXNlRGVmZXJyZWQgPSAqSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsICZnbG9iYWxPYmplY3QpOwogICAgIEpTVmFsdWUgcHJvbWlzZSA9IHdoZW5EZWZpbmVk
UHJvbWlzZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB3cmFwcGVkKCkpOwogCi0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewogICAgICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHByb21pc2VEZWZlcnJlZCk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0
dXJuIHByb21pc2VEZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOSw4ICsxMTksMTEgQEAgU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQwogCiBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3Ry
aW5nVmlldyB2aWV3IHsgc3RyaW5nIH07CiAKQEAgLTE4NywxMCArMTkwLDExIEBAIGRvdWJsZSB2
YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVM
RUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgRXhj
ZXB0aW9uKiBleGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KGV4Y2VwdGlvblZh
bHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSBleGVjLT5s
YXN0RXhjZXB0aW9uKCk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsK
ICAgICAgICAgaWYgKCFleGNlcHRpb24pCiAgICAgICAgICAgICBleGNlcHRpb24gPSBFeGNlcHRp
b246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgRXhjZXB0aW9uOjpEb05vdENh
cHR1cmVTdGFjayk7CiAgICAgfQpAQCAtMjAwLDE1ICsyMDQsMTggQEAgdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlw
dCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24p
KQogICAgICAgICByZXR1cm47CiAKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShl
eGVjLT52bSgpKTsKIAogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVh
dGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2Fs
bFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKLSAgICBleGVjLT5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwogCiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cg
PSBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMjM5LDgg
KzI0Niw4IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKIAogICAg
ICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRo
cm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgogICAgICAgICAvLyByZXBvcnRFeGNl
cHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckxhc3RFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgdm0uY2xl
YXJMYXN0RXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwpAQCAtMjU2LDggKzI2MywxMCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEV4CiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIApAQCAtMzQxLDcgKzM1
MCw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmICghZWMgfHwgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFlYyB8
fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYykpOwpAQCAtMzUyLDcg
KzM2MSw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGUKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAotICAgIGlmICghZWMuY29kZSB8fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoIWVjLmNvZGUgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMu
Y29kZSwgZWMubWVzc2FnZSkpOwpAQCAtMzYyLDE1ICszNzEsMTcgQEAgdm9pZCBzZXRET01FeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZQogCiBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwg
Y2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVND
SUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWFwcGx5TWV0aG9k
LmlzVW5kZWZpbmVkKCk7CkBAIC01MDksNyArNTIwLDcgQEAgc3RhdGljIGlubGluZSBUIHRvU21h
bGxlckludChFeGVjU3RhdGUmIAogICAgIH0KIAogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC01NTYsNyArNTY3LDcgQEAgc3RhdGljIGlu
bGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJgogICAgIH0KIAogICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC02NDIsMTEgKzY1Mywx
NCBAQCB1aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhCiAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAog
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgs
IGtNaW5JbnQzMiwga01heEludDMyKTsKIH0KQEAgLTY3MiwyNyArNjg2LDM2IEBAIHVpbnQzMl90
IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwogdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlm
ICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAog
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgs
IDAsIGtNYXhVSW50MzIpOwogfQogCiBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01h
eEludGVnZXIsIGtKU01heEludGVnZXIpOwogfQogCiB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKIH0KQEAgLTg1NiwyMSArODc5LDIxIEBAIHZvaWQgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXgKIAogdm9pZCB0aHJvd05vdFN1cHBvcnRl
ZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBTdHJpbmcgbWVzc2FnZVN0cmlu
ZyhtZXNzYWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKIH0K
IAogdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQo
IXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VS
UiwgJm1lc3NhZ2VTdHJpbmcpKTsKIH0KIAogdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtNTA3LDcgKzUwNyw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0
b0pTU2VxdWVuY2UoSlNDOjoKICAgICB9CiAKICAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUg
PSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBp
ZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChsZW5ndGhWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIHRvSlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVl
LnRvVUludDMyKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBvYmplY3Q7CkBAIC01NTksOCArNTU5LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKIHsKKyAgICBKU0M6OlZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7CkBAIC01NjksOCAr
NTcyLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPFQ+PiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6
SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rv
ci5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNV
bmRlZmluZWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsr
aSkKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKQEAgLTY1NCwxNCArNjYwLDE3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFsdWUganNGcm96ZW5BcnJheShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB2ZWN0b3IpIHsKICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZVRyYWl0
czxUPjo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmlu
ZWQoKTsKICAgICB9CiAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMs
IG51bGxwdHIsIGdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBKU0M6Om9iamVjdENv
bnN0cnVjdG9yRnJlZXplKGV4ZWMsIGFycmF5KTsKIH0KQEAgLTcwMiwzMiArNzExLDQwIEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVQKIHRlbXBsYXRlPD4gc3RydWN0
IE5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRp
dmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIFN0cmlu
ZyYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
aW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVy
biAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24o
KTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czx1bnNp
Z25lZD4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIHVuc2lnbmVkJiBpbmRleGVkVmFsdWUpCiAg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1Zh
bHVlLnRvVUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBs
YXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGlubGlu
ZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNW
YWx1ZSwgZmxvYXQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
ZXhlYy52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9GbG9hdCgmZXhlYyk7Ci0gICAgICAg
IHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNl
cHRpb24oKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0
czxkb3VibGU+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBkb3VibGUmIGluZGV4ZWRWYWx1ZSkK
ICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpz
VmFsdWUudG9OdW1iZXIoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9u
KCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogfTsKIApAQCAt
NzY0LDExICs3ODEsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPFQ+IHRvTmF0aXZl
QQogICAgIH0KIAogICAgIFZlY3RvcjxUPiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUo
JmV4ZWMsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFs
dWUsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpT
VmFsdWUganNWYWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgICAgIFQgY29udmVydGVkVmFsdWU7Ci0gICAgICAgIGlmICghTmF0aXZlVmFs
dWVUcmFpdHM8VD46Om5hdGl2ZVZhbHVlKCpzdGF0ZSwganNWYWx1ZSwgY29udmVydGVkVmFsdWUp
KQorICAgICAgICBib29sIHN1Y2Nlc3MgPSBOYXRpdmVWYWx1ZVRyYWl0czxUPjo6bmF0aXZlVmFs
dWUoKnN0YXRlLCBqc1ZhbHVlLCBjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CiAgICAg
fSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsMTEgKzc1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVRo
aXNUeXAKIHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5h
cmd1bWVudENvdW50KCkgPT0gMik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRlLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJm
YWNlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGV4ZWNT
dGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1dG8gZnVuY3Rpb25O
YW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJpbmcoZXhlY1N0YXRl
KTsKLSAgICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlw
ZUVycm9yKGV4ZWNTdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUu
dXRmOCgpLmRhdGEoKSwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKQEAgLTg3
LDExICs4OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUCiB7
CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRD
b3VudCgpID09IDIpOworICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUg
PSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhleGVjU3RhdGUpOwot
ICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNF
RChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGF0dHJpYnV0ZU5hbWUgPSBl
eGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAg
IEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3Io
ZXhlY1N0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0Zjgo
KS5kYXRhKCksIGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2su
Y3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUdsb2JhbE9iamVjdFRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBSZWY8SlNHbG9iYWxPYmplY3RD
YWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTY0LDcgKzY2LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFz
ayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdGFzay0+cnVuKGV4ZWMpOwotICAgICAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChz
Y29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGl0ZXJhdG9yRm9y
RWFjaChKU0M6CiAgICAgICAgIGFwcGVuZEZvckVhY2hBcmd1bWVudHMoc3RhdGUsIHdyYXBwZXIt
Pmdsb2JhbE9iamVjdCgpLCBhcmd1bWVudHMsIHZhbHVlKTsKICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZCh3cmFwcGVyKTsKICAgICAgICAgSlNDOjpjYWxsKCZzdGF0ZSwgY2FsbGJhY2ssIGNhbGxU
eXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5j
b2RlKEpTQzo6anNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMSAr
MTAwLDE0IEBAIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0aW9uQ28KIAogdm9p
ZCByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlRGVmZXJyZWQmIHByb21p
c2VEZWZlcnJlZCkKIHsKLSAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
SlNWYWx1ZSBlcnJvciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgIHN0YXRlLmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBEZWZlcnJlZFdyYXBw
ZXI6OmNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QsICZwcm9taXNlRGVmZXJyZWQpLT5yZWpl
Y3QoZXJyb3IpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9t
aXNlLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwxNSBAQCB2b2lkIHJl
amVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAKIGlubGluZSBKU0M6OkpTVmFsdWUg
Y2FsbFByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUgcHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZl
cnJlZCopKQogeworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKICAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVkJiBwcm9taXNlRGVm
ZXJyZWQgPSAqSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCk7CiAgICAgcHJvbWlzZUZ1bmN0aW9uKCZzdGF0ZSwgJnByb21pc2VEZWZlcnJlZCk7CiAK
ICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHByb21pc2VEZWZlcnJlZCk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4g
cHJvbWlzZURlZmVycmVkLnByb21pc2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTQgQEAgYm9vbCBKU0RPTVN0cmluZ01h
cDo6ZGVsZXRlUHJvcGVydHlCeUluZAogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0
ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEzICsxOTcs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgY2FsbCgpCiAgICAgewogICAgICAgICBSZWY8SlNET01X
aW5kb3dNaWNyb3Rhc2tDYWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0g
bV9nbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAg
SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7CiAKLSAgICAgICAg
QVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nv
cGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDkgQEAgYm9vbCBKU0RPTVdpbmRv
dzo6cHJldmVudEV4dGVuc2lvbnMoSlNPYgogCiB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlv
bihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3
aWRnZXRzLCBtYWtlICJ2YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRl
CiAgICAgLy8gYSBwcm9wZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWlu
ZyBhIG5hdmlnYXRpb24gKDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCkBAIC0zODIsNyArMzg1
LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJgogI2VuZGlmCiAK
ICAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRp
b24qIGxvY2F0aW9uID0gd3JhcHBlZCgpLmxvY2F0aW9uKCkpCkBAIC00MDYsMTUgKzQwOSwxOCBA
QCBKU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0CiAKIEpTVmFsdWUgSlNE
T01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0
cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0gc3RhdGUuYXJndW1lbnQo
MSk7CiAgICAgQXRvbWljU3RyaW5nIHRhcmdldCA9IHRhcmdldFZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkgPyBBdG9taWNTdHJpbmcoIl9ibGFuayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpIDogdGFyZ2V0VmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmco
JnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
U3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRX
aW5kb3cgPSB3cmFwcGVkKCkub3Blbih1cmxTdHJpbmcsIHRhcmdldCwgd2luZG93RmVhdHVyZXNT
dHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUpKTsK
QEAgLTQ3MCwxMCArNDc2LDEwIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxv
ZyhFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHVybFN0cmlu
ZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIFN0cmluZyBkaWFsb2dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVy
KHN0YXRlKTsKQEAgLTUxMSwxNiArNTE3LDE2IEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RN
ZXNzYWdlKERPTVdpbmQKICAgICAgICAgfQogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShz
dGF0ZSwgc3RhdGUuYXJndW1lbnQodHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwgbWVzc2FnZVBvcnRz
LCBhcnJheUJ1ZmZlcnMpOwogICAgIH0KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAmbWVzc2FnZVBvcnRzLCAm
YXJyYXlCdWZmZXJzKTsKIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQodGFyZ2V0T3Jp
Z2luQXJnSW5kZXgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU0NSw3ICs1NTEsNyBAQCBKU1ZhbHVl
IEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAKICAgICBDb250ZW50U2VjdXJpdHlQ
b2xpY3kqIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3Jh
cHBlZCgpLmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rp
b246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJp
dHlQb2xpY3kpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIGlmICghYWN0aW9uKQpAQCAtNTcwLDcgKzU3Niw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6
OnNldEludGVydmFsKEV4ZWNTdGEKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVu
dFNlY3VyaXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1l
bnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGludCBkZWxheSA9
IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIGRvdWJsZSBzdGFy
dFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcigmZXhlYykpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgZG91YmxlIGVuZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b051
bWJlcigmZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTg3LDcg
Kzg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlm
ICh2YWx1ZUFyZ3VtZW50LmlzQ2VsbCgpICYmIHZhbHVlQXJndW1lbnQuYXNDZWxsKCktPmluaGVy
aXRzKHN0ZDo6cmVtb3ZlX3BvaW50ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBlOjppbmZvKCkpKSB7
CiAKICAgICAgICAgQXJyYXlCdWZmZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVyKHZhbHVlQXJndW1l
bnQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghZGF0
YSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZl
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9uRGF0
YTo6QWNjZWxlcmEKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0
ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUg
eFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgIngiKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wg
Y2FuUHJvdmlkZVggPSAheFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHgg
PSB4VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBKU1ZhbHVlIHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ5IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVZID0gIXlWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpOwogICAgIGRvdWJsZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWiA9
ICF6VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeiA9IHpWYWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGlmICghY2FuUHJvdmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTg0
LDMyICs4NywzNSBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uCiAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxs
IGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRv
T2JqZWN0KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxwaGEi
KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJv
dmlkZUFscGhhID0gIWFscGhhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUg
YWxwaGEgPSBhbHBoYVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQmV0YSA9ICFi
ZXRhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYmV0YSA9IGJldGFWYWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIEpTVmFsdWUgZ2FtbWFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJnYW1tYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAo
IWNhblByb3ZpZGVBbHBoYSAmJiAhY2FuUHJvdmlkZUJldGEgJiYgIWNhblByb3ZpZGVHYW1tYSkK
QEAgLTE3MCw2ICsxNzYsOSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFs
KEV4CiAKIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcgdHlw
ZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAg
ICAgYm9vbCBidWJibGVzID0gc3RhdGUuYXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CiAg
ICAgYm9vbCBjYW5jZWxhYmxlID0gc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7
CkBAIC0xNzcsMTUgKzE4NiwxNSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXRE
ZXZpY2VNCiAgICAgLy8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVm
aW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0
aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252ZXJzaW9uLgogICAgIFJlZlB0cjxEZXZpY2VNb3Rp
b25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1
bWVudChzdGF0ZS5hcmd1bWVudCgzKSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVy
YXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNjZWxlcmF0aW9uQXJn
dW1lbnQoc3RhdGUuYXJndW1lbnQoNCksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRp
b25SYXRlPiByb3RhdGlvblJhdGUgPSByZWFkUm90YXRpb25SYXRlQXJndW1lbnQoc3RhdGUuYXJn
dW1lbnQoNSksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBib29sIGludGVydmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNikuaXNV
bmRlZmluZWRPck51bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNE
aWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUmIGZpbmFsUmVzdWx0KSBjb25zdAogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNTRVJUKGlzVmFs
aWQoKSk7CiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhtX2V4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBwcm9wZXJ0eUZvdW5kID0gbV9pbml0
aWFsaXplck9iamVjdC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwg
WyZdIChib29sIHByb3BlcnR5Rm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gYm9vbCB7CkBA
IC04Niw3ICs4OCw3IEBAIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8K
ICAgICAgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb25UaHJvd247CiAgICAgcmV0dXJuIHByb3BlcnR5Rm91bmQgPyBQcm9wZXJ0
eUZvdW5kIDogTm9Qcm9wZXJ0eUZvdW5kOwogfQpAQCAtMTUxLDE3ICsxNTMsMjAgQEAgdm9pZCBK
U0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogdm9pZCBKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxTdHJpbmc+
JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywg
dmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVt
VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW1WYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTIyMSw2ICsyMjYsOSBAQCB2b2lkIEpTRGlj
dGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVy
dFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSGFzaFNldDxBdG9taWNTdHJp
bmc+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgcmVz
dWx0LmNsZWFyKCk7CiAKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTIy
OCwxMiArMjM2LDEyIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQK
IAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNT
ZXF1ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuYWRkKGl0ZW1WYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTI5NywxNyArMzA1LDIw
IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGUKIHZvaWQgSlNEaWN0
aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0
b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBzdHJl
YW0gPSBKU01lZGlhU3RyZWFtOjp0b1dyYXBwZWQoaXRlbVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjAzLDYgKzIwMyw5IEBAIGlubGluZSBib29sIEpTRGljdGlvbmFyeTo6Z2V0KGNvbnN0IGNo
YXIKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZXN1bHQ+CiBKU0RpY3Rpb25hcnk6
OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQo
Y29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBUKiBjb250ZXh0LCB2b2lkICgqc2V0dGVyKShUKiBj
b250ZXh0LCBjb25zdCBSZXN1bHQmKSkgY29uc3QKIHsKKyAgICBKU0M6OlZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBKU0M6OkpTVmFsdWUgdmFsdWU7CiAgICAgR2V0UHJvcGVydHlSZXN1bHQgZ2V0UHJvcGVydHlS
ZXN1bHQgPSB0cnlHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICBzd2l0Y2gg
KGdldFByb3BlcnR5UmVzdWx0KSB7CkBAIC0yMTIsNyArMjE1LDcgQEAgSlNEaWN0aW9uYXJ5OjpH
ZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAg
ICBjb252ZXJ0VmFsdWUobV9leGVjLCB2YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CiAKICAgICAgICAgc2V0
dGVyKGNvbnRleHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MywxNiArMTUzLDE2IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4
dCgKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICBhdXRvIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byB3aWR0aCA9IGNvbnZl
cnQ8aW50MzJfdD4oc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMyksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0g
d3JhcHBlZCgpLmdldENTU0NhbnZhc0NvbnRleHQoV1RGTW92ZShjb250ZXh0SWQpLCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTIgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZt
KCkpOworICAgIFZNJiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICAvLyBTZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkaXNwYXRjaGlu
Zy1ldmVudHMgc3BlYyBvbiBjYWxsaW5nIGhhbmRsZUV2ZW50LgorICAgIC8vICJJZiB0aGlzIHRo
cm93cyBhbiBleGNlcHRpb24sIHJlcG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQgc2hvdWxkIG5vdCBw
cm9wYWdhdGUgdGhlCisgICAgLy8gZXhjZXB0aW9uLgogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rp
b24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICgh
anNGdW5jdGlvbikKQEAgLTEwOSw2ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6Omhh
bmRsZUV2ZW50KFNjcmlwdAogICAgIC8vIElmIGpzRnVuY3Rpb24gaXMgbm90IGFjdHVhbGx5IGEg
ZnVuY3Rpb24sIHNlZSBpZiBpdCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFj
ZSBhbmQgdXNlIHRoYXQKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAg
ICAgICAgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGpzRnVuY3Rpb24tPmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRp
b24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisKKyAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2
ZW50SGFuZGxlcigpOworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YShoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgfQogCkBAIC0x
MjEsNyArMTM0LDYgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAog
ICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAotICAgICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZNRW50cnlTY29wZSBlbnRy
eVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkg
OiBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKQEAgLTEzOCw3ICsx
NTAsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAg
ICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsK
ICAgICAgICAgICAgIGF1dG8gc2NyaXB0Q29udHJvbGxlciA9IGRvd25jYXN0PFdvcmtlckdsb2Jh
bFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0gICAgICAgICAgICBi
b29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYg
aXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKSk7CisgICAg
ICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoc2NvcGUuZXhjZXB0aW9u
KCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4Y2VwdGlvbigpKSk7
CiAgICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBzY3JpcHRDb250
cm9sbGVyLT5pc1Rlcm1pbmF0aW5nRXhlY3V0aW9uKCkpCiAgICAgICAgICAgICAgICAgc2NyaXB0
Q29udHJvbGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0
KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNMZW5ndGgpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgQVNTRVJUKGJsb2JQYXJ0cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcihleGVjLCBzY29wZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUiLCBudWxscHRyLCAi
RE9NU3RyaW5nIik7CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmcudG9XVEZTdHJpbmcoJmV4
ZWMpLnJlcGxhY2UoJy8nLCAnOicpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFR5cGU7CkBA
IC04Nyw3ICs4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMK
ICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAgICAgICAgIFN0
cmluZyB0eXBlOwogICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwotICAgICAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgbm9ybWFsaXplZFR5cGUgPSBCbG9iOjpub3JtYWxpemVkQ29udGVu
dFR5cGUodHlwZSk7CkBAIC05NSw3ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlMKICAgICAgICAgLy8gT25seSB0cnkgdG8gcGFyc2UgdGhlIGxhc3RNb2Rp
ZmllZCBkYXRlIGlmIHRoZXJlIHdhcyBub3QgYW4gaW52YWxpZCB0eXBlIGFyZ3VtZW50LgogICAg
ICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgICFub3JtYWxpemVkVHlwZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBsYXN0TW9kaWZpZWQp
OwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDcsNyAr
MTA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgaXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0
ZW0pKQpAQCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhl
Yyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFw
cGVuZChzdHJpbmcsIEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0
b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOSBAQCBz
dGF0aWMgdm9pZCBzZXRNYXhpbXVtQWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0YXRpYyBSZWZQdHI8
UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0
aW9ucy4KICAgICBhdXRvIG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOwogCkBA
IC04Miw3ICs4NSw3IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MK
IAogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFu
IG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29w
ZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3
cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICBKU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeShleGVjLCBvYmplY3QpOwpAQCAtOTksMTkgKzEwMiwyMiBAQCBzdGF0aWMgUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0
Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAv
LyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2Fs
bGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxs
YmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7
CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNh
bGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBz
dGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dO
dWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBh
dXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTEyMSwxOSArMTI3LDIyIEBAIEpT
VmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNWYWx1ZSBKU0dlb2xv
Y2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVy
cm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRp
b25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFj
az4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxs
YmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9u
T25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNr
QWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBA
QCBzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAvLyBIVE1MQWxsQ29s
bGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBj
YWxsLgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xs
ZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCkBAIC02NSw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAg
ICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAg
U3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgoKnN0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxl
Y3Rpb24uaXRlbShpbmRleC52YWx1ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywg
aWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJp
bmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0
ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwxMiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShX
RUJHTCkKIHN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0YXRlJiBzdGF0
ZSwgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAg
ICBpZiAoaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJW
YWx1ZS50b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNE
aWN0aW9uYXJ5IGRpY3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CiAgICAgCiAg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsKQEAgLTgzLDcg
Kzg2LDcgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogI2lmIEVO
QUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJ
ZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAjZW5kaWYKQEAgLTExMCwxNCArMTEzLDE0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVu
dDo6cHJvYmFibHlTdXAKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSB3cmFwcGVk
KCk7CiAgICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0
dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RU
eXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwg
YXR0cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SFRNTEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzgsNyArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTCiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkg
ewogICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNI
VE1MRWxlbWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4
ZWMsIG5ld1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3Jl
YXRlKGVsZW1lbnRJbnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAtOTgsMTIgKzk4LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBBU1NFUlQo
ZWxlbWVudFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFsdWUgbmV3UHJvdG90
eXBlID0gbmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7
Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTT2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1l
bnRXcmFwcGVyVmFsdWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBw
ZXJPYmplY3QsICZleGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRT
ZXQgKi8pOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJ
bkNvbnN0cnVjdGlvblN0YWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDE4ICs2MywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgCiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgMCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5n
IHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsK
ICAgICAgICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05NywxOCArOTcs
MTggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdAogICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksIDAs
IDApOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8v
IEZJWE1FOiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0aXRsZSA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAg
IHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIEpTVmFsdWUgSlNJREJEYXRhYmFz
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAg
U3RyaW5nIG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgm
c3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CkBAIC02NiwxNyArNjYs
MTcgQEAgSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgIGJvb2wg
YXV0b0luY3JlbWVudCA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKICAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUu
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikpOwot
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
ICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsK
LSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvSW5jcmVtZW50ID0gb3B0aW9uc1Zh
bHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYXV0b0luY3Jl
bWVudCIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDYgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExp
c3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xh
enlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDYgKzk4LDkgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAg
IGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKQEAgLTExMiw5ICsxMTUsOSBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6aW5pdGlhbGl6CiAgICAgICAgIGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
YXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9uTmFtZSksCiAgICAg
ICAgIG1fc291cmNlVVJMLCBtX3NvdXJjZVBvc2l0aW9uLCBvdmVycmlkZUxpbmVOdW1iZXIpOwog
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0aW9uKGV4ZWMpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTEyMywxNCArMTI2
LDEzIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICBpZiAo
bV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsKICAgICAgICAgICAg
IC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBwZXIgdG8gbWFyayB0
aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgcGFzcyB0aGUgZ2xv
YmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAgICAgIHNldFdyYXBw
ZXIoZXhlYy0+dm0oKSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdp
bmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIodm0sIGFzT2JqZWN0KHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29wZQogICAgICAgICAv
LyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRNTEVsZW1lbnQ6OmV2
ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24tPnNldFNjb3BlKGV4
ZWMtPnZtKCksIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CisgICAgICAgIGxpc3RlbmVy
QXNGdW5jdGlvbi0+c2V0U2NvcGUodm0sIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNo
RXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CiAg
ICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTEgKzEwNywxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBpbml0aWF0
b3IsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiAgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0
YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVl
ID0gSlNDOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgbW9kdWxlS2V5LCBpbml0aWF0b3Ip
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIHJldHVy
bmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWU7CkBAIC0xMzEsOCArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAgICB+SlNNYWluVGhyZWFkRXhl
Y1N0YXRlKCkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc19tYWluVGhyZWFkU3RhdGUt
PnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzX21haW5UaHJl
YWRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAh
c2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIGJvb2wgZGlkRXhpdEphdmFTY3JpcHQgPSBz
X21haW5UaHJlYWRTdGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBAQCBKU1ZhbHVlIEpT
TWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFu
ZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwgSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5nJiB0eXBlQXJnID0g
c3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKICAgICBi
b29sIGNhbkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwog
ICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3Rh
dGUpOwpAQCAtMTE2LDE2ICsxMTksMTYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0
TWVzc2FnZUV2ZQogICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lc3Nh
Z2VQb3J0QXJyYXk+KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
QXJyYXlCdWZmZXJBcnJheT4oKTsKICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZmZXJzKTsKLSAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcoc3RhdGUudm0oKSwgc3RhdGUuYXJn
dW1lbnQoMykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBEZXByZWNhdGVk
OjpTY3JpcHRWYWx1ZSBkYXRhQXJnKHZtLCBzdGF0ZS5hcmd1bWVudCgzKSk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBNZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+d3JhcHBlZCgpOwogICAgIGV2
ZW50LmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJn
LCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VBcmcsIFdURk1vdmUo
bWVzc2FnZVBvcnRzKSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNldChzdGF0ZS52bSgpLCBqc0V2
ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+bV9kYXRhLnNldCh2bSwganNF
dmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3Mywx
MiBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRlCiAgICAgLy8gVmFs
aWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQuMS4xMy4KICAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2Uo
c3RhdGUsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Ygbm9uLW51bGwgb2Jq
ZWN0cywgcGVyIEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdl
UG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWVzc2FnZVBvcnRDdXN0b20uaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXJyYXlCdWZmZXJBcnJheSBh
cnJheUJ1ZmZlckFycmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7CiAgICAgICAgIGF1
dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZlckFycmF5KTsKLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsK
IAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRp
bmdzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0
RGVjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgdWlu
dDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZvcmNl
UmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIERlY2lzaW9uUG9p
bnQgZGVjaXNpb25Qb2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+KG5hdGl2ZVZhbHVl
KSB9OwpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9uIHRvRGVjaXNpb24o
RXhlY1N0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
dWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBFbmZv
cmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBEZWNpc2lvbjo6QWxsb3c7
CiAKICAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lzaW9uPihuYXRpdmVW
YWx1ZSkgfTsKQEAgLTExOSw4ICsxMTksMTEgQEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3M6OmRlYwogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVj
aXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFsdWUpIH07Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdyYXBwZWQoKS5zZXREZWNpc2lvbihkZWNp
c2lvbik7CkBAIC0xMzMsOCArMTM2LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNl
dHRpbmdzOjp1bmIKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldFVuYmxv
Y2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24geyB0b0RlY2lz
aW9uKHN0YXRlLCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
d3JhcHBlZCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1JlcXVlc3REZWNpc2lv
bik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDExICs0OSwx
MiBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgRXhlY1N0
YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoc3RhdGUsIG1f
ZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBy
ZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRhLT5pbnZva2VDYWxs
YmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5jdGlvbk9yT2JqZWN0
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0Tm9kZSIpLCByZXR1cm5lZEV4
Y2VwdGlvbik7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCByZXR1cm5lZEV4Y2Vw
dGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAgIC8vIFJldGhyb3cg
ZXhjZXB0aW9uLgogICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIHJldHVybmVk
RXhjZXB0aW9uKTsKQEAgLTYyLDcgKzYzLDcgQEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKE5vZGUqIAogICAgIH0KIAogICAgIHVpbnQxNl90IHJlc3VsdCA9IGNvbnZlcnQ8dWlu
dDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICByZXR1cm4gcmVz
dWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5n
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJKU05vZGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZy5oPgorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApAQCAtMzUsNiArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFZlY3RvcjxzdGQ6
OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRvTm9kZU9yU3RyaW5n
VmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKIAogICAgIFZlY3RvcjxzdGQ6OmV4
cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3VsdDsKQEAgLTQ2LDcg
KzUwLDcgQEAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxObwogICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFwcGVkKCkpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3Rh
dGUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdHJpbmcpOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDEzICs0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTVmFsdWUgSlNTUUxUcmFu
c2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KIAogICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBhc3NlbWJsZSB0aGUgbGlzdCBvZiBTUUwgYXJndW1l
bnRzCkBAIC02MywxNSArNjYsMTUgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRl
U3FsKEV4ZQogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtODEsNyArODQsNyBAQCBKU1ZhbHVl
IEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBw
ZW5kIGl0CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
NyArOTAsNyBAQCBKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVCiAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTYgKzc5LDE5IEBAIGJvb2wg
SlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAogdm9pZCBKU1N0b3JhZ2U6Omdl
dE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTdG9yYWdl
Kj4ob2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKGVjKTsKICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3JhcHBlZCgpLmtleShp
LCBlYykpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCkBAIC05Nyw2ICsx
MDAsOSBAQCB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iCiAKIGJvb2wg
SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3Vs
dCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUgY3VzdG9tIHB1dCBp
ZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBieSB0aGlzIG5hbWUu
CiAgICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2FsbGluZyBjYW5HZXRJ
dGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNrCiAgICAgLy8gdGhl
IG5hdGl2ZSBwcm9wZXJ0eSBzbG90cyBtYW51YWxseS4KQEAgLTExMCw3ICsxMTYsNyBAQCBib29s
IEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5k
aWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFuZGxlIHRoZSBwdXQgb3BlcmF0
aW9uICh3aGljaAogICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0aGUgY2FsbGVyIG5vdCB0byBl
eGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGluZGljYXRlIHdoZXRoZXIKICAg
ICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlIHRoZSBvcGVy
YXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMSBAQCB2b2lkIEpTVGV4dFRyYWNrOjp2aXNp
dEFkZGl0aW9uYWxDaGlsZHJlCiB2b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgp
LnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6dmlzaXRBZGRp
dGlvbmFsQ2hpbGRyCiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQo
c3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lkIEpTVmlkZW9UcmFjazo6c2V0
S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQo
KS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEw
ICsxMDUsMTAgQEAgSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZAogCiAg
ICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNp
Z25lZCBwbmFtZSA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJmV4ZWMpOwotICAgIGlmIChl
eGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC5nZXRJbmRleGVkUGFyYW1ldGVyKHBuYW1lLCBpbmRleCk7CiAgICAgcmV0dXJuIHRv
SlMoJmV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVy
KEpTV2ViRwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbzsKICAgICBz
d2l0Y2ggKG9iamVjdFR5cGUpIHsKQEAgLTMzNSw3ICszMzUsNyBAQCBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcgbmFtZSA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMRXh0ZW5z
aW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKICAgICByZXR1cm4g
dG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwpAQCAtMzU3LDEzICszNTcs
MTMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQg
PSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIp
LnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVj
KSB7CkBAIC0zODQsNyArMzg0LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4
dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTQwOCw3ICs0MDgs
NyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgaWYgKCFw
cm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBl
Yyk7CiAgICAgaWYgKGVjKSB7CkBAIC00MzcsNyArNDM3LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRv
V3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgdW5zaWduZWQgcG5hbWUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwogICAgIGlmIChl
YykgewpAQCAtNDk2LDYgKzQ5Niw5IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXQKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KIGJv
b2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtNTA4
LDcgKzUxMSw3IEBAIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0MKICAg
ICAKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBK
U0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmVjdG9yW2ldID0gc3RhdGlj
X2Nhc3Q8VD4odi50b051bWJlcigmc3RhdGUpKTsKICAgICB9CkBAIC01NTYsMTEgKzU1OSwxMSBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgfSBlbHNlCiAg
ICAgICAgIGluZGV4ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUp
OwogICAgIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAK
ICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTcwNyw3ICs3
MTAsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChECiAgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICAKICAgICBib29sIHRy
YW5zcG9zZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQ
dHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJL
aXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTQgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlGb3JtYXQgewogCiBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlQWxn
b3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxnb3JpdGhtSWRlbnRp
ZmllcjsKLSAgICBpZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGht
SWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZh
bHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29w
ZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKICAgICBp
ZiAoIXJlc3VsdCkKQEAgLTgxLDcgKzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5Rm9ybWF0
RnJvbUpTVmFsdWUoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52
YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5Rm9y
bWF0OjpSYXc7CkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGJvb2wgY3J5cHRvS2V5VXNhZ2Vz
RnJvbUpTVmFsdWUoRQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgp
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdldEluZGV4KCZzdGF0
ZSwgaSk7CiAgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5cHQiKQogICAgICAg
ICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAgLTE0NSwxNiArMTQ4LDE0
IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
YWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0
aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
ckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJh
bWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0
b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAt
MTY3LDEwICsxNjgsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlwdChF
eAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKQEAgLTIwMSwxNiArMjAyLDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86
OmRlY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdv
cml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29y
aXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50
aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVy
cykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9L
ZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MSkpOwogICAgIGlmICgha2V5KQpAQCAtMjIzLDEwICsyMjIsMTAgQEAgSlNWYWx1ZSBKU1dlYktp
dFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRh
dGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFw
cGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJv
bWlzZURlZmVycmVkKTsKQEAgLTI1NiwxNiArMjU1LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0
bGVDcnlwdG86OnNpZ24oRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAg
YXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigp
IHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oJnN0YXRlLCBhbGdvcml0aG0t
PmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFy
YW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRl
cnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxD
cnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjc4LDEwICsyNzUsMTAgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAgIH0KIAogICAgIENyeXB0b09wZXJh
dGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJh
dGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBk
YXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBK
U1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVy
PiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTMxMSwxNiArMzA4LDE0IEBAIEpTVmFsdWUgSlNXZWJL
aXRTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlmeSgmc3RhdGUsIGFs
Z29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICgh
cGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
UmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0zMzMsMTYgKzMyOCwxNiBAQCBK
U1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgfQogCiAgICAgQ3J5
cHRvT3BlcmF0aW9uRGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRh
RnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJl
KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3Vj
Y2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAo
IWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7
CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC0zNzIs
MjIgKzM2NywyMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkaWdlc3QoRXhlCiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRl
QWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAgIGlm
ICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBh
cmFtZXRlcnNGb3JEaWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCog
cHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJy
ZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVk
KTsKQEAgLTQxNywzMCArNDEwLDI4IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86Omdl
bmVyYXRlS2UKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0
aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRo
bSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVu
dGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRl
cnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBib29sIGV4dHJhY3Rh
YmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAg
ICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYg
KHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNh
Z2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlVc2FnZXMpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MiksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNj
ZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKQEAgLTQ4NCw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRl
JiBzdGF0ZSwgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAga2V5U2Vy
aWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
Pigmc3RhdGUsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDk3LDExICs0ODgsMTEgQEAgc3RhdGlj
IHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogCiAgICAgT3B0aW9uYWw8Q3J5cHRv
QWxnb3JpdGhtUGFpcj4gcmVjb25jaWxlZFJlc3VsdCA9IGtleVNlcmlhbGl6YXRpb24tPnJlY29u
Y2lsZUFsZ29yaXRobShhbGdvcml0aG0uZ2V0KCksIHBhcmFtZXRlcnMuZ2V0KCkpOwogICAgIGlm
ICghcmVjb25jaWxlZFJlc3VsdCkgewotICAgICAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdvcml0aG0gc3BlY2lmaWVkIGlu
IGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1wb3J0S2V5IGFzIGFy
Z3VtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhbGdvcml0aG0gPSByZWNvbmNpbGVkUmVzdWx0LT5hbGdvcml0aG07CkBA
IC01MTMsMTUgKzUwNCwxNSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0
ZSwgCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVj
b25jaWxlRXh0cmFjdGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2FnZXMoa2V5VXNhZ2VzKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBrZXlEYXRhID0ga2V5U2Vy
aWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzOSw0NSArNTMwLDQ0IEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZv
cm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9
IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5
Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRh
RnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
IAogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBSZWZQdHI8Q3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAgICBpZiAoIXN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7CiAgICAgICAgIGFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0g
ICAgICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGht
KTsKKyAgICAgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgfQorCiAgICAgICAgIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0YXRlLCBhbGdvcml0
aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBp
ZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAg
ICAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAg
aWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAg
IENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlV
c2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVzYWdlcyk7Cisg
ICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYg
KCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0K
ICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9t
aXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTU5MCw3ICs1
ODAsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoCiAgICAgfTsK
IAogICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBkYXRhLCBXVEZNb3Zl
KGFsZ29yaXRobSksIFdURk1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMs
IFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4gcHJv
bWlzZURlZmVycmVkLT5wcm9taXNlKCk7CkBAIC02MTcsNyArNjA3LDcgQEAgc3RhdGljIHZvaWQg
ZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZv
cm1hdDo6SldLOiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5nID0gcmVzdWx0LnV0
ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHRCdWZm
ZXI7CkBAIC02NDAsMTAgKzYzMCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpl
eHBvcnRLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZv
cm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9t
SlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4g
a2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7
CiAgICAgaWYgKCFrZXkpCkBAIC02NTksNyArNjQ5LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRs
ZUNyeXB0bzo6ZXhwb3J0S2V5KAogICAgIH07CiAKICAgICBXZWJDb3JlOjpleHBvcnRLZXkoc3Rh
dGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZh
aWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTY3NCwxMCAr
NjY0LDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsK
LSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9u
KCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tl
eTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkK
QEAgLTY5NCwxNiArNjg0LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBL
ZXkoRXgKICAgICB9CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFhbGdv
cml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5j
cnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgzKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRl
cnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJv
bWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRy
PERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC03NDYsMTYgKzczNCwxNiBA
QCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYg
KCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtl
eUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1
Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5RGF0YTsKLSAgICBp
ZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1Zh
bHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlEYXRhKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8
Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5KQpAQCAtNzY4LDQ0
ICs3NTYsNDEgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAg
IH0KIAogICAgIGF1dG8gdW53cmFwQWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXVud3JhcEFs
Z29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0aG0pOworICAgIGlmICghdW53
cmFwQWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAg
YXV0byB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIHVud3JhcEFsZ29yaXRobS0+
aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCF1bndy
YXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcEFsZ29yaXRobVBh
cmFtZXRlcnMpOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0FsZ29yaXRo
bT4gdW53cmFwcGVkS2V5QWxnb3JpdGhtOwogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzOwogICAgIGlmICghc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxsKCkpIHsKICAgICAgICAgdW53cmFwcGVkS2V5QWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDQpKTsKLSAgICAgICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG0pIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0aG0pOworICAgICAgICBpZiAo
IXVud3JhcHBlZEtleUFsZ29yaXRobSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgICAgICB9CisKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtl
eSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFy
YW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtleUFsZ29yaXRobVBh
cmFtZXRlcnMpOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAog
ICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpID49IDYpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNh
Z2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDcpIHsKLSAgICAgICAg
aWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNiks
IGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtODE5LDExICs4MDQsMTUgQEAgSlNWYWx1ZSBKU1dl
YktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgICAgICBhdXRvIGltcG9ydEZhaWx1cmVD
YWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAgICAgICAgICAgd3JhcHBlci0+cmVq
ZWN0KG51bGxwdHIpOwogICAgICAgICB9OworCisgICAgICAgIFZNJiB2bSA9IGRvbUdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCiAgICAgICAgIEV4ZWNTdGF0ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAgICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBzdGQ6
Om1ha2VfcGFpcihyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgdW53cmFwcGVkS2V5QWxn
b3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzLCBleHRyYWN0YWJsZSwga2V5
VXNhZ2VzLCBXVEZNb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoaW1wb3J0RmFp
bHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNvbGUsIGFuZCBwb3NzaWJseSB0
byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVkIHdheSB0byBwYXNz
IGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25zLgotICAgICAgICAg
ICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH0K
ICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZleGVj
KSk7CiAKICAgICBTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1dURlN0cmluZygmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gU2VlIHNlY3Rpb24gNC44LjIgc3RlcCAxNCBvZiBX
ZWJXb3JrZXJzIGZvciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFs
U2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsMTMgKzYyLDE2IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRBZGRpdGlvbmEK
IAogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKEV4ZWNTdGF0ZSYg
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxz
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsr
aSkgewogICAgICAgICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3RyaW5nKCZzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpA
QCAtODcsNyArOTAsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQo
CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xv
YmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICghYWN0
aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC0xMDQsNyArMTA3LDcgQEAgSlNW
YWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAogICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24g
PSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgp
LCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIEpTQzo6
SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm8KICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIGZ1bmN0aW9uID0gb2JqZWN0LmdldCgm
c3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHByb3BlcnR5TmFtZSkp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCiAgICAg
aWYgKCFmdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKQEAgLTcwLDE5ICs3MCwyMyBAQCBKU0M6OkpT
VmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAKIGJvb2wgUmVhZGFibGVTdHJlYW1E
ZWZhdWx0Q29udHJvbGxlcjo6aXNDb250cm9sbGVkUmVhZGFibGVTdHJlYW1Mb2NrZWQoKSBjb25z
dAogewotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0
ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCi0gICAg
YXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZt
KCkuY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAg
ICAgYXV0byByZWFkYWJsZVN0cmVhbSA9IG1fanNDb250cm9sbGVyLT5nZXQoJnN0YXRlLCBjbGll
bnREYXRhLmJ1aWx0aW5OYW1lcygpLmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1l
KCkpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVT
RUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBhdXRvIGlzTG9ja2VkID0gZ2xv
YmFsT2JqZWN0KCktPmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50
ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0KCk7CisgICAgYXV0
byBpc0xvY2tlZCA9IGdsb2JhbE9iamVjdC0+YnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCkucmVh
ZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1Mb2NrZWRGdW5jdGlvbi5n
ZXQoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFy
Z3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJlYW0pOwogICAgIGF1dG8gcmVzdWx0ID0gY2FsbEZ1
bmN0aW9uKHN0YXRlLCBpc0xvY2tlZCwgSlNDOjpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwot
ICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5pc1RydWUoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURl
ZmF1bHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsOCArNzQsMTIgQEAgaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBSZWFkYWJsZVN0
cmVhbQogCiBpbmxpbmUgYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1
ZXVlKFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiYmIGJ1ZmZlcikKIHsKLSAgICBKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIoJnN0YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRoaXMt
Pmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgZXJy
b3Ioc3RhdGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoJnN0YXRlKSk7CkBAIC04NCw4ICs4OCw4
IEBAIGlubGluZSBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2wKICAgICBhdXRvIGxl
bmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIGF1dG8gY2h1bmsgPSBKU0M6OlVpbnQ4
QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAgICAgQVNTRVJUKGNo
dW5rKTsKLSAgICBlbnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGNo
dW5rLmdldCgpKSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgZW5x
dWV1ZShzdGF0ZSwgdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgY2h1bmsuZ2V0KCkpKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxl
ZEFjdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+
IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRE9NV3JhcHBlcldvcmxk
JiBpc29sYXRlZFdvcmxkLCBDb250ZW50U2VjdXJpdHlQb2xpY3kqIHBvbGljeSkKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YSh2LCBjYWxsRGF0YSkgPT0gQ2FsbFR5cGU6
Ok5vbmUpIHsKICAgICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxvd0V2YWwoZXhlYykp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHYu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+KG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29sYXRlZFdvcmxkKSk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSAr
NDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJbnNwZWN0b3JGcm9u
dGVuZEhvc3QmIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gc2NyaXB0U3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzY3JpcHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGdsb2JhbE9i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKSwgdG9K
Uygmc2NyaXB0U3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7Ci0gICAgaWYgKHNjcmlwdFN0
YXRlLmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3Rh
dGUsIHNjcmlwdFN0YXRlLmV4Y2VwdGlvbigpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0U3RhdGUsIHNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg5LDcgKzM4OSw5IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgc2hvdWxkVGVybWluYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpOworICAgICAgICBW
TSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIAog
ICAgIHZvaWQgdGhyb3dTdGFja092ZXJmbG93KCkKQEAgLTI0NDgsNiArMjQ1MCw5IEBAIHByaXZh
dGU6CiAKIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxp
emUoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBWZWN0b3I8dWludDMyX3QsIDE2PiBpbmRleFN0
YWNrOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1lU3RhY2s7CiAgICAg
VmVjdG9yPEpTT2JqZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwpAQCAtMjQ2OCw3ICsyNDcz
LDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgogICAgICAgICAg
ICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBKU0FycmF5KiBv
dXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAwLCBtX2dsb2JhbE9iamVjdCwg
bGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKG91dEFy
cmF5KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChvdXRBcnJheSk7CkBA
IC0yNzA2LDEzICsyNzExLDE2IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlh
bGl6ZWQKIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVl
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhv
cmlnaW5Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRv
SlMoZXhlYywgYXBpVmFsdWUpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNl
cmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIHZhbHVl
LCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRp
b24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9u
KCktPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIEFTU0VSVChzZXJpYWxpemVkVmFsdWUpOwpAQCAtMjc0MSwxMiArMjc0OSwx
NSBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiBKU1ZhbHVlUmVm
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmIGRlc3RpbmF0
aW9uQ29udGV4dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHRvSlMoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAg
ICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1
ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
ICAgICBBU1NFUlQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjpldmFsdWF0ZShjbwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29ya2VyR2xvYmFsU2Nv
cGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJH
bG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCkBA
IC0xNDQsOSArMTQ0LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUo
Y28KICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJsKCkuc3RyaW5nKCk7
CiAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGVycm9yOwogICAgICAgICBpZiAobV93
b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1lc3NhZ2UsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBlcnJvciwgc291cmNlQ29kZS5jYWNoZWRT
Y3JpcHQoKSkpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7Ci0gICAgICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgdm0uY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4
Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MTAyNCw3ICsxMDI0LDcgQEAgc3ViIEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29u
dAogICAgICAgICBteSAkbmVlZEV4Y2VwdGlvbkNoZWNrID0gMDsKICAgICAgICAgZm9yZWFjaCBt
eSAkbWVtYmVyIChAeyRkaWN0aW9uYXJ5LT5tZW1iZXJzfSkgewogICAgICAgICAgICAgaWYgKCRu
ZWVkRXhjZXB0aW9uQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSlcbiI7CisgICAgICAgICAgICAgICAgJHJl
c3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiI7CiAg
ICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgICAgICByZXR1cm4gTnVsbG9wdDtcbiI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAjIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgd2Fu
dCB0aGlzIHRvIHNoYXJlIGEgbG90IG1vcmUgY29kZSB3aXRoIEpTVmFsdWVUb05hdGl2ZS4KQEAg
LTMxMjcsNyArMzEyNyw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
O1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTtcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+aXNTdGF0aWM7CiAgICAgICAgICAgICBpZiAoISRh
dHRyaWJ1dGUtPmlzU3RhdGljKSB7CkBAIC0zMjI1LDcgKzMyMjUsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFs
dWU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAo
VU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkge1xuIik7CkBAIC0zMjM2LDcgKzMyMzYsNyBAQCBzdWIg
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAk
bmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2Vw
dGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgICAgIHJldHVybiBmYWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzk4Miw3ICszOTgyLDcgQEAgc3ViIEdlbmVyYXRlUGFy
YW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1c
biIpCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBWZWN0b3I8JG5hdGl2ZUVsZW1lbnRUeXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJn
dW1lbnRzPCRuYXRpdmVFbGVtZW50VHlwZT4oKnN0YXRlLCAkYXJndW1lbnRJbmRleCk7XG4iKTsK
LSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFtZSkiOwpAQCAtNDAxNyw3ICs0MDE3LDcgQEAgc3ViIEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZTwk
Y2xhc3NOYW1lPigqc3RhdGUsICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIk
aW5kZW50ICAgIGlmIChVTkxJS0VMWSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRu
YW1lXCIsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKQEAgLTQwNDAsNyAr
NDA0MCw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRP
ck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICAkbmFtZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5
VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKCEkbmFtZSkpXG4iKTsKQEAgLTQw
ODMsNyArNDA4Myw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2
ZVZhbHVlfTtcbiIpOwogICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7
CiAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC00NDY0LDcgKzQ0NjQsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAu
ICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAK
ICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNj
cmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
ImlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
IiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAg
IH0KIApAQCAtNTI3OCw3ICs1Mjc4LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3Ry
aW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0
ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2lu
dGVyZmFjZU5hbWV9SW5pdCBldmVudEluaXQ7CkBAIC01Mjg3LDcgKzUyODcsNyBAQCB0ZW1wbGF0
ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRl
c3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCog
aW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAg
ICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFy
eSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKQEAgLTU0MzAsNyArNTQz
MCw3IEBAIEVORAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0QWN0aXYKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Q3VzdG8KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5hbm90aGVyRnVuY3Rpb24oV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUg
PSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50Q29uc3RydWN0
b3JJbml0IGV2ZW50SW5pdDsKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7CiAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwg
YWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2Jq
ZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChzdGF0ZSk7Ci0gICAgICAgIEFTU0VSVCgh
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9t
IHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAgICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5
KHN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsy
MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yODUsNyAr
Mjg2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRSZWd1bGFyQXR0cmlidXRl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5Niw3ICsyOTcs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3Qq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMDQsNyArMzA2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2
YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNB
bmRQcml2YXRlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMxNiw3ICszMTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2Jh
bE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zMjQsNyArMzI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzM3LDcgKzM0MCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NSw3ICsz
NDksNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcy
LDcgKzM3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmEKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZWd1bGFy
T3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQ
YXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQ
YXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00
MTYsNyArNDIwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYQog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVz
dFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMxLDEwICsyMzEsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikg
OiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVk
VGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4
dCkpCkBAIC02NjMsOSArNjYzLDEwIEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW0KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjc4LDcgKzY3OSw4IEBA
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTY4Niw3ICs2
ODgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3ICs3MDEsOCBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MTYsNyAr
NzE5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NzM5LDkgKzc0MywxMCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxl
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzU0LDcgKzc1
OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc2
Miw3ICs3NjgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGltcGwsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3NSw3ICs3ODEsOCBAQCBib29sIHNldEpTVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03OTIsNyArNzk5LDggQEAgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtODUyLDcgKzg2MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5h
cmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtOTMwLDcgKzkzOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDggQEAg
Ym9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEz
IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0
cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/
IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIz
ID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgyKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29u
c3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIFdURk1vdmUoc3RyMSksIFdURk1vdmUo
c3RyMiksIFdURk1vdmUoc3RyMyksIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3
ICsyMDcsOCBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb2RlKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTIxNSw3ICsy
MTYsNyBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjEsNyArMzYxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjksNyArMzcwLDcgQEAgYm9vbCBzZXRKU1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODAsNyArMzgxLDggQEAgYm9v
bCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zODgsNyArMzkwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zOTksNyArNDAxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDcsNyArNDEwLDcgQEAgYm9vbCBzZXRK
U1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTgsNyArNDIx
LDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MjcsNyArNDMxLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyNSw5NyArNTI1LDk3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFy
eT4KICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25W
YWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1l
cmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJp
bmdEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmlu
Z1dpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVs
dCIpKSwgImRlZmF1bHRTdHJpbmciKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxTdHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xl
YW5XaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVs
dCIpKSwgZmFsc2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25h
bDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmlu
Z3MgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3Mi
KSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJl
c3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0
cmljdGVkRG91YmxlID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3Vi
bGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdp
dGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3Ry
aWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0
ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRG
bG9hdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQg
PSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSks
IFNob3VsZEFsbG93Tm9uRmluaXRlOjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVn
ZXJDbGFtcGVkID0gY29udmVydE9wdGlvbmFsPGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVk
IikpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBO
dWxsb3B0OwogICAgIGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9u
YWw8aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0T3B0aW9u
YWw8dWludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSksIEVuZm9y
Y2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRP
cHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5v
cm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJf
dD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJpbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2VyV2l0aERlZmF1
bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5v
cm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlciA9IGNvbnZlcnRPcHRpb25h
bDx1aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uLCAwKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0
byBsYXJnZUludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIi
KSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29u
dmVydE9wdGlvbmFsPGludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1h
bENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlv
bmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFs
PHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENv
bnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvKiBudWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9k
ZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgIm51bGxhYmxlTm9kZSIpKSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBhbnlW
YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSksIGpzVW5k
ZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpT
VmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBkaWN0aW9u
YXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91
bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RP
Ymo6OkRpY3Rpb25hcnkgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCks
IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlv
blZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHN0cmluZ1dpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1
bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0
cmluZ3MpLCBXVEZNb3ZlKHJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERv
dWJsZSksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RG
TW92ZSh1bnJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxs
SW50ZWdlckNsYW1wZWQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92
ZShzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJX
aXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUlu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3Zl
KHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSks
IFdURk1vdmUoYW55VmFsdWUpLCBXVEZNb3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlN
ZW1iZXIudmFsdWUoKSB9OwpAQCAtNjMxLDEzICs2MzEsMTMgQEAgdGVtcGxhdGU8PiBPcHRpb25h
bDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAg
ICAgYXV0byByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXRE
ZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0Iikp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byogbm9uTnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9k
ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJub25OdWxsYWJsZU5vZGUiKSksIElzTnVsbGFibGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXF1aXJlZERp
Y3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5v
ZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02NTUsNyArNjU1LDcg
QEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJv
b2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRo
b3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFu
V2l0aG91dERlZmF1bHQpIH07CkBAIC02NzMsNyArNjczLDcgQEAgdGVtcGxhdGU8PiBPcHRpb25h
bDxBbHRlcm5hdGVEaWN0aW9uYXJ5TgogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAg
ICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9
IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAg
cmV0dXJuIEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVl
KSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC0zMDkwLDkgKzMwOTAsMTAg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZwogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0T2Jq
OjpzZXRTdGF0aWNTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTMxMDMsNyArMzEwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTMxMTgsNyArMzEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0
YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTMxMjYsNyArMzEyOSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRl
KiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMTM5LDcgKzMxNDIsOCBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSog
c3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
MTQ3LDcgKzMxNTEsNyBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3Rh
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEJ5dGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMxNTgsNyArMzE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRy
KEV4ZWNTdGF0ZSogc3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTMxNjYsNyArMzE3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4
ZWNTdGF0ZSogc3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTc3LDcgKzMxODIsOCBAQCBib29sIHNldEpTVGVz
dE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTg1LDcgKzMxOTEsNyBAQCBib29sIHNldEpTVGVzdE9i
alNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE5Niw3ICszMjAyLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIwNCw3ICszMjExLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENsYW1wZWRTaG9ydEF0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIxNSw3ICsz
MjIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIyMyw3ICszMjMx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzIzNCw3ICszMjQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0cihFeGVjUwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzI0Miw3ICszMjUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0cihFeGVjUwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNTMsNyArMzI2Miw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyNjEsNyArMzI3MSw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNzIsNyArMzI4
Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyODAsNyArMzI5MSw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zMjkxLDcgKzMzMDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMjk5LDcgKzMzMTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRy
KEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzMxMCw3ICszMzIyLDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzMxOCw3ICszMzMxLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTMzMjksNyArMzM0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0cihFeGVjU3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTMzMzcsNyArMzM1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0cihFeGVjU3RhdGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwg
dmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zMzQ4LDcgKzMzNjIsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zMzY5LDcgKzMzODQsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxs
YWJsZU9iakF0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zMzkzLDcgKzM0MDksOCBAQCBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0cihFeGVjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNDE0LDcgKzM0MzEsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zNDIyLDcgKzM0NDAsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcg
KzM0NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDQxLDcgKzM0
NjAsNyBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDUyLDcgKzM0NzEsOCBA
QCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDYwLDcgKzM0ODAsNyBAQCBi
b29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBh
cnNlPEFsdGVybmF0ZUVudW1OYW1lPigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2
ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ3Myw3ICszNDkzLDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ5NCw3ICszNTE1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzUwMiw3ICszNTI0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jv
b2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM1MTMsNyArMzUzNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM1MjEsNyArMzU0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNTMyLDcgKzM1NTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlN0cmluZ0F0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNTQwLDcgKzM1NjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVT
VlN0cmluZ0F0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzU1MSw3ICszNTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzU1OSw3ICszNTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTcwLDcgKzM1OTUsOCBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTc4LDcgKzM2MDQsNyBAQCBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWlu
dDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50
ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzU4OSw3ICszNjE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzU5Nyw3ICszNjI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihF
eAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwOCw3ICszNjM1LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzYxNiw3ICszNjQ0LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2MjcsNyArMzY1NSw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2MzUsNyArMzY2NCw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVU
b1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjQ2LDcgKzM2NzUsOCBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjU0LDcgKzM2ODQsNyBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NjUsNyArMzY5NSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2NzMsNyArMzcwNCw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVn
cmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM2ODQsNyArMzcxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2
OTIsNyArMzcyNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzAzLDcgKzM3MzUs
OCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzExLDcgKzM3NDQsNyBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MjMsNyArMzc1Niw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3MzEsNyArMzc2NSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzQzLDcgKzM3
NzcsOCBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzUxLDcgKzM3ODYs
NyBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewog
ICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOwpAQCAtMzc2Niw3ICsz
ODAxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc3NCw3ICszODEw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtMzc4NSw3ICszODIxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzc5Myw3ICszODMwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
ODA0LDcgKzM4NDEsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODEz
LDcgKzM4NTEsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkBAIC0zODI1LDcgKzM4NjMsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zODM0LDcgKzM4NzMsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODQ2LDcgKzM4ODUsOCBAQCBib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODU0LDcgKzM4OTQsNyBAQCBib29sIHNl
dEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjUsNyArMzkwNSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4NzQsNyArMzkxNSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtMzg4Niw3ICszOTI3LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkwMSw3ICszOTQzLDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkxNiw3ICszOTU5LDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzMSw3ICszOTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzOSw3ICszOTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzk1MCw3ICszOTk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
Mzk1OCw3ICs0MDA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJD
YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUo
KnN0YXRlLCBhY3RpdmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5NjksNyArNDAxNSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5OTMsNyArNDA0MCw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMTQsNyArNDA2Miw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMzgsNyArNDA4Nyw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNjIsNyArNDExMiw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwODYsNyArNDEzNyw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMTAsNyArNDE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZEMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMzIsNyArNDE4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMShFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQxNDAsNyArNDE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMShFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE1Myw3ICs0MjA3LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE2MSw3ICs0MjE2LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC00MTc0LDcgKzQyMjksOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMo
RXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC00MTgyLDcgKzQyMzgsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhl
Y1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxOTUsNyArNDI1MSw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMTIsNyArNDI2OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQyMjksNyArNDI4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNkNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQyNDUsNyArNDMwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0
cmlidXRlKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQyNjIsNyArNDMyMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBv
aW50KEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQyODYsNyArNDM0Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9p
bnQoRXhlY1N0YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQzMTAsNyArNDM3Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVj
U3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQzMTgsNyArNDM4MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3Rh
dGUqIHMKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MzI5LDcgKzQzOTIsOCBAQCBib29sIHNldEpTVGVzdE9iaklk
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00MzM3LDcgKzQ0MDEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzQ4LDcgKzQ0MTIsOCBAQCBib29sIHNldEpTVGVz
dE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzYzLDcgKzQ0MjgsOCBAQCBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MzcxLDcgKzQ0MzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MzgyLDcgKzQ0NDgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVB
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00Mzkw
LDcgKzQ0NTcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUs
IHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQwMSw3ICs0NDY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQwOSw3ICs0NDc3LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRv
VVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRO
dWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MjAsNyArNDQ4OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQ0MjgsNyArNDQ5Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVTdHJpbmdWYWx1ZShFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQzOSw3ICs0NTA4
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3ICs0NTE3LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0NjAsNyArNDUzMCw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0NjksNyArNDU0MCw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKICAgICBSZWY8VGVzdE5vZGU+
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1
dGUoKTsKICAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDgwLDcgKzQ1NTEsOCBAQCBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDkxLDcgKzQ1NjMsNyBAQCBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDUwMiw3ICs0NTc0LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDUxMCw3ICs0NTgzLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTQ2LDcgKzQ2MTksNyBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC00NTY5LDcgKzQ2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNDYyNywxMCArNDcwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdB
cmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDY2OCwxMCArNDc0MSwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFy
ZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3Vt
ZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzA5LDEwICs0NzgyLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc1
MCwxMCArNDgyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpB
cmcpKQpAQCAtNDc5MSwxMCArNDg2NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAz
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252
ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQo
MSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFvYmpBcmcpKQpAQCAtNDgzMiw3ICs0OTA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcg
PSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00ODUyLDcgKzQ5MjUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVz
b2x2ZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7CkBAIC00ODk4LDcgKzQ5NzEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3Ry
aW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKQEAgLTQ5MjAsNyArNDk5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1
bWVudCgwKTsKICAgICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9u
YWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk0NCw3
ICs1MDE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBlbnVtQXJnOwogICAgIGlmICghZW51bUFyZ1Zh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZW51bUFyZyA9IHBhcnNlPFRlc3RPYmo6OkVu
dW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIWVudW1BcmcpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51
bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5NzAsNyArNTA0
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAg
ZW51bUFyZyA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3Rh
dGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIs
ICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUi
LCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5
OTUsNyArNTA2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBw
ZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC01
MDIwLDcgKzUwOTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmcoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0
aG9kV2l0aFVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MDQwLDcgKzUxMTMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE51bGxhYmxlVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUwNjAsNyArNTEzMyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA4MCw3ICs1
MTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTc5LDcg
KzUyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJn
dW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTE5OSw3
ICs1MjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChX
VEZNb3ZlKGFyZ3VtZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
QEAgLTUyMTksMTMgKzUyOTIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBs
aXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNh
c3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3Rl
bmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5h
ZGRFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0
dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUy
NDUsMTMgKzUzMTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRo
aXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3Rl
bmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJyZW1vdmVFdmVudExpc3RlbmVy
IiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1l
bnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZW1v
dmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0
dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUy
ODQsNyArNTM1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
d2l0aFNjcmlwdFN0YXRlT2JqKCpzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01MzIxLDcgKzUzOTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCBlYykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KQEAgLTUzODAsNyArNTQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKIAogICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDAwLDcgKzU0NzMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAq
Y29udGV4dCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CkBAIC01NDg2LDcgKzU1NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTA0LDcgKzU1NzcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVl
KFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU1MjQsMTAgKzU1OTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NDcsMTMgKzU2MjAsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQxID0g
c3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MiA9IHN0YXRl
LT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSks
IFdURk1vdmUob3B0MikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01NTcxLDcgKzU2NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5n
KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
NTg5LDcgKzU2NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiB2YWx1
ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
NjA3LDcgKzU2ODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRv
bWljU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU2MjUsNyArNTY5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBBU0NJSUxpdGVyYWwoImZvbyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY0Myw3ICs1NzE2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmco
c3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUo
c3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2
NjEsNyArNTczNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKFdURk1vdmUoc3Ry
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2Nzks
NyArNTc1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
Njk3LDcgKzU3NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRv
bWljU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MTUsNyArNTc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBlbXB0eVN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MzMsNyArNTgwNiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NTEsNyAr
NTgyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3Ry
aW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzY5LDcgKzU4NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92
ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNTc4Nyw3ICs1ODYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBudW1iZXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODA1LDcgKzU4NzgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExv
bmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU4MjMsNyArNTg5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg0MSw3ICs1
OTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIg
PSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90Pigp
IDogY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg1OSw3ICs1OTMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVp
bnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC01ODc3LDcgKzU5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODk1LDcgKzU5
NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9O
YXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlz
RW1wdHkoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01OTEzLDcgKzU5ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPGJvb2w+KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9Cb29sZWFuKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29s
ZWFuKFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01OTMxLDcgKzYwMDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShX
VEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNjAwOSw3ICs2MDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyID0gbnVsbHB0cjsKICAg
ICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVyKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RP
YmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNv
bHZlciIpOwpAQCAtNjA1Miw3ICs2MTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1
bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKQEAgLTYxMTYs
NyArNjE4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwpAQCAtNjI0OSw3ICs2MzIy
LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAg
ICAgfQogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1v
dmUob2JqQXJnKSwgV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI3NSw3ICs2MzQ4LDcgQEAgc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAi
b3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRN
ZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI5NSw3ICs2MzY4LDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJB
cmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjMx
NSw3ICs2Mzg4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjM3OCw3ICs2NDUx
LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0MTgsNyArNjQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC02NDM4LDcgKzY1MTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVB
cnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDU4LDcgKzY1MzEs
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChX
VEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC02NTQ2LDcgKzY2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5h
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRl
c3RPYmoqIG9iakFyZyA9IG51bGxwdHI7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWRPck51bGwoKSkgewpAQCAtNjU3OCw3ICs2NjUxLDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7CiAg
ICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92
ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjYyNCw3ICs2Njk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFy
ZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJn
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY2NDksNyArNjcy
Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY2NjYsNyArNjczOSw3IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUo
dHlwZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02
NzA5LDEwICs2NzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1
aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDEpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
Y2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFy
Z3NMb25nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTY3MzIsMTAgKzY4MDUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0
PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFy
Z3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjc1NSw3ICs2ODI4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1
bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
VW5zaWduZWRMb25nU2VxdWVuY2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Nzc2LDcgKzY4NDks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2
YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RG
TW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02ODIxLDEwICs2ODk0LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9
IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2Vx
dWVuY2UoV1RGTW92ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02ODQ0LDcgKzY5MTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+YXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50
SWQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjkyNyw3ICs3
MDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDMoV1RGTW92
ZSh2YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC02OTQ3LDcgKzcwMjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwMTIsMTAgKzcwODUsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0
aXZlQXJndW1lbnRzPFN0cmluZz4oKnN0YXRlLCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC52YXJpYWRpY1N0cmluZ01ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzAzNSwxMCAr
NzEwOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlYWQgPSBjb252ZXJ0PGRvdWJsZT4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBWZWN0b3I8ZG91YmxlPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91
YmxlPigqc3RhdGUsIDEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91
YmxlTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MDg3LDEwICs3MTYwLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBT
aG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBi
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdU
Rk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC03MTM3LDcgKzcyMTAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1l
bnQoV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzE4NCw3ICs3MjU3LDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFy
Z3VtZW50KFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcyMTAsNyArNzI4Myw3IEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91
bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQ
cm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3Jl
YXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczMjQsNyAr
NzM5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJs
b2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTczNDcsNyArNzQyMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczOTAsNyAr
NzQ2Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25h
bE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTc0MTEsNyArNzQ4NCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQo
V1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTc0NTAsNyArNzUyMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5pdCA9IGNvbnZlcnREaWN0aW9u
YXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hdHRhY2hTaGFkb3dSb290KGluaXQudmFsdWUoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRy
LCAiQXJyYXlCdWZmZXIiKTsKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUJ1
ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmlldyhzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyVmlldykpCiAgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImFy
cmF5QnVmZmVyVmlldyIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJB
cnJheUJ1ZmZlclZpZXciKTsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmlu
ZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0
ZShXVEZNb3ZlKHN0cmluZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5
Q3JlYXRlZChzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0
KSkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29u
c3RydWN0SlMKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNh
c3RlZFRoaXMpOwogICAgIFZlY3RvcjxpbnQzMl90PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1l
bnRzPGludDMyX3Q+KCpzdGF0ZSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2Jq
ZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdz
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNh
bGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3Ry
aW5ncyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4o
KSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJp
bmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC04OCw3
ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5n
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5h
bWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDgg
QEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjU5LDcgKzI2MCw3IEBAIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFZhbHVl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3MCw3ICsyNzEs
OCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yNzgsNyArMjgwLDcgQEAgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2Fj
aGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzIsNyArMTMyLDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJ
S0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAidGVz
dENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwpAQCAtMzYwLDcgKzM2MCw4IEBA
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjgsNyArMzY5
LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM3OSw3ICszODAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1t
dXRhYmxlU2VyaWFsaXplCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg3LDcgKzM4OSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
OTgsNyArNDAwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQwNiw3ICs0MDksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJF
eGNlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTcsNyArNDIwLDggQEAgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNiw3ICs0MzAsNyBAQCBib29s
IHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFs
dWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00MzgsNyArNDQy
LDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0Niw3
ICs0NTEsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ1Nyw3ICs0NjIsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhT
ZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtNDY2LDcgKzQ3Miw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRy
V2l0aFNldHQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAt
NDkxLDcgKzQ5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZz
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byB4ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8aW50MzJf
dD4oKSA6IHRvTmF0aXZlQXJyYXk8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxMSwxOSAr
NTE3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgyKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gY29sb3IgPSBzdGF0ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkgOiBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCg0KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2V0U2hhZG93KFdURk1vdmUod2lkdGgpLCBXVEZNb3Zl
KGhlaWdodCksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKGFscGhhKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU0Myw3ICs1
NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxT
ZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFy
ZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01NjMsNyArNTY5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MywxMCArNTg5LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0
PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwg
V1RGTW92ZShhcmcyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTYyMiw3ICs2MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02NDUsNyArNjUx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8g
dmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9u
MihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY2Nyw3ICs2NzMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpT
VGVzdEV2ZW50VGFyZ2V0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuY2FsbFdpdGhTZXF1
ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsMTIgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBpZiAoIXJvb3RPYmpl
Y3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwor
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXA7CkBAIC0xOTMsNyArMTk3LDcgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogCiAgICAgICAgIC8vIENvbnZlcnQg
YW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAogICAgIH0KIApAQCAtMjI1LDggKzIyOSwxMyBAQCBi
b29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIFJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVj
dCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOwpAQCAtMjQwLDcgKzI0OSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBP
YmplY3QqIG8sIE4KIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhl
YywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0yNjAsMTQgKzI2OSwxOCBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVj
dCogbywgTlBTCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxp
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0g
Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNl
KHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjg0LDEwICsyOTcsMTQgQEAgYm9vbCBfTlBOX0dl
dFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwg
IXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRp
ZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMjk1LDcgKzMxMiw3
IEBAIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAg
IHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIGNv
bnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzE4LDggKzMzNSwxMiBAQCBib29sIF9O
UE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVj
dCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5
TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAgLTMyNyw3ICszNDgsNyBA
QCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBv
YmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBzbG90KTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhl
YywgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJv
b3RPYmplY3QpLCBmYWxzZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMzQ2LDI3ICszNjcsMzIgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBP
YmplY3QqIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAg
IElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlO
YW1lKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGlmICghb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21O
UElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmlt
cCwgZXhlYywgaS0+bnVtYmVyKCkpOwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODEsMTcgKzQwNywyMSBAQCBib29sIF9OUE5f
SGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8
fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVu
dGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3Vs
dCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+
aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDEwICs0NDQsMTQgQEAgYm9vbCBfTlBOX0hhc01ldGhv
ZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RP
YmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxP
YmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNWYWx1ZSBm
dW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVj
LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmlu
ZWQoKTsKICAgICB9CiAgICAgCkBAIC00NDMsOCArNDc3LDEyIEBAIGJvb2wgX05QTl9FbnVtZXJh
dGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290
T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlO
YW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpA
QCAtNDU4LDcgKzQ5Niw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywg
TlAKICAgICAgICAgKmlkZW50aWZpZXIgPSBpZGVudGlmaWVyczsKICAgICAgICAgKmNvdW50ID0g
c2l6ZTsKIAotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC00
NzksOSArNTE3LDEzIEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28K
ICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAg
ICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3Ry
dWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkBA
IC00OTYsNyArNTM4LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBj
bwogICAgICAgICAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAg
ICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQg
KzY4LDEzIEBAIHZvaWQgQ0luc3RhbmNlOjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW4KIAogdm9p
ZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhl
YywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVJbnRlcm5hbC5o
PgogI2ltcG9ydCA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0Nh
dGNoU2NvcGUuaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+CkBAIC0xMjksOCArMTMwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29u
c29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0
aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNl
cHRpb24pOwogfQogCkBAIC0zMzQsOSArMzM3LDEyIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRo
b2Q6KE5TU3RyaW5nICopbmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIExvb2sgdXAg
dGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBn
bG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1
dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNj
b3BlKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTM2OSwxMCArMzc1LDEyIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIGF1
dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJB
TShzY29wZSk7CiAgICAgCiAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpwcm9maWxlZEV2YWx1YXRlKGV4ZWMsIEpTQzo6UHJvZmlsaW5nUmVhc29u
OjpPdGhlciwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIApA
QCAtMzg2LDE3ICszOTQsMTkgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihO
U1N0cgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPihbc2VsZiBfaW1wXSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBz
bG90KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4
ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KIH0KIApAQCAtNDA1LDIyICs0MTUsMjUgQEAgLSAoaWQpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKLQogICAgIGlkIHJlc3VsdE9iajsKICAgICB7CisgICAgICAgIGF1
dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKICAgICAgICAgLy8gTmVlZCB0
byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZv
cmUgY2FsbGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdo
dCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAg
ICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgCisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Cisg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAg
ICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7
CiAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9v
dE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNDM3LDE1ICs0NTAs
MTcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawogICAgIGlmICgh
W3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVj
dCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBf
aW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwog
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgfQogfQogCkBAIC00NTQsMTUgKzQ2OSwxNyBAQCAtIChCT09MKWhhc1dlYlNj
cmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVj
dF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9
IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsIFN0cmluZyhrZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlv
blRvQ29uc29sZShleGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNDkwLDE2ICs1MDcsMTggQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
OworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2lt
cF0tPmdldChleGVjLCBpbmRleCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICB9CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2lu
Um9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNTEyLDE1ICs1
MzEsMTcgQEAgLSAodm9pZClzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9p
bXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBP
YmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNP
bmx5QVNDSUlXaXRoTm9VcHBlcgogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21h
aW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0
b3I8U3RyaW5nPiYgdmVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQodmVjdG9yLmlz
RW1wdHkoKSk7CiAgICAgaWYgKCFhcnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21h
aW5MaXN0OwpAQCAtNzEsNyArNzQsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFp
bkxpc3QoRXhlCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1Zh
bHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAgICAgCiAgICAg
ICAgIC8vIERvbWFpbnMgc2hvdWxkIGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KQEAg
LTg3LDExICs5MCwxNCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhl
CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywg
Y29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3Qg
KCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYpKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
IXR5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3Qg
SlNPYmplY3QqIG9iamVjdCA9IHR5cGVWYWx1ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgQVNTRVJU
KCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCkBAIC0xMDAsNyArMTA2
LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5n
ZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2
YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5Ucmln
Z2VyRmxhZ3NBcnJheTsKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUudG9X
VEZTdHJpbmcoJmV4ZWMpOwpAQCAtMTE2LDEyICsxMjIsMTUgQEAgc3RhdGljIHN0ZDo6ZXJyb3Jf
Y29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2Fk
VHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmln
Z2VyJiB0cmlnZ2VyKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBKU1ZhbHVlIHRyaWdnZXJP
YmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgInRyaWdnZXIiKSk7Ci0gICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0
aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIXRyaWdnZXJPYmpl
Y3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyOwog
ICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5n
ZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOwot
ICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZp
bHRlck9iamVjdC5pc1N0cmluZygpKQorICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IHNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXI7
CiAKICAgICBTdHJpbmcgdXJsRmlsdGVyID0gdXJsRmlsdGVyT2JqZWN0LnRvV1RGU3RyaW5nKCZl
eGVjKTsKQEAgLTEzMSwxMSArMTQwLDExIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRy
aWdnZXIoRXhlY1MKICAgICB0cmlnZ2VyLnVybEZpbHRlciA9IHVybEZpbHRlcjsKIAogICAgIGNv
bnN0IEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0
aXZlIikpOwotICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9u
KCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9vbGVhbigpKQorICAgIGlmICh1cmxGaWx0ZXJD
YXNlVmFsdWUgJiYgIXNjb3BlLmV4Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jv
b2xlYW4oKSkKICAgICAgICAgdHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgPSB1cmxG
aWx0ZXJDYXNlVmFsdWUudG9Cb29sZWFuKCZleGVjKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgcmVz
b3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgInJlc291cmNlLXR5cGUiKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2Vw
dGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
YXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1
ZSwgdHJpZ2dlci5mbGFncywgcmVhZFJlc291cmNlVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxh
Z3NFcnJvcikKICAgICAgICAgICAgIHJldHVybiB0eXBlRmxhZ3NFcnJvcjsKQEAgLTE0Myw3ICsx
NTIsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJy
YXk7CiAKICAgICBjb25zdCBKU1ZhbHVlIGxvYWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImxvYWQtdHlwZSIpKTsKLSAg
ICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7
CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkp
IHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2Fk
VHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCByZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlw
ZUZsYWdzRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNTEs
NyArMTYwLDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFn
c0FycmF5OwogCiAgICAgY29uc3QgSlNWYWx1ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiaWYtZG9tYWluIikpOwotICAg
IGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAg
aWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAg
IGF1dG8gaWZEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QoaWZEb21h
aW4pLCB0cmlnZ2VyLmRvbWFpbnMpOwogICAgICAgICBpZiAoaWZEb21haW5FcnJvcikKICAgICAg
ICAgICAgIHJldHVybiBpZkRvbWFpbkVycm9yOwpAQCAtMTYzLDcgKzE3Miw3IEBAIHN0YXRpYyBz
dGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwogICAgIAogICAgIGNvbnN0IEpT
VmFsdWUgdW5sZXNzRG9tYWluID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxlc3MtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRF
eGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW4uaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUu
ZXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKHRy
aWdnZXIuZG9tYWluQ29uZGl0aW9uICE9IFRyaWdnZXI6OkRvbWFpbkNvbmRpdGlvbjo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Vbmxlc3NBbmRJ
ZkRvbWFpbjsKICAgICAgICAgYXV0byB1bmxlc3NEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3Qo
ZXhlYywgYXNPYmplY3QodW5sZXNzRG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsKQEAgLTE4OSwx
MyArMTk4LDE2IEBAIHN0YXRpYyBib29sIGlzVmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcKIAog
c3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkQWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3Qg
SlNPYmplY3QmIHJ1bGVPYmplY3QsIEFjdGlvbiYgYWN0aW9uLCBib29sJiB2YWxpZFNlbGVjdG9y
KQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICB2YWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICBjb25zdCBK
U1ZhbHVlIGFjdGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAiYWN0aW9uIikpOwotICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IGV4
ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmICgh
YWN0aW9uT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRB
Y3Rpb247CiAKICAgICBjb25zdCBKU1ZhbHVlIHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidHlwZSIpKTsKLSAgICBpZiAo
IXR5cGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmlu
ZygpKQorICAgIGlmICghdHlwZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9i
amVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZEFjdGlvblR5cGU7CiAKICAgICBTdHJpbmcgYWN0aW9uVHlwZSA9IHR5cGVPYmpl
Y3QudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMjA4LDcgKzIyMCw3IEBAIHN0YXRpYyBzdGQ6OmVy
cm9yX2NvZGUgbG9hZEFjdGlvbihFeGVjU3QKICAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6
QmxvY2tDb29raWVzOwogICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5v
bmUiKSB7CiAgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlm
ICghc2VsZWN0b3IgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmco
KSkKKyAgICAgICAgaWYgKCFzZWxlY3RvciB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0
b3IuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVBY3Rpb25UeXBlOwogCiAgICAgICAgIFN0cmluZyBz
ID0gc2VsZWN0b3IudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMjQ2LDE3ICsyNTgsMjAgQEAgc3Rh
dGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkUnVsZShFeGVjU3RhdAogCiBzdGF0aWMgc3RkOjplcnJv
cl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1
bGVzLCBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlzdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgLy8gRklYTUU6IEpTT05QYXJzZSBzaG91bGQgcmVxdWlyZSBjYWxsYmFja3MgaW5z
dGVhZCBvZiBhbiBFeGVjU3RhdGUuCiAgICAgY29uc3QgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBK
U09OUGFyc2UoJmV4ZWMsIHJ1bGVzKTsKIAotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8
ICFkZWNvZGVkUnVsZXMpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVs
ZXMpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkOwog
CiAgICAgaWYgKCFkZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CiAKICAg
ICBjb25zdCBKU09iamVjdCogdG9wTGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3Qo
JmV4ZWMpOwotICAgIGlmICghdG9wTGV2ZWxPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbk9i
amVjdDsKICAgICAKICAgICBpZiAoIWlzSlNBcnJheSh0b3BMZXZlbE9iamVjdCkpCkBAIC0yNzIs
MTEgKzI4NywxMSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoCiAg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub29NYW55UnVsZXM7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0
IEpTVmFsdWUgdmFsdWUgPSB0b3BMZXZlbEFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAg
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3Bl
LmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5Ub3BMZXZlbEFycmF5OwogCiAgICAgICAgIGNv
bnN0IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgICAg
ICBpZiAoIXJ1bGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFy
dWxlT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRSdWxlOwogCiAgICAgICAgIGF1dG8gZXJyb3Ig
PSBsb2FkUnVsZShleGVjLCAqcnVsZU9iamVjdCwgbG9jYWxSdWxlTGlzdCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwMDIsNiArNDAwMiw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4
dFRyYWMKIAogc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSFRNTE1lZGlhRWxl
bWVudCYgbWVkaWEpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byBtZWRpYUpT
V3JhcHBlciA9IHRvSlMoJmV4ZWMsICZnbG9iYWxPYmplY3QsIG1lZGlhKTsKICAgICAKICAgICAv
LyBSZXRyaWV2ZSB0aGUgY29udHJvbGxlciB0aHJvdWdoIHRoZSBKUyBvYmplY3QgZ3JhcGgKQEAg
LTQwMDksMTggKzQwMTEsMTggQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1
ZShKUwogICAgIGlmICghbWVkaWFKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwogICAgIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAg
IEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpT
V3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7
Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAgICBKU0M6OkpT
T2JqZWN0KiBjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8
SlNDOjpKU09iamVjdCo+KGNvbnRyb2xzSG9zdEpTV3JhcHBlcik7CiAgICAgaWYgKCFjb250cm9s
c0hvc3RKU1dyYXBwZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0g
ICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmZXhlYy52bSgpLCAiY29udHJvbGxlciIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250
cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbGxlciIp
OwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNX
cmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xsZXJJRCk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKICAgICByZXR1cm4gY29udHJvbGxlckpTV3JhcHBl
cjsKQEAgLTQwNTcsOCArNDA1OSwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNh
cHRpb25Db250CiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9j
dW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVy
Lmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUo
KmV4ZWMsICpnbG9iYWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9s
bGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVy
VmFsdWUpOwpAQCAtNDA4Myw3ICs0MDg3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRh
dGVDYXB0aW9uQ29udAogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBub0FyZ3VtZW50
czsKICAgICBKU0M6OmNhbGwoZXhlYywgbWV0aG9kT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEs
IGNvbnRyb2xsZXJPYmplY3QsIG5vQXJndW1lbnRzKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBtX2hhdmVTZXRVcENhcHRp
b25Db250YWluZXIgPSB0cnVlOwogI2VuZGlmCkBAIC02NjAzLDggKzY2MDcsMTAgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRybwogICAgIERPTVdyYXBwZXJXb3JsZCYg
d29ybGQgPSBlbnN1cmVJc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2Ny
aXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBn
bG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImNyZWF0ZUNvbnRyb2xzIikpOwogICAgIGlmIChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkK
QEAgLTY2MTcsOCArNjYyMyw4IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFD
b250cm8KICAgICBVUkwgc2NyaXB0VVJMOwogI2VuZGlmCiAgICAgc2NyaXB0Q29udHJvbGxlci5l
dmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZShtZWRpYUNvbnRyb2xzU2NyaXB0LCBzY3Jp
cHRVUkwpLCB3b3JsZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkgeworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC02Njc2LDggKzY2ODIsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29u
dHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2Ny
aXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gVGhlIG1lZGlhIGNvbnRyb2xzIHNjcmlwdCBtdXN0IHBy
b3ZpZGUgYSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIGRldGFpbHMuCiAgICAgLy8gTmFtZTog
Y3JlYXRlQ29udHJvbHMKQEAgLTY3MDQsMjEgKzY3MTIsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgIGFyZ0xpc3QuYXBwZW5kKG1lZGlhQ29udHJvbHNI
b3N0SlNXcmFwcGVyKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25W
YWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxE
YXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0g
SlNDOjpDYWxsVHlwZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVl
IGNvbnRyb2xsZXJWYWx1ZSA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250
cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9s
bGVyVmFsdWUpOwogICAgIGlmICghY29udHJvbGxlck9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEsIE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250
cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICBKU0M6
OkpTT2JqZWN0KiBtZWRpYUpTV3JhcHBlck9iamVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0
KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMtPnZtKCksICJjb250cm9sc0hvc3QiKTsK
ICAgICAKICAgICBBU1NFUlQoIW1lZGlhSlNXcmFwcGVyT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVj
LCBjb250cm9sc0hvc3QpKTsKQEAgLTY3MzgsOCArNjc0Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkQWRkVXNlckFnZW50U2gKICAgICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JKU1Byb3Bl
cnR5KCk7CiAgICAgdXBkYXRlVXNlc0xUUlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25KU1By
b3BlcnR5KCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZXRNZWRpYUNvbnRyb2xzRGVwZW5kT25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRz
T25QYWdlU2NhbGUpCkBAIC02Nzc0LDIxICs2NzgyLDIzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6dXBkYXRlTWVkaWFDb250cm8KICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gZW5zdXJl
SXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRy
b2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNW
YWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNv
bnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUg
PSBjb250cm9sbGVyT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJoYW5kbGVQcmVzZW50YXRpb25Nb2RlQ2hhbmdlIikpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0
aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6
OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlv
bi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBp
ZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTY4MTUsMjEgKzY4MjUsMjMg
QEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAgICAgU2NyaXB0
Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0
KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsK
KyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNv
bnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAq
dGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJW
YWx1ZS50b09iamVjdChleGVjKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9i
amVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2V0Q3Vy
cmVudENvbnRyb2xzU3RhdHVzIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBm
dW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24g
PSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6Q2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKQEAgLTY4MzgsNyArNjg1MCw3IEBAIFN0cmlu
ZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgIEpTQzo6SlNWYWx1ZSBv
dXRwdXRWYWx1ZSA9IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIHJldHVybiBvdXRwdXRWYWx1ZS5nZXRTdHJpbmcoZXhl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJ
bkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw5ICszOTIsMTEgQEAgdm9p
ZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogCiAgICAgU2NyaXB0Q29udHJv
bGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3QoaXNvbGF0ZWRXb3JsZCkp
OwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBKU0M6OkV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCByb290KSk7CkBAIC00MDgsOCArNDEwLDggQEAgdm9pZCBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjpkaWRBZGRVc2VyQQogICAgIC8vIEl0IGlzIGV4cGVjdGVkIHRoZSBKUyBmaWxl
IHByb3ZpZGVzIGEgY3JlYXRlT3ZlcmxheShzaGFkb3dSb290LCB0aXRsZSwgc3VidGl0bGUpIGZ1
bmN0aW9uLgogICAgIEpTQzo6SlNPYmplY3QqIG92ZXJsYXkgPSBnbG9iYWxPYmplY3QtPmdldChl
eGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZU92ZXJsYXkiKSku
dG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCFvdmVybGF5KSB7Ci0gICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0
YTsKQEAgLTQxOCw3ICs0MjAsNyBAQCB2b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFk
ZFVzZXJBCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6Y2FsbChleGVjLCBvdmVybGF5LCBj
YWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiBib29sIEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnBhcnRPZlNuYXBzaG90T3ZlcmxheShjb25zdCBOb2RlKiBu
b2RlKSBjb25zdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNj
YXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAgKzEwMSwxMiBAQCBib29sIE5QSlNPYmplY3Q6Omhh
c01ldGhvZChOUElkZW50aWZpZXIgCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9qc09iamVjdC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7
ICAgIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIHJldHVybiBnZXRDYWxsRGF0YSh2
YWx1ZSwgY2FsbERhdGEpICE9IENhbGxUeXBlOjpOb25lOwpAQCAtMTQ3LDcgKzE0OSw5IEBAIGJv
b2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBib29sIHJlc3Vs
dDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKQEAgLTE1NSw3ICsxNTksNyBA
QCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgZWxzZQogICAg
ICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVw
LT5udW1iZXIoKSk7CiAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTY3LDcgKzE3MSwx
MCBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFl
eGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVl
IGpzUmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQogICAgICAgICBq
c1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJS
ZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwpAQCAtMTc1LDcgKzE4Miw3IEBAIGJvb2wgTlBKU09i
amVjdDo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWUKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2Jq
ZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIAogICAgIG1fb2Jq
ZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIGpzUmVzdWx0LCAqcmVzdWx0
KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4Nyw3ICsxOTQsOSBAQCBib29sIE5QSlNP
YmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
bV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlhbnRUb0pTVmFsdWUoZXhlYywgbV9vYmplY3RNYXAt
Pmdsb2JhbE9iamVjdCgpLCAqdmFsdWUpOwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmlu
ZygpKSB7CkBAIC0xOTUsNyArMjA0LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShO
UElkZW50aWZpZQogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQobV9qc09i
amVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50
aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsKICAgICB9IGVsc2UKICAgICAgICAgbV9qc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVu
dGlmaWVyUmVwLT5udW1iZXIoKSwganNWYWx1ZSwgZmFsc2UpOwotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTIwOCwyNiArMjE3LDI5IEBAIGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJv
cGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChl
eGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9qc09iamVjdC0+
aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllcikpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2pzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBleGVj
LCBpZGVudGlmaWVyKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhh
c1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkgewotICAgICAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2pz
T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgobV9qc09iamVjdC5n
ZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogICAgIH0KIAotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjU5LDcgKzI3MSw5IEBAIGJvb2wgTlBKU09iamVjdDo6Y29uc3Ry
dWN0KGNvbnN0IE5QVmFyaWEKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBD
b25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3Qu
Z2V0KCksIGNvbnN0cnVjdERhdGEpOwpAQCAtMjc1LDEzICsyODksMTYgQEAgYm9vbCBOUEpTT2Jq
ZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIAogICAgIC8vIENvbnZlcnQgYW5kIHJl
dHVybiB0aGUgbmV3IG9iamVjdC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05Q
VmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IGJvb2wgTlBKU09iamVjdDo6aW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVu
dHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOworCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZTo6Tm9uZSkKQEAgLTI5Niw3ICszMTMsNyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShF
eGVjU3RhdGUqIGV4ZWMsCiAKICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05Q
VmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIAogICAgIHJldHVybiB0cnVlOwog
fQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
SG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04ODUsOCArODg1LDExIEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLnZtKCkp
OwotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCku
dm0oKSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CisgICAg
Vk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBTdHJvbmc8
SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yKGFsbG93UG9wdXBzID8gT3B0aW9uYWw8UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSkgOiBOdWxsb3B0KTsKQEAgLTg5NCw3ICs4OTcsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0KSk7CiAgICAgCiAgICAgbWFy
c2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTkxNSw5ICs5MTgsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2lu
VmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRh
KGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC05MzAsNyArOTM2LDcgQEAgYm9vbCBOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMs
IGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAg
IAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3Ro
KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk0OCw5ICs5NTQsMTIgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQpAQCAtOTYyLDcgKzk3MSw3IEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZh
bHVlID0gY2FsbChleGVjLCBvYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdM
aXN0KTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJl
c3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05ODAsOSArOTg5LDEyIEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQo
KS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAg
ICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdl
dENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25zdHJ1Y3REYXRhKTsKQEAgLTk5NSw3ICsxMDA3LDcg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAgIEpTVmFsdWUg
dmFsdWUgPSBKU0M6OmNvbnN0cnVjdChleGVjLCBvYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEsIGFyZ0xpc3QpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwg
cmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEw
MTMsMTMgKzEwMjUsMTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBy
bwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9
IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVl
ID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFs
dWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0
cnVlOwogfQogICAgIApAQCAtMTAzNCwxMyArMTA0OSwxNiBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5W
aWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisK
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdp
bldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAg
IAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVu
Z3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwNTgsMTUgKzEwNzYsMTggQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFBybwogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShl
eGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMDg0LDE0ICsxMTA1LDE3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpz
ZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYg
dm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgp
OwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNlKTsKICAgICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTExMTAsMTUgKzExMzQsMTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OnJlbW92ZQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZN
JiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRl
KiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xv
YmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsgICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KICAgICAKQEAgLTExMzYsMTYgKzExNjMsMTkgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2lu
VmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVn
aW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExNjMsMTEgKzExOTMsMTUgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVz
dWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExODUsMTEgKzEyMTksMTUgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2Jq
ZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgCisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAgICAgCkBAIC0xMjA3LDExICsxMjQ1LDE0IEBAIGJvb2wgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmplY3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTEyMjksOSArMTI3MCwxMiBA
QCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAgICAgRnJhbWUqIGZy
YW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7CkBAIC0xMjUxLDcgKzEyOTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKICAgICBtZW1jcHkocmVzdWx0RGF0YSwgW2RhdGEgYnl0
ZXNdLCByZXN1bHRMZW5ndGgpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTY5MzYsNiAr
NjkzNiw5IEBAIC0gKEJPT0wpc2hvdWxkQ2xvc2UKICNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGlj
IE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBOU0FwcGxlRXZl
bnREZXNjcmlwdG9yKiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQog
ICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29s
ZWFuOmpzVmFsdWUuYXNCb29sZWFuKCldOwpAQCAtNjk3Niw4ICs2OTc5LDggQEAgc3RhdGljIE5T
QXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIEpTQzo6SlNWYWx1ZSBwcmltaXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAg
ICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgbnVsbERlc2NyaXB0b3JdOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBhZURlc2NGcm9tSlNWYWx1ZShleGVjLCBwcmltaXRpdmUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287903</attachid>
            <date>2016-09-04 08:03:57 -0700</date>
            <delta_ts>2016-09-04 08:22:52 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785856</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMywxMSArMTAzNSwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA1MCw5ICsxMDU1LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzOCwxMSArMTE0MywxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjUzLDkgKzEyNjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDQzLDcgKzE0NTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NzcsNyArMTQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE1MDUsNyArMTUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUyNiw3ICsxNTMzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTU0Myw3ICsx
NTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU1OCw3ICsxNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjE4LDggKzE2
MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg3MiwxNCArMTg4MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4OTcsMTQgKzE5MDcs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTIzLDcgKzE5MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDksMTQg
KzE5NjEsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzksNyArMTk5
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwODUsNiArMjA5OSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDkz
LDkgKzIxMTcsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMTA3LDExICsyMTM1LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcEV4Y2VwdGlvbikKIHsKLSAg
ICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9u
KSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFt
ZSAnJXMnIGJ1dCBub25lIHdhcyB0aHJvd25cbiIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjExOSwxMyArMjE1MCwxMyBA
QCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKLSAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgdm0uZXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBl
Y3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlv
biBjbGFzcyBpcyBub3QgZGVmaW5lZFxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBpc0luc3Rh
bmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvbkNsYXNz
KS0+aGFzSW5zdGFuY2UoZXhlYywgZXhjZXB0aW9uKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
IHsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3Rl
ZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBj
bGFzcyBmYWlscyBwZXJmb3JtaW5nIGhhc0luc3RhbmNlXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5h
bWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMTQ5
LDYgKzIxODAsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpID0gdHJ1ZTsKIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKIAogICAgIGF1dG8g
Y2hlY2tFeGNlcHRpb24gPSBbJl0gKGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24s
IEpTVmFsdWUgdmFsdWUpIHsKQEAgLTIxOTEsNyArMjIyMyw3IEBAIHN0YXRpYyBib29sIHJ1bldp
dGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgaWYgKGlzTW9kdWxlKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb21pc2UpCiAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGxvYWRBbmRFdmFs
dWF0ZU1vZHVsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdEJ1
ZmZlciwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdWxmaWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewog
ICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGZhbHNlLCBleGVjLT5h
cmd1bWVudCgwKSk7CkBAIC0yMjA4LDEzICsyMjQwLDE0IEBAIHN0YXRpYyBib29sIHJ1bldpdGhT
Y3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdEJ1ZmZlciwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRp
b24pOworICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCk7CiAgICAgICAgICAgICBjaGVja0V4Y2VwdGlv
bihpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yMjI3LDYgKzIyNjAsOSBAQCBzdGF0aWMgYm9vbCBy
dW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZl
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBTdHJpbmcgaW50ZXJwcmV0ZXJOYW1lKEFTQ0lJTGl0ZXJhbCgiSW50ZXJwcmV0ZXIiKSk7CiAg
ICAgCiAgICAgYm9vbCBzaG91bGRRdWl0ID0gZmFsc2U7CkBAIC0yMjc3LDcgKzIzMTMsNyBAQCBz
dGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygp
OwogICAgIH0KICAgICBwcmludGYoIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElVdGlscy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSVV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMyBAQCBlbnVtIGNsYXNz
IEV4Y2VwdGlvblN0YXR1cyB7CiAKIGlubGluZSBFeGNlcHRpb25TdGF0dXMgaGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhj
ZXB0aW9uUmVmKQogewotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uUmVmKQogICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uUmVm
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEyOCwxMiArMjEyOCwxOSBAQAogCQlG
RTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY2MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovOyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDRE
IC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUx
RTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM3MUQ3OEYwMUQwMEE2OTRE
NCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkx
MzkxRDc4RjNBRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAv
KiBFeGNlcHRpb25TY29wZS5jcHAgKi87IH07CisJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAv
KiBFeGNlcHRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2NDkxM0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkxM0Qx
RDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBF
eGNlcHRpb25FdmVudC5jcHAgKi87IH07CiAJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTY4QzYzODFCOTBERTBCMDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjhDNjM1MUI5
MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovOyB9OwogCQlGRTdC
QTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuY3BwICovOyB9OwogCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QzQxOTYxQjk3RkM0
QjAwRjRENTk4IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovOyB9OworCQlGRTgwQzE5NzFENzc1
Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTgw
QzE5OTFENzc1RkJFMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi87IH07CisJCUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNl
cHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFODBDMTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RTk5QjI0QTFDMjRDM0Q3MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQzNSwxMSAr
NDQ0MiwxOCBAQAogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291
cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE1MTgzQzVB
MjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDRE
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxM0ExRDc4RjQ2MTAw
QTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRTFBMUE3Q0VDMDBG
MUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5NjFE
Nzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXRjaFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBD
MTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhdGNoU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVu
dExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdD
RjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYx
QkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njk4LDggQEAKIAkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAogCQkJCUJDQTYy
REZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlE
RjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCisJCQkJRkU4MEMxOTgxRDc3NUZCNDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuY3BwICovLAorCQkJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi8sCiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNz
SW5mby5oICovLAogCQkJCTBGRTA1MDFDMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuY3BwICovLAogCQkJCTBGRTA1MDFEMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuaCAqLywKQEAgLTU3NDgsMTAgKzU3NjQsMTYgQEAKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAw
RjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNG
Q0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggKi8sCisJCQkJRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8qIEV4Y2VwdGlv
bkV2ZW50LmNwcCAqLywKKwkJCQlGRTY0OTEzQTFENzhGNDYxMDBBNjk0RDQgLyogRXhjZXB0aW9u
RXZlbnQuaCAqLywKKwkJCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAgKi8sCisJCQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyog
RXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0
aW9uSGVscGVycy5jcHAgKi8sCiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2Vw
dGlvbkhlbHBlcnMuaCAqLywKKwkJCQlGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovLAorCQkJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRp
b25TY29wZS5oICovLAogCQkJCTg2Q0EwMzJEMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxl
LmNwcCAqLywKIAkJCQk4NkNBRkVFMjEwMzVEREU2MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oICov
LAogCQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKQEAg
LTYxNDMsNyArNjE2NSw2IEBACiAJCQkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RS
dW5uZXJVdGlscy5oICovLAogCQkJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Nj
b3BlLmNwcCAqLywKIAkJCQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5o
ICovLAotCQkJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24u
aCAqLywKIAkJCQkwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUu
aCAqLywKIAkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi8sCiAJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLywKQEAgLTc2OTIsNyArNzcxMyw3IEBACiAJCQkJMEZFMDUwMUExQUE5MDkxMTAw
RDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQgLyogVGhy
b3dTY29wZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTYwMjlEOTFENkUxRTRGMDAz
MDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMUIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMDgsNiArODIyOSw3IEBA
CiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFp
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0
MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMDEsNiArODMyMyw3IEBACiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5
IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDdBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RENCOTczMTJFNTE5M0YwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQTRFQzkwQzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkI2RDc1MzE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJy
aWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4MzMz
LDcgQEAKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAvKiBFeGNlcHRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFD
QjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODMzLDYgKzg4NTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNlcHRpb25T
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyog
QWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFD
MTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTMwNyw2ICs5MzMyLDcgQEAKIAkJCQkwRjJCNjZFNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENhdGNoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzM5
LDYgKzkzNjUsNyBAQAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBC
Mzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEzRDFENzhGQzJGMDBBNjk0RDQg
LyogRXhjZXB0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1
OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxOSw2ICs5NDQ2LDcgQEAK
IAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3
QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVBQjQ5REMxQkVDODA4MjAwNzAyMEZCIC8qIFBlckdsb2JhbE9iamVjdFdyYXBwZXJXb3JsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTAgKzEwNSwxMiBAQCBKU1ZhbHVlIFNj
cmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEwICsxMjIsMTMgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogcwogCiBTdHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1
ZShzY3JpcHRTdGF0ZSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlv
biBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0Lgot
ICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHNjcmlwdFN0YXRl
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjMsNiArNjIzLDkgQEAgdm9pZCBEZWJ1Z2dlcjo6
dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZgogCiB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVk
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAobV9p
c1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjIsNyArNjY1LDcgQEAgdm9pZCBEZWJ1
Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIHsKICAgICAgICAgUGF1c2VSZWFz
b25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIGRpZEhpdEJyZWFrcG9pbnQgPyBQYXVzZWRGb3JC
cmVha3BvaW50IDogbV9yZWFzb25Gb3JQYXVzZSk7CiAgICAgICAgIGhhbmRsZVBhdXNlKHZtRW50
cnlHbG9iYWxPYmplY3QsIG1fcmVhc29uRm9yUGF1c2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgbV9wYXVzaW5nQnJlYWtwb2ludElEID0g
bm9CcmVha3BvaW50SUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNyw3ICsyMTcsOSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFs
dWF0ZVdpdGhTCiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gY2F0
Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBudWxscHRyOwogICAgIGlmIChpc1RhaWxEZWxldGVkKCkpCkBAIC0yMjgsNyArMjMw
LDYgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBEZWJ1Z2dlckV2YWxFbmFibGVyIGV2YWxF
bmFibGVyKGNhbGxGcmFtZSk7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogCiAgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTI0Myw5ICsyNDQsOSBA
QCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgSlNTY29wZTo6
Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlKCktPmpzU2NvcGUoKSwgdmFyaWFibGVzVW5k
ZXJURFopOwogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKGNhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3JpcHQpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmRlcml2ZWRDb250ZXh0VHlwZSgp
LCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFs
Q29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkg
eworICAgICAgICBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIApAQCAtMjU3LDkgKzI1OCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6
OmV2YWx1YXRlV2l0aFMKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdGhpcy0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Cisg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZiAoc2Nv
cGVFeHRlbnNpb25PYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiwxNCArMTEyLDE1IEBAIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworCisgICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOwogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICAvLyBJ
dCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFu
eXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCkBA
IC0xMzEsNyArMTMyLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5k
ID09IEdlbmVyaWNVbndpbmQpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICBBU1NFUlQoISF2bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgCiAgICAgCiAgICAgcHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCB0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9vbCBk
aXJlY3Q+CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgSklUX09QRVJBVElPTiAKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3Bl
cnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHN0cmljdCk7CkBAIC0xNzksMTEgKzE4MCwx
MiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3Rv
ciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKS0+c3RydWN0dXJlKCkpOwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChwcm90by5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgYXNPYmplY3QocHJvdG8pKTsKQEAgLTIwNywx
MiArMjA5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAg
SlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90
IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIo
ZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhICYgYikpOwpAQCAt
MjIyLDEyICsyMjUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsK
ICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGlu
dDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9J
bnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgfCBiKSk7
CkBAIC0yMzcsMTIgKzI0MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAg
ICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSBe
IGIpKTsKQEAgLTI1MiwxMiArMjU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7
CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IG9wMi50b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGEgPDwgKGIgJiAweDFmKSkpOwpAQCAtMjY3LDEyICsyNzMsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoYSA+PiAoYiAmIDB4MWYpKSk7CkBAIC0yODIsMTIgKzI4OSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUg
b3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgdWludDMyX3QgYSA9IG9w
MS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGEgPj4gKGIgJiAweDFmKSkpKTsKQEAgLTMxMywxMiArMzIxLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIC8gYikpOwpAQCAtMzI4LDEwICszMzcsMTEgQEAgZG91Ymxl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhBYnMoRQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGZhYnMoYSk7CiB9CkBAIC0zNDAsMTAgKzM1MCwx
MSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENvcyhFCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gY29zKGEpOwogfQpAQCAtMzUy
LDEwICszNjMsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bgog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihhKTsKIH0KQEAgLTM2NCwxMCArMzc2LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoTG9nKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBsb2coYSk7CiB9CkBAIC0zNzYsMTAgKzM4OSwxMSBAQCBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNpbihFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVt
YmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gc2luKGEpOwogfQpAQCAtMzg4LDEwICs0MDIsMTEg
QEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KAogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9
IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CkBAIC00MTcs
NyArNDMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9w
ZXJ0eSk7CiAKQEAgLTQ0MywxMCArNDU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJj
aWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXko
ZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOwogfQpAQCAtNDU1LDcgKzQ3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKICAgICBpZiAocHJvcGVydHkuaXNVSW50
MzIoKSkKQEAgLTQ3Niw3ICs0OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC04NDUsNiArODYyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWwg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFRoaXMpOwpAQCAtODcwLDExICs4ODgsMTEgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGJhc2VW
YWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5n
ZXQoZXhlYywgcHJvcGVydHksIHNsb3QpKTsKIH0KQEAgLTg5OSw5ICs5MTcsMTAgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIg
cHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9
CkBAIC05MTAsOSArOTI5LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlz
LCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0KQEAgLTE0MjQsOSArMTQ0NCw5IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRl
Y29kZShhKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8g
SW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVz
dCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFs
dWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxv
d3M8aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpKSkgewogICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTQ0MywxMSArMTQ2MywxMSBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1Zh
bHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNl
IHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIg
PSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNTdHJpbmcq
IHN0cjMgPSBKU1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2
bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgpLCBzdHIyLT5sZW5ndGgoKSwg
c3RyMy0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw2ICs3OTcsNyBAQCB2b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhl
YXBSb290CiB2b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBHQ1BIQVNFKE1hcmtpbmdFeGNlcHRpb24pOworCiAgICAgaWYgKCFtX3ZtLT5l
eGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDcgKzEzMyw5IEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6Omlu
amVjdGVkU2MKIAogSlNDOjpKU09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgaW50IGlkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKKyAgICBW
TSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU2
LDcgKzE1OCw3IEBAIEpTQzo6SlNPYmplY3QqIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3IKICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihpZCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6
OmNhbGwoc2NyaXB0U3RhdGUsIGZ1bmN0aW9uVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xv
YmFsVGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQuZ2V0T2JqZWN0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIw
LDcgKzIyMCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUodm0pOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENh
bGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKGluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoKSkKQEAgLTIyOCw4ICsyMjksMTIg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgfQogCiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9T
eXN0ZW1Db25zb2xlKCkpIHsKICAgICAgICAgaWYgKGNhbGxTdGFjay0+c2l6ZSgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgcHJvZ3JhbSA9IHNjcmlw
dFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlv
bjsKQEAgLTI1OSwxMiArMjU5LDEzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omdl
dEludGVybmEKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAKICAgICBpZiAo
SlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21pc2UqPih2YWx1ZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgc3dpdGNoIChwcm9t
aXNlLT5zdGF0dXMoZXhlYy0+dm0oKSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1
czo6UGVuZGluZzoKQEAgLTI4Niw3ICsyODcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJ0YXJnZXRGdW5jdGlv
biIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImJvdW5kVGhpcyIsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpKSk7CkBAIC0yOTgsNyAr
Mjk5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChQcm94eU9iamVjdCogcHJveHkgPSBqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0Kj4odmFsdWUp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgidGFyZ2V0IiksIHByb3h5LT50YXJnZXQoKSkpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoImhhbmRsZXIiKSwgcHJveHktPmhhbmRsZXIoKSkp
OwpAQCAtMzEyLDcgKzMxMyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYXJyYXkiLCBpdGVyYXRlZFZhbHVl
KSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29u
c3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGtpbmQpKTsKQEAgLTMzNSw3ICsz
MzYsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAg
IH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgIm1hcCIsIG1hcEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKQEAgLTM1
Nyw3ICszNTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInNldCIsIHNldEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsK
QEAgLTM2Nyw3ICszNjgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRl
cm5hCiAgICAgaWYgKEpTU3RyaW5nSXRlcmF0b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWlj
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdHJpbmciLCBzdHJpbmdJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0z
NzYsNyArMzc3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQog
ICAgIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpz
RHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAib2JqZWN0
IiwgcHJvcGVydHlOYW1lSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICByZXR1
cm4gYXJyYXk7CkBAIC00MDQsNiArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6d2Vha01hcEVudAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBK
U1dlYWtNYXAqIHdlYWtNYXAgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha01hcCo+KHZhbHVlKTsKICAg
ICBpZiAoIXdlYWtNYXApCkBAIC00MTgsNyArNDIwLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha01hcEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBEYXRh
KCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpA
QCAtNDUxLDYgKzQ1Myw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRF
bnQKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrU2V0KiB3
ZWFrU2V0ID0ganNEeW5hbWljQ2FzdDxKU1dlYWtTZXQqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFr
U2V0KQpAQCAtNDY1LDcgKzQ2OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtTZXRFbnQKICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihm
ZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5iZWdpbigp
OyBpdCAhPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBK
U09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ5NSw2ICs0
OTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
cjsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
aWYgKEpTTWFwSXRlcmF0b3IqIG1hcEl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJh
dG9yKj4odmFsdWUpKQpAQCAtNTA1LDcgKzUwOSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xv
bmUoZXhlYyk7CiAgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlO
YW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1
ZSkpIHsKICAgICAgICAgaXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpKSB7CkBAIC01MjUsMTggKzUyOSwxOCBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4
ZWMsIG5leHQpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlVwogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikpOwogCiAgICAgU3RyaW5nIHNjcmlwdCA9
IHNjcmlwdFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4
Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIFJlZjxTY3JpcHRDYWxsU3RhY2s+
IGNyZWF0ZVNjcmlwdENhbGxTdGEKIAogc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0
aW9uRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGV4Y2VwdGlv
bk9iamVjdCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlciwgU3RyaW5nKiBzb3Vy
Y2VVUkwpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IG5lZWQgdG8gZXZhbHVhdGUgSmF2
YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNl
cHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJsaW5lIikpOwogICAgICpsaW5lTnVtYmVyID0gbGluZVZhbHVlICYmIGxpbmVWYWx1
ZS5pc051bWJlcigpID8gaW50KGxpbmVWYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwpAQCAtMTI2
LDcgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb20KICAg
ICAqY29sdW1uTnVtYmVyID0gY29sdW1uVmFsdWUgJiYgY29sdW1uVmFsdWUuaXNOdW1iZXIoKSA/
IGludChjb2x1bW5WYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwogICAgIEpTVmFsdWUgc291cmNl
VVJMVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7CiAgICAgKnNvdXJjZVVSTCA9IHNv
dXJjZVVSTFZhbHVlICYmIHNvdXJjZVVSTFZhbHVlLmlzU3RyaW5nKCkgPyBzb3VyY2VVUkxWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykgOiBBU0NJSUxpdGVyYWwoInVuZGVmaW5lZCIp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKIH0KIAogUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwg
c2l6ZV90IG1heFN0YWNrU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBt
X2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxl
KCksIGNhbGxGcmFtZSwgJm1fcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBhcmd1bWVudENvdW50
ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCksIG1fYXJndW1lbnRzLmRhdGEoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUsIHNjb3BlKTsKLSAgICAgICAgICAgIG1fdmFsaWQgPSAhY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIG1fdmFsaWQgPSAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgY2FsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiwxNCArMTE2LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBw
b2ludGVyLCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFy
aW5nbHkgaW4gbmV3IGNvZGUuCiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBw
bGFjZXMgaW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUg
c29vbi4KIAotICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0
aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGxhc3RF
eGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmxhc3RFeGNlcHRpb24oKTsgfQotICAgICAg
ICB2b2lkIGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckxhc3RFeGNlcHRpb24oKTsg
fQotCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21t
b25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3Bl
cnR5TmFtZXM7IH0KICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAg
ICAgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZy
YW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CkBA
IC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIgYmFpbGVk
LCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhj
YWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogCkBAIC0yMjcsNyArMjI3
LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAgICAg
ICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCkp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjY2LDEzICs2NjYsMTUgQEAgcHJpdmF0ZToK
IAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpIHsKLSAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUt
PnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQog
ICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUpOwot
ICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTc2MCw2ICs3NjIsOCBAQCBwcml2YXRlOgogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodW53aW5kU3RhcnQg
PT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc3OCw3ICs3ODIsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp1CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzRW1wdHkoKSB8
fCAoZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgJiYgIWV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKSkK
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsKIAotICAgIEFTU0VSVCh2bS5leGNl
cHRpb24oKSAmJiB2bS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpICYmIHNjb3BlLmV4Y2VwdGlvbigpLT5zdGFj
aygpLnNpemUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBD
LCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyID0gbnVsbHB0cjsKQEAgLTk3Nyw3ICs5ODEsNyBAQCBmYWlsZWRKU09OUDoKIAogICAg
IC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9ncmFtLT5nZW5l
cmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotCisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0K
IApAQCAtOTg2LDcgKzk5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmEKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVz
eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMDQ5LDcgKzEwNTMsNyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0
dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52
YWxpZCBzdGF0ZS4KQEAgLTExMDAsMTIgKzExMDQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwog
Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoTElLRUxZKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7
CkBAIC0xMTE1LDcgKzExMTksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiB7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpA
QCAtMTE2NCw3ICsxMTY4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9y
QnVzeSgpKQpAQCAtMTI3MCw3ICsxMjc0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShNb2R1bGVQcm9ncgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQpAQCAtMTMxMSwxMiArMTMxNSwxNCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVi
dWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBz
d2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBA
IC0xMzM4LDcgKzEzNDQsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKLX0gICAgCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTQgQEAKICNkZWZpbmUgSW50ZXJwcmV0ZXJfaAogCiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xMDUsOCArMTA3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0p
CiAgICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEV4Y2Vw
dGlvbiA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAg
ICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2Vw
dGlvblNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFBy
aW50U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIEpJVENv
ZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0
ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSkKIHsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZvaWQqIGVudHJ5QWRkcmVzczsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHBy
b3RvQ2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgSlNWYWx1ZSBKSVRD
b2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxzZQogICAgICAgICBlbnRyeUFk
ZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2Ny
aXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7Ci0gICAgcmV0dXJuIHZtLT5l
eGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJldHVybiBzY29wZS5leGNlcHRp
b24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6
OmRmZ0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0tPnNoYWRvd0NoaWNrZW4oKS5s
b2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGhy
b3dQYWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0
aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
dm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgdW53aW5k
U3RhcnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9wdGltaXplLCBiYXNlLT5j
bGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0
ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0g
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vzc1R5cGUp
OwpAQCAtNDk5LDYgKzQ5OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdP
clN5bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC01MjAsNyArNTIx
LDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CiAgICAgLy8g
RG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0g
ICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KSkKQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogeworICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAg
ICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0
cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJl
IHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC01NjMsNyArNTY2LDcgQEAgc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1
YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eSkpIHsKQEAgLTc4NiwxNCArNzg5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAKKyAg
ICBWTSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAg
IAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpLCBn
bG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1
ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTgxNyw3
ICs4MjIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAg
ICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04NDYsNyArODUxLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVj
Q2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ3
Miw4ICsxNDc3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBlIHsKIAogc3RhdGljIHZvaWQg
cHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0KiBhY2Nlc3NvciwgQWNjZXNz
b3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHByb3BlcnR5S2V5
ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCkBA
IC0xNjE4LDggKzE2MjUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1
aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNh
blVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVm
UHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkgewpAQCAtMTY2MSwxMCArMTY3
MCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0x
ODU1LDYgKzE4NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKICAgICAKQEAgLTE4NzIsMTAgKzE4ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFz
ZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7
CiAgICAgfQpAQCAtMTkyNCwxMCArMTkzNCwxMCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQogICAgICAgICBj
b3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CkBAIC0yMTMyLDcg
KzIxNDIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQo
c2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8sIHNsb3QsIGlkZW50KTsK
QEAgLTIzODMsMTEgKzIzOTMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
TXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKQEAgLTIzOTUsNiArMjQwNiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDAyLDEwICsyNDE0LDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ4MCwxMSArMjQ5MiwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ5Miw2ICsyNTA1LDcgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVz
ID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKQEAgLTI0OTksMTAgKzI1MTMs
MTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC0y
NTkyLDEzICsyNjA2LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lm
RXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBleHRlcm4gIkMiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgSW5zdHJ1Y3Rp
b24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCksICIgKHJl
dHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9u
KCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICByZXR1cm4gTExJbnQ6OmV4
Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTUsNyArNTYsOCBAQCB2b2lkKiBjYWxsVG9U
aHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgZGF0YUxv
ZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIiAoY2FsbFRvVGhyb3cp
LlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKGNhbGxU
b1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0
aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmICh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChP
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMTUgKzc4LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBCeXRlY29kZVNlcXVlbmNlOjpm
b3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIp
OwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2UtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGls
YXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyOCAr
MTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIEpTVmFs
dWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRC
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHByb2ZpbGVkQnl0
ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0Fy
cmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlw
dGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVz
Y3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fY291bnRlcnMuYmVnaW4o
KSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpT
T2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTE0
NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJz
LCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXpl
KCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29z
ckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBK
U0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCArMTAwLDI1IEBAIHZvaWQg
RGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpTVmFsdWUgRGF0YWJhc2U6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICBKU0FycmF5KiBi
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBieXRlY29kZXMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMp
OwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxh
dGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV2ZW50cy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFk
ZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9yaWdpblN0YWNrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6
ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsx
OTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQgewogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRUNNQSA5LjQuMi4z
OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUK
ICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoTElLRUxZ
KGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUsNyArMjA4LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsK
IAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9u
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rv
ci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogICAgICAgICAgICAg
aWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB9IGVsc2Ug
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAKICAg
ICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIyOCw3ICsyMzEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBKU09i
amVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3Bl
Y2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0KTsKIH0KQEAgLTI4
NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgK
ICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2ln
bmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtMzMwLDMxICszMzMsMzIg
QEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgICAgICB1bnNp
Z25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4
SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8v
IDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRo
aXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgLy8gMi4g
TGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpv
aW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRo
ZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4NywxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlH
ZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAg
ZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMsMTQgKzQwNywxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1MiArNDI0LDUyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0cmlu
Z0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAg
QXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24g
PSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcp
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNP
YmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAj
ZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQsMTYgQEAgc3RhdGljIGlubGlu
ZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1N0cmluZyogc2VwYXJhdG9y
LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDUuIElmIGxlbiBpcyB6
ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwot
CiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxl
bWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRlZmluZWQgb3Ig
bnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgUiBiZSA/IFRv
U3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsK
ICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgpAQCAtNTI0
LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAg
ICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4g
TGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVm
aW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxl
dCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUsNyArNTQyLDcgQEAgc3RhdGlj
IEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBl
bGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHBy
b2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAtNTYxLDYgKzU2OCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBT
dHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4o
RXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRl
LCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CkBA
IC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0
ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAt
NjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUK
ICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBqc0RvdWJsZU51bWJlcih2YWx1
ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3du
VG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
c3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZShzdGF0ZS52bSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdl
bmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYzMCw2ICs2NDAsOSBAQCBnZW5l
cmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUg
PyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3Ro
KD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMs
IHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQg
c2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtNjUzLDcgKzY2
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3Ro
KTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1Nl
cGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJp
bmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1
ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmpl
Y3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywg
dGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTcwMSw3ICs3MTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTcxNCw2ICs3
MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1Zh
bHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpAQCAtNzI2LDcgKzc0MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKQEAgLTczOCw3
ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8
aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHN3
aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc5OCw0MSArODEzLDQxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2ln
bmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWdu
ZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMg
PSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAg
ICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhp
c3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlz
dHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBw
ZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElu
bGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb3dlckV4aXN0
cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCB1cHBl
ciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
ICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtODU2LDcgKzg3
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9IGVs
c2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAgLTg2NywxMSArODg0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIHsKICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2Fy
cmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAgLTg5MiwxNCArOTEwLDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0
ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CkBA
IC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtOTMyLDcgKzk1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKQEAgLTk2NywxMiArOTg1LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2sp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgyLDcgKzEwMDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJl
Z2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVj
LT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxl
dGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNl
PihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElu
bGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTAxMywyNCArMTAzMSwyNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMp
OwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewogICAgICAg
ICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGspLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihsZW5ndGggKyBuckFyZ3MpOwpAQCAtMTA0MCwyNiArMTA2MCwyOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogICAgIEpT
VmFsdWUgc2VhcmNoRWxlbWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBpbmRl
eCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFs
KGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTEw
NjgsNiArMTA5MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNQogICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKQEAgLTEwODksMTggKzEx
MTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBkbyB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKTsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFy
Y2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAK
QEAgLTExMDksMjMgKzExMzMsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc291
cmNlLT5pbmRleGluZ1R5cGUoKSkgJiYgIXNvdXJjZS0+c3RydWN0dXJlKCktPmhvbGVzTXVzdEZv
cndhcmRUb1Byb3RvdHlwZSh2bSkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNvdXJj
ZS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRPZmZzZXQgKyBp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHNvdXJjZSwgaSk7
Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTExNTMsNyArMTE3OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25jYXRBcHBlbmRPbmUoRXgKIAogICAgIGlmICghcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhl
Yywgdm0sIDAsIGZpcnN0KSkgewogICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTExOTcsMTIgKzEyMjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RBcnJheS0+bWVy
Z2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZEFycmF5LT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgaWYgKHR5cGUgPT0gTm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZhc3RDb3B5KHZtLCBz
ZWNvbmRBcnJheSkgfHwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXpl
KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQogICAgICAgICAgICAgfHwgIW1vdmVFbGVtZW50
cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFy
cmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bS5leGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE0IEBAIHZvaWQgQm9vbGVh
bkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIC8vIEVDTUEgMTUuNi4yCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJvb2xlYW4gPSBq
c0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKICAgICBTdHJ1Y3R1
cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
Ym9vbGVhblN0cnVjdHVyZSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCks
IGJvb2xlYW4pOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0
ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBi
b29sZWFuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEyIEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnUKIAogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYXRjaFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXRjaFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitD
YXRjaFNjb3BlOjpDYXRjaFNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29w
ZUVudHJ5LCBsb2NhdGlvbikKK3sKK30KKworQ2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisKKyAgICBtX3Zt
LnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpDYXRj
aFNjb3BlRXhpdCwgbV9kZXB0aCwgbV9sb2NhdGlvbik7CisgICAgCisgICAgaWYgKG1fdm0ubV90
cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25F
dmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fbG9jYXRpb24pOworICAgICAgICBpZiAobV92bS5tX25l
ZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLm1fdHJh
Y2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAgICAgICBXVEZSZXBvcnRC
YWNrdHJhY2UoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5leGNlcHRpb24o
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2F0Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhdGNoU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2F0
Y2hTY29wZV9oCisjZGVmaW5lIENhdGNoU2NvcGVfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uU2Nv
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlv
blNjb3BlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYXRjaFNjb3BlKFZNJiwg
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgQ2F0Y2hTY29wZShjb25zdCBDYXRjaFNjb3Bl
JikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRjaFNjb3BlJiYpID0gZGVmYXVsdDsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5DYXRjaFNjb3BlKCk7CisKKyAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkKKyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbV92bS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KK307CisKKyNkZWZpbmUg
REVDTEFSRV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElO
RV9fKSkKKworI2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoK
KyAgICBBTFdBWVNfSU5MSU5FIENhdGNoU2NvcGUoVk0mIHZtKQorICAgICAgICA6IEV4Y2VwdGlv
blNjb3BlKHZtKQorICAgIHsgfQorICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0g
ZGVsZXRlOworICAgIENhdGNoU2NvcGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fdm0uY2xlYXJFeGNlcHRpb24o
KTsgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwKKyAgICBKU0M6
OkNhdGNoU2NvcGUoKHZtX18pKQorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2F0Y2hTY29w
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgQkVHSU5fTk9fU0VUX1BDKCkgXAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKQorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsgXAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIFNF
VF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKQEAgLTk5LDEwICsxMDEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBkb0V4Y2VwdGlvbkZ1enppbmdJZkVuYWJsZWQoZXhlYywgIkNvbW1vblNsb3dQ
YXRocyIsIHBjKTsgICBcCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpIHsg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYyk7ICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
IHsgICBcCisgICAgICAgICAgICBSRVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAg
IFwKICAgICAgICAgICAgIEVORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBFTkQoKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMTQ0LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBDQUxM
X0NIRUNLX0VYQ0VQVElPTihleGVjLCBwYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBFeGVjU3RhdGUqIGNjZUV4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBJbnN0cnVjdGlvbiogY2NlUEMgPSAocGMpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgQ0FMTF9FTkRfSU1QTChjY2VFeGVjLCBMTEludDo6Y2FsbFRvVGhy
b3coY2NlRXhlYykpOyAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCkBAIC00MjcsNyArNDI5
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX211bCkKICAgICBKU1ZhbHVlIGxlZnQgPSBP
UF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7
CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVt
YmVyKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtNDQy
LDcgKzQ0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdWIpCiAgICAgSlNWYWx1ZSBs
ZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9QX0MoMykuanNW
YWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSByaWdo
dC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgLSBiKTsK
QEAgLTQ1NywxMCArNDU5LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kaXYpCiAgICAg
SlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9Q
X0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91Ymxl
IGIgPSByaWdodC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
UkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC8gYik7
CiAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewpAQCAtNDcyLDcgKzQ3NCw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihqc01vZChhLCBi
KSkpOwpAQCAtNDgyLDEwICs0ODQsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvdykK
IHsKICAgICBCRUdJTigpOwogICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGRvdWJsZSBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIFJFVFVSTihq
c051bWJlcihvcGVyYXRpb25NYXRoUG93KGEsIGIpKSk7CiB9CkBAIC00OTQsNyArNDk2LDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGlu
dDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9D
KDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA8PCAo
YiAmIDMxKSkpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPj4gKGIgJiAzMSkpKTsKQEAgLTUxNCw3ICs1MTYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJTigpOwog
ICAgIHVpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMzEpKSkpOwpAQCAtNTMxLDcgKzUzMyw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRhbmQpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBP
UF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhICYg
YikpOwpAQCAtNTQxLDcgKzU0Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRvcikK
IHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAg
UkVUVVJOKGpzTnVtYmVyKGEgfCBiKSk7CkBAIC01NTEsNyArNTUzLDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9Q
X0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgp
LnRvSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgXiBiKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIGJvb2wgb3BJbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVy
dHkoZXhlYywgaSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gcHJvcE5hbWUudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IGludGVycHJldGVyVGhyb3dJbkNhbGxlcihFeGVjU3RhdGUqCiAKICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAg
ZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIi5cbiIpOwor
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBzY29wZS5leGNlcHRpb24oKSwgIi5c
biIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTYgKzg3LDE5
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKIAogSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
CiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcHJvZ3JhbSk7CiAgICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24o
KTsKLSAgICAgICAgZXhlYy0+dm0oKS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTEwNSw5
ICsxMDgsOSBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4
ZWMsIE5vdFN0cmljdE1vZGUpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJl
dGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgdGhpc09iaik7CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xNDcsOSArMTUwLDExIEBAIHN0YXRpYyBTeW1ib2wq
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnQKIAogc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBy
ZWplY3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QpOwogICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTE3NiwxNyArMTgxLDE5IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSBpbml0aWF0b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVh
ZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+
dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3Rm
VGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2
bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZv
ckVudHJ5UG9pbnRNb2R1bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVT
eW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJbnNlcnQg
dGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhl
IGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIo
KS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBzb3Vy
Y2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJuIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZShsb2NrLCBleGVjLCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5p
dGlhdG9yKTsKQEAgLTIxMywxOCArMjIwLDIwIEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9k
dWxlKEV4ZWNTdGF0ZSoKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
Ci0gICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMt
PnZtKCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVs
ZSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0
byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5
LgogICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgSlNTb3VyY2VDb2RlIG9iamVjdCB0byB3cmFwIGFy
b3VuZCB0aGlzIHNvdXJjZS4KICAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92
aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3
KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gbG9hZE1vZHVsZShsb2NrLCBleGVj
LCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5pdGlhdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTQgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGJvb2wgY29uZGl0aW9u
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKGNvbmRp
dGlvbikKQEAgLTIyNSw2ICsyMjcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNiw3ICsyNDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUpOwpAQCAtMjQ1LDYg
KzI0OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVF
bmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNs
aWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAg
IGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMjU2LDcgKzI2Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGNsaWVudC0+cHJvZmlsZUVuZChleGVjLCB0aXRsZSk7CkBAIC0yNjUsNiArMjcxLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0yNzYsNyArMjg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Y2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsKQEAgLTI5Miw2ICszMDAsOCBA
QCBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoCiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTMwMSw3
ICszMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHRpdGxlID0gQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0zMTEsNiArMzIxLDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMjAsNyArMzMyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRs
ZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUg
PSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0YXRpYyBkb3VibGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIAogICAg
IGRvdWJsZSB2YWx1ZTsKQEAgLTE2Nyw3ICsxNjgsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0
ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHZhbHVlID0gbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMoZXhlYywgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogCiAgICAgU3RydWN0dXJlKiBkYXRl
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CkBAIC0yMDIsMTAgKzIwMywxMiBAQCBDYWxs
VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBTdHJpbmcgZGF0ZVN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLT52bSgpLCBkYXRlU3RyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDMsNyArNjAzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkRh
dGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJlIGFu
IG9iamVjdC4iKTsKQEAgLTYxNCw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBKU1ZhbHVlIGhpbnRWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdHlwZSA9IHRvUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZShleGVjLCBoaW50VmFsdWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAodHlwZSA9PSBOb1By
ZWZlcmVuY2UpCkBAIC0xMTIzLDIwICsxMTI0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBK
U1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVy
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEodGltZVZhbHVlLmlzSW50MzIoKSB8
fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgpKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCi0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTE0NSw3ICsxMTQ3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0
cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChl
eGVjLCBhc09iamVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmlu
ZyBkaWQgbm90IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsMTEgQEAgdm9pZCBFcnJvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRD
b3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVy
ZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUs
IG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihFeGVjUwogU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmFt
ZVZhbHVlOwogICAgIGF1dG8gbmFtZVByb3BlcnROYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZTsKQEAgLTE3NiwxNCArMTc3LDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRU
b1N0cmluZygKICAgICAgICAgfQogICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5
cGVEaXJlY3QoKTsKICAgICB9Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbmFtZVN0cmluZzsKICAgICBp
ZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3Ii
KTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWVWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKQEAgLTE5MiwxNCArMTkzLDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNl
OjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICBQcm9wZXJ0eVNsb3QgbWVzc2FnZVNsb3QodGhpcywg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgaWYgKEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgbWVzc2FnZVByb3BlcnROYW1l
LCBtZXNzYWdlU2xvdCkgJiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdl
VmFsdWUgPSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmc7CiAgICAgaWYgKCFtZXNzYWdlVmFsdWUp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyAzLiBMZXQgbmFtZSBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCAibmFtZSIuCiAgICAgSlNWYWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUg
aXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJlICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUg
VG9TdHJpbmcobmFtZSkuCkBAIC05NCwxMyArOTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJF
cnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gNS4gTGV0
IG1zZyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudCAibWVzc2FnZSIuCiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IC8vIChzaWMpCkBAIC0xMTEsNyArMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlcnJvclByb3RvRgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZl
bnQuaCIKKworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnQgZXZlbnQp
Cit7CisgICAgY29uc3QgY2hhciogZXZlbnROYW1lOworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeToKKyAgICAgICAgZXZl
bnROYW1lID0gIkNhdGNoU2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpT
Qzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0OgorICAgICAgICBldmVudE5hbWUgPSAi
Q2F0Y2hTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlv
bkV2ZW50OjpOZWVkRXhjZXB0aW9uQ2hlY2s6CisgICAgICAgIGV2ZW50TmFtZSA9ICJOZWVkIGV4
Y2VwdGlvbiBjaGVjayI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25F
dmVudDo6VGhyb3dTY29wZUVudHJ5OgorICAgICAgICBldmVudE5hbWUgPSAiVGhyb3dTY29wZSBF
bnRyeSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6VGhy
b3dTY29wZUV4aXQ6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvd1Njb3BlIEV4aXQiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93OgorICAgICAg
ICBldmVudE5hbWUgPSAiVGhyb3ciOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnQoZXZlbnROYW1lKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitlbnVtIGNsYXNzIEV4Y2Vw
dGlvbkV2ZW50IHsKKyAgICBDYXRjaFNjb3BlRW50cnksCisgICAgQ2F0Y2hTY29wZUV4aXQsCisg
ICAgTmVlZEV4Y2VwdGlvbkNoZWNrLAorICAgIFRocm93U2NvcGVFbnRyeSwKKyAgICBUaHJvd1Nj
b3BlRXhpdCwKKyAgICBUaHJvdworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudExvY2F0aW9uLmgiCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpFeGNlcHRpb25FdmVudExv
Y2F0aW9uIGxvY2F0aW9uKQoreworICAgIG91dC5wcmludChsb2NhdGlvbi5mdW5jdGlvbk5hbWUs
ICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5KQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaDoyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKCkg
eyB9CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkKKyAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVu
Y3Rpb25OYW1lKQorICAgICAgICAsIGZpbGUoZmlsZSkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisg
ICAgeyB9CisgICAgCisgICAgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9Owor
ICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbGluZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRp
b24oKSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorc3RydWN0IEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24geworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oKSB7IH0KKyAgICBFeGNlcHRp
b25FdmVudExvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmls
ZSwgdW5zaWduZWQgbGluZSkKICAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQog
ICAgICAgICAsIGZpbGUoZmlsZSkKICAgICAgICAgLCBsaW5lKGxpbmUpCkBAIC00MSwzICs0MSwx
MSBAQCBzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgRXhjZXB0aW9uSGVscGVyc19oCiAjZGVmaW5l
IEV4Y2VwdGlvbkhlbHBlcnNfaAogCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUg
IkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlRocm93
U2NvcGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25TY29wZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1ND
T1BFX1ZFUklGSUNBVElPTikKKyAgICAKK0V4Y2VwdGlvblNjb3BlOjpFeGNlcHRpb25TY29wZShW
TSYgdm0sIEV4Y2VwdGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24g
bG9jYXRpb24pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9wcmV2aW91c1Njb3BlKHZtLm1fdG9w
RXhjZXB0aW9uU2NvcGUpCisgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbV9kZXB0
aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK3sK
KyAgICBtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUgPSB0aGlzOworICAgIAorICAgIGlmIChtX3Zt
Lm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnRIZWFkZXIoZW50cnlF
dmVudCwgbV9sb2NhdGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
KQorICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOworICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50
c1dpdGhTdGFja1RyYWNlcykKKyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAg
IH0KK30KKworRXhjZXB0aW9uU2NvcGU6On5FeGNlcHRpb25TY29wZSgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlKTsKKyAgICBtX3ZtLm1fdG9wRXhjZXB0
aW9uU2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cit9CisKK3ZvaWQgRXhjZXB0aW9uU2NvcGU6Omxv
Z0V2ZW50KEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0
aW9uKQoreworICAgIGxvZ0V2ZW50SGVhZGVyKGV2ZW50LCBsb2NhdGlvbik7CisgICAgZGF0YUxv
ZygiXG4iKTsKK30KKwordm9pZCBFeGNlcHRpb25TY29wZTo6bG9nRXZlbnRIZWFkZXIoRXhjZXB0
aW9uRXZlbnQgZXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAg
ZGF0YUxvZygiPCIsIG1fdm0ubV9leGNlcHRpb25FdmVudENvdW50KyssICI+IFsiLCBtX2RlcHRo
LCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25T
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvblNjb3BlX2gKKyNk
ZWZpbmUgRXhjZXB0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisgICAgCitjbGFzcyBFeGNlcHRpb247CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9T
Q09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIHVuc2lnbmVkIGRlcHRo
KCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aDsgfQorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkK
KyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IEV4Y2VwdGlvblNjb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnQgZW50cnlFdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2NvcGUm
KSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRlZmF1
bHQ7CisgICAgfkV4Y2VwdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGxvZ0V2ZW50KEV4Y2VwdGlv
bkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICB2b2lkIGxvZ0V2ZW50SGVhZGVy
KEV4Y2VwdGlvbkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKworICAgIFZNJiBtX3Zt
OworICAgIEV4Y2VwdGlvblNjb3BlKiBtX3ByZXZpb3VzU2NvcGU7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIHVuc2lnbmVkIG1fZGVwdGg7Cit9OworICAgIAor
I2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiBl
eGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvblNjb3BlKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZt
KQorICAgIHsgfQorICAgIEV4Y2VwdGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBk
ZWxldGU7CisgICAgRXhjZXB0aW9uU2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0Owor
CisgICAgVk0mIG1fdm07Cit9OworICAgIAorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NP
UEVfVkVSSUZJQ0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25TY29wZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25T
a2lwcGluZ0V2YWxFCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBzdWJjbGFzc1N0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rhcmdl
dCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBm
dW5jdGlvbiwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBzdWJjbGFzc1N0cnVjdHVyZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsx
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgLy8g
RWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgaWYgKHRhcmdldE9iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkpIHsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICAvLyBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUg
bGVuZ3RoIG9mIEEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxMyArMjE5LDE2IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6ZGVmaW5lT3duUHIKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCkpCiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChleGVjLCBpICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT52bSgpLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxNSArNzMsMTcgQEAgR2V0dGVyU2V0dGVyKiBHZXR0ZXJTZXR0ZXI6OndpdGhTZXR0
ZXIoVgogCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIEZJWE1FOiBTb21l
IGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBleGNlcHRp
b24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2luZyBoZXJlLgot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCk7
CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRl
ci0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlLCBBcmdMaXN0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0OjpkaXMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHZhbHVl
ID0gdGFyZ2V0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhTG9nKHZh
bHVlLCAiXG4iKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBA
IFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIHsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIC8vIFdlIGFsbG93IG5ld1RhcmdldCA9PSBKU1ZhbHVlKCkgYmVjYXVzZSB0aGUgQVBJ
IG5lZWRzIHRvIGJlIGFibGUgdG8gY3JlYXRlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgYSByZWFs
IEpTIGZyYW1lLgogICAgIC8vIFNpbmNlIHdlIGRvbid0IGFsbG93IHN1YmNsYXNzaW5nIGluIHRo
ZSBBUEkgd2UganVzdCB0cmVhdCBuZXdUYXJnZXQgPT0gSlNWYWx1ZSgpIGFzIG5ld1RhcmdldCA9
PSBleGVjLT5jYWxsZWUoKQogICAgIEFTU0VSVCghbmV3VGFyZ2V0IHx8IG5ld1RhcmdldC5pc0Nv
bnN0cnVjdG9yKCkpOwpAQCAtMTEwLDEzICsxMTEsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAgICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0
cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmlsZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4K
ICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5
cGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0
YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uo
dm0sIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGVWYWx1ZSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3Qu
Y29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBj
b25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDYgKzE2Miw5IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVE
YXRhKGMKIAogdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgLy8gMTAuMS4xIEluaXRpYWxpemVDb2xsYXRvciAoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgY29sbGF0b3IgaGFzIGFu
IFtbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gaW50ZXJuYWwgc2xvdCB3aXRoIHZhbHVlIHRydWUs
IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgICAvLyAyLiBTZXQgY29sbGF0b3IuW1tp
bml0aWFsaXplZEludGxPYmplY3RdXSB0byB0cnVlLgpAQCAtMTY5LDcgKzE3Miw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAvLyAzLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMp
OwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwg
dGhlbgpAQCAtMTgxLDE0ICsxODQsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25z
KS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOwogICAg
ICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIDcuIExldCB1IGJlIEdldE9wdGlv
bihvcHRpb25zLCAidXNhZ2UiLCAic3RyaW5nIiwgwqsic29ydCIsICJzZWFyY2giwrssICJzb3J0
IikuCi0gICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2gi
IH0sICJ1c2FnZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQi
KTsKKyAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2giIH0sICJ1c2Fn
ZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQiKTsKICAgICAv
LyA4LiBSZXR1cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIDkuIFNldCBjb2xsYXRvci5bW3VzYWdlXV0gdG8gdS4KICAgICBpZiAodXNhZ2VTdHJpbmcg
PT0gInNvcnQiKQpAQCAtMjEyLDkgKzIxNSw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoRXgKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CiAKICAgICAv
LyAxMy4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwg
InN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCi0gICAgU3Ry
aW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgp
LnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCAiYmVzdCBmaXQiKTsKKyAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIs
ICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBv
ciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyAxNC4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxNS4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjMzLDE2ICsyMzYsMTYgQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIHsKICAgICAgICAgU3RyaW5n
IG51bWVyaWNTdHJpbmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgICAgICBib29s
IG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2sp
OworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIXVzZXNGYWxsYmFjaykKICAgICAgICAgICAgIG51bWVyaWNT
dHJpbmcgPSBBU0NJSUxpdGVyYWwobnVtZXJpYyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAg
ICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgia24iKSwgbnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAg
IHsKLSAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCB7ICJ1cHBlciIsICJs
b3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJzdCBtdXN0IGJlIGVpdGhlciBcInVwcGVyXCIsIFwi
bG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24o
c3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAi
bG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBc
Imxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBvcHQuYWRk
KEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsKICAgICB9CkBAIC0yNzcsOSArMjgwLDkg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIG1fbnVtZXJp
YyA9IChyZXN1bHQuZ2V0KEFTQ0lJTGl0ZXJhbCgia24iKSkgPT0gInRydWUiKTsKIAogICAgIC8v
IDI0LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIs
IMKrImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KLSAg
ICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFj
Y2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBc
ImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7
CisgICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIHsgImJhc2UiLCAiYWNjZW50
IiwgImNhc2UiLCAidmFyaWFudCIgfSwgInNlbnNpdGl2aXR5IG11c3QgYmUgZWl0aGVyIFwiYmFz
ZVwiLCBcImFjY2VudFwiLCBcImNhc2VcIiwgb3IgXCJ2YXJpYW50XCIiLCBudWxscHRyKTsKICAg
ICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyAyNi4gSWYgcyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICAvLyBhLiBJZiB1IGlzICJz
b3J0IiwgdGhlbiBsZXQgcyBiZSAidmFyaWFudCIuCkBAIC0zMDAsMTEgKzMwMywxMSBAQCB2b2lk
IEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKICAgICAvLyAyOC4gTGV0IGlw
IGJlIEdldE9wdGlvbihvcHRpb25zLCAiaWdub3JlUHVuY3R1YXRpb24iLCAiYm9vbGVhbiIsIHVu
ZGVmaW5lZCwgZmFsc2UpLgogICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3Jl
UHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0o
KS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKKyAgICBi
b29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2spOwogICAg
IGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uID0gZmFsc2U7CiAg
ICAgLy8gMjkuIFJldHVybklmQWJydXB0KGlwKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIDMwLiBTZXQgY29sbGF0b3IuW1tpZ25vcmVQdW5jdHVhdGlvbl1dIHRvIGlwLgog
ICAgIG1faWdub3JlUHVuY3R1YXRpb24gPSBpZ25vcmVQdW5jdHVhdGlvbjsKQEAgLTMxOCwxMSAr
MzIxLDEzIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKIAogdm9p
ZCBJbnRsQ29sbGF0b3I6OmNyZWF0ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgQVNTRVJUKCFtX2NvbGxhdG9yKTsKIAogICAgIGlmICghbV9pbml0aWFsaXpl
ZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0ZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIH0KIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAtNDE2LDYg
KzQyMSw5IEBAIGNvbnN0IGNoYXIqIEludGxDb2xsYXRvcjo6c2Vuc2l0aXZpdHlTdHIKIAogSlNP
YmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJu
cyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFz
IGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRv
IGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAtNDI3LDEwICs0MzUsOSBA
QCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAKICAgICBpZiAoIW1f
aW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUs
IGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBt
X2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dXNhZ2UsIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIEFTQ0lJTGl0ZXJhbCh1c2FnZVN0cmlu
ZyhtX3VzYWdlKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmZpbmlzaENyZWEKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIC8vIDEwLjEuMiBJbnRsLkNvbGxhdG9yIChbbG9jYWxlcyBbLCBvcHRpb25zXV0p
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0
IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFy
Z2V0IGJlIE5ld1RhcmdldC4KICAgICAvLyAyLiBMZXQgY29sbGF0b3IgYmUgT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29sbGF0b3JQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChjb2xsYXRvcikuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2Fs
bGVlKCkpLT5jb2xsYXRvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSW50bENvbGxhdG9yKiBjb2xs
YXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAg
IEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQoY29sbGF0b3IpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxp
emVDb2xsYXRvcihjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzcsMTMgKzEzOSwx
NSBAQCBDYWxsVHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjIu
MiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAo
RUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBp
ZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxl
TG9jYWxlc11dLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBAQCB2
b2lkIEludGxDb2xsYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjMuNCBDb2xsYXRvciBDb21wYXJlIEZ1
bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBjb2xsYXRvciBiZSB0aGUgdGhp
cyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoY29sbGF0b3IpIGlzIE9iamVjdCBhbmQg
Y29sbGF0b3IgaGFzIGFuIFtbaW5pdGlhbGl6ZWRDb2xsYXRvcl1dIGludGVybmFsIHNsb3Qgd2hv
c2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTkxLDEzICs5MywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmcoeCkuCiAg
ICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpOwogICAg
IC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDcuIExldCBZIGJlIFRvU3Ry
aW5nKHkpLgogICAgIEpTU3RyaW5nKiB5ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0
YXRlKTsKICAgICAvLyA4LiBSZXR1cm5JZkFicnVwdChZKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA5LiBSZXR1
cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgpAQCAtMTI1LDcgKzEyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KIAogICAgICAgICAvLyBjLiBM
ZXQgYmMgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAg
IGJvdW5kQ29tcGFyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB0YXJnZXRPYmplY3QsIGNvbGxhdG9yLCBudWxscHRyLCAyLCBBU0NJSUxpdGVyYWwo
ImNvbXBhcmUiKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91bmRDb21w
YXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0sIGJvdW5k
Q29tcGFyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0CiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25zIGFic3RyYWN0IG9wZXJhdGlv
biAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxLiBJZiBvcHRpb25zIGlzIHVu
ZGVmaW5lZCwgdGhlbiBsZXQgb3B0aW9ucyBiZSBudWxsLCBlbHNlIGxldCBvcHRpb25zIGJlIFRv
T2JqZWN0KG9wdGlvbnMpLgogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgpAQCAt
MjI0LDcgKzIyNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQK
ICAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBleGVjLmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgSlNPYmplY3QqIG9yaWdpbmFsVG9PYmplY3QgPSBvcmlnaW5hbE9wdGlv
bnMudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMs
IG9yaWdpbmFsVG9PYmplY3QpOwogICAgIH0KQEAgLTI0MSwyNSArMjQyLDI1IEBAIHN0YXRpYyBK
U09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJy
dXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBs
ZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgd2Vla2RheSA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF3ZWVrZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSB5ZWFyID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXllYXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVl
ZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIG1vbnRoID0gb3B0aW9ucy0+Z2V0KCZl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFtb250aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVm
YXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5kYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZh
bHNlOwpAQCAtMjczLDE5ICsyNzQsMTkgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0
aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2
LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFs
c2UuCiAgICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5ob3VyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IWhvdXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAg
ICBKU1ZhbHVlIG1pbnV0ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bWludXRlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1p
bnV0ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAg
IEpTVmFsdWUgc2Vjb25kID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZWNvbmQpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghc2Vj
b25kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwpAQCAtMjk5
LDE1ICszMDAsMTUgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAog
ICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgQVND
SUlMaXRlcmFsKCJudW1lcmljIikpOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNDI4LDEzICs0MjksMTMg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDMuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoZXhlYywgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9j
YWxlcyksCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gTGV0IG9wdGlv
bnMgYmUgVG9EYXRlVGltZU9wdGlvbnMob3B0aW9ucywgImFueSIsICJkYXRlIikuCiAgICAgSlNP
YmplY3QqIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZXhlYywgb3JpZ2luYWxP
cHRpb25zKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyA3LiBMZXQgb3B0IGJlIGEgbmV3IFJlY29yZC4KQEAg
LTQ0Myw3ICs0NDQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
CiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAg
ICAgU3RyaW5nIGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIg
fSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0
XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRj
aGVyXV0gdG8gbWF0Y2hlci4KICAgICBsb2NhbGVPcHQuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIuc3RyaW5nKCksIGxvY2FsZU1hdGNoZXIpOwpAQCAtNDcyLDcgKzQ3Myw3IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAxNy4gTGV0
IHR6IGJlIEdldChvcHRpb25zLCAidGltZVpvbmUiKS4KICAgICBKU1ZhbHVlIHR6VmFsdWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICAvLyAx
OC4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIDE5LiBJZiB0eiBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC00ODEsNyArNDgyLDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgICAgICAvLyBhLiBM
ZXQgdHogYmUgVG9TdHJpbmcodHopLgogICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9IHR6VmFs
dWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh0eiku
Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBjLiBJ
ZiB0aGUgcmVzdWx0IG9mIElzVmFsaWRUaW1lWm9uZU5hbWUodHopIGlzIGZhbHNlLCB0aGVuIGku
IFRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIC8vIGQuIExldCB0eiBiZSBD
YW5vbmljYWxpemVUaW1lWm9uZU5hbWUodHopLgpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICBhdXRvIHNob3J0TG9uZyA9IHsg
InNob3J0IiwgImxvbmciIH07CiAKICAgICBTdHJpbmcgd2Vla2RheSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSwgbmFycm93U2hvcnRM
b25nLCAid2Vla2RheSBtdXN0IGJlIFwibmFycm93XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIi
LCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF3ZWVrZGF5
LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh3ZWVrZGF5ID09ICJuYXJyb3ciKQpAQCAtNTI2LDcg
KzUyNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9
CiAKICAgICBTdHJpbmcgZXJhID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lcmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFlcmEuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGVyYSA9PSAi
bmFycm93IikKQEAgLTUzOCw3ICs1MzksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHllYXIgPSBpbnRsU3RyaW5nT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywg
InllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXllYXIuaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKHllYXIgPT0gIjItZGlnaXQiKQpAQCAtNTQ4LDcgKzU0OSw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgbW9udGgg
PSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRo
LCB0d29EaWdpdE51bWVyaWNOYXJyb3dTaG9ydExvbmcsICJtb250aCBtdXN0IGJlIFwiMi1kaWdp
dFwiLCBcIm51bWVyaWNcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51
bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1vbnRoLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmIChtb250aCA9PSAiMi1kaWdpdCIpCkBAIC01NjQsNyArNTY1LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGRheSA9PSAiMi1kaWdpdCIpCkBAIC01
NzQsNyArNTc1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAog
ICAgIH0KIAogICAgIFN0cmluZyBob3VyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCB0d29EaWdpdE51bWVyaWMsICJob3VyIG11c3QgYmUg
XCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVkIGhvdXIxMiB0byBtYWtlIHRoZSBob3VyIHNrZWxl
dG9uIHBhdHRlcm4gZGVjaXNpb24sIHNvIGRvIHRoaXMgZWFybHkuCkBAIC01ODIsNyArNTgzLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIGJvb2wgaXNI
b3VyMTJVbmRlZmluZWQ7CiAgICAgYm9vbCBocjEyID0gaW50bEJvb2xlYW5PcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEyLCBpc0hvdXIxMlVuZGVmaW5lZCk7CiAg
ICAgLy8gMzMuIFJldHVybklmQWJydXB0KGhyMTIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghaG91ci5pc051bGwoKSkgewpAQCAtNjA1LDcgKzYwNiw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcg
bWludXRlID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5taW51dGUsIHR3b0RpZ2l0TnVtZXJpYywgIm1pbnV0ZSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9y
IFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbWludXRlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtaW51dGUgPT0gIjItZGlnaXQi
KQpAQCAtNjE1LDcgKzYxNiw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgc2Vjb25kID0gaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNl
Y29uZCBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc2Vjb25kLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChzZWNvbmQgPT0gIjItZGlnaXQiKQpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgdGlt
ZVpvbmVOYW1lID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT50aW1lWm9uZU5hbWUsIHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0IGJlIFwic2hv
cnRcIiBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIXRpbWVab25lTmFtZS5pc051bGwoKSkgewogICAgICAgICBpZiAodGltZVpvbmVO
YW1lID09ICJzaG9ydCIpCkBAIC02MzksNyArNjQwLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDI2LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24o
b3B0aW9ucywgImZvcm1hdE1hdGNoZXIiLCAic3RyaW5nIiwgwqsiYmFzaWMiLCAiYmVzdCBmaXQi
wrssICJiZXN0IGZpdCIpLgogICAgIGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+Zm9ybWF0TWF0Y2hlciwgeyAiYmFzaWMiLCAiYmVzdCBmaXQiIH0sICJm
b3JtYXRNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwiYmFzaWNcIiBvciBcImJlc3QgZml0XCIiLCAi
YmVzdCBmaXQiKTsKICAgICAvLyAyNy4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIHVzZSBJQ1UgZGF0ZSBmb3JtYXQg
Z2VuZXJhdG9yLCByYXRoZXIgdGhhbiBvdXIgb3duIHBhdHRlcm4gbGlzdCBhbmQgbWF0Y2hlci4K
QEAgLTgzNCwxNSArODM1LDE3IEBAIGNvbnN0IGNoYXIqIEludGxEYXRlVGltZUZvcm1hdDo6dGlt
ZVpvbmUKIAogSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4
ZWNTdGF0ZSYgZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTIuMy41IEludGwuRGF0ZVRp
bWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5k
IGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZiBjb25zdHJ1Y3RlZCBieSBhbiBvYmplY3QgbGl0ZXJh
bCBhc3NpZ25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgdGhlIHZhbHVl
IG9mIHRoZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1h
dCBvYmplY3QgKHNlZSAxMi40KTogbG9jYWxlLCBjYWxlbmRhciwgbnVtYmVyaW5nU3lzdGVtLCB0
aW1lWm9uZSwgaG91cjEyLCB3ZWVrZGF5LCBlcmEsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1p
bnV0ZSwgc2Vjb25kLCBhbmQgdGltZVpvbmVOYW1lLiBQcm9wZXJ0aWVzIHdob3NlIGNvcnJlc3Bv
bmRpbmcgaW50ZXJuYWwgc2xvdHMgYXJlIG5vdCBwcmVzZW50IGFyZSBub3QgYXNzaWduZWQuCiAg
ICAgLy8gTm90ZTogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBFQ01BU2NyaXB0IDIwMTUgSW50ZXJu
YXRpb25hbGl6YXRpb24gQVBJLCB0aGUgdGltZVpvbmUgcHJvcGVydHkgd2lsbCBiZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgaWYgbm8gdGltZVpvbmUgcHJvcGVydHkgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zIG9iamVjdCBwcm92aWRlZCB0byB0aGUgSW50bC5EYXRlVGlt
ZUZvcm1hdCBjb25zdHJ1Y3Rvci4gVGhlIHByZXZpb3VzIHZlcnNpb24gbGVmdCB0aGUgdGltZVpv
bmUgcHJvcGVydHkgdW5kZWZpbmVkIGluIHRoaXMgY2FzZS4KICAgICBpZiAoIW1faW5pdGlhbGl6
ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhl
YywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05vbnRyaXZpYWxTdHJpbmco
JmV4ZWMsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2NhbGVuZGFyKSk7
CkBAIC04ODksNyArODkyLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChF
eGVjUwogICAgIC8vIDEyLjMuNCBGb3JtYXREYXRlVGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVD
TUEtNDAyIDIuMCkKICAgICBpZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAg
ICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIC8vIDEuIElmIHggaXMg
bm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMS4yIEludGwuRGF0ZVRpbWVGb3JtYXQgKFtsb2NhbGVz
IFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMg
dW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBl
bHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIuIExldCBkYXRlVGltZUZv
cm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRhdGVUaW1lRm9y
bWF0KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9y
bWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVyZSk7
CisgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZv
cm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7
CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVUaW1lRm9y
bWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00
MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9y
bWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVk
TG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxT
dHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZTo6ZmluaXNoCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxE
YXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAvLyAxMi4zLjQgRGF0ZVRpbWUgRm9ybWF0IEZ1bmN0aW9ucyAoRUNNQS00
MDIgMi4wKQogICAgIC8vIDEuIExldCBkdGYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4g
QXNzZXJ0OiBUeXBlKGR0ZikgaXMgT2JqZWN0IGFuZCBkdGYgaGFzIGFuIFtbaW5pdGlhbGl6ZWRE
YXRlVGltZUZvcm1hdF1dIGludGVybmFsIHNsb3Qgd2hvc2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTEw
MSw3ICsxMDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAg
ICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9IGRh
dGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4KLSAg
ICAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xNDAsNyArMTQyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3Vu
ZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQg
PSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0
T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0
Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSW50bE51bWJlckZv
cm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVzdGVkTG9j
YWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAgIC8vIDQu
IFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgpAQCAtMTc3
LDcgKzE3Nyw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0
dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLC
uywgImJlc3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAi
LCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIg
b3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxNi4gTGV0IHMgYmUgR2V0
T3B0aW9uKG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAiZGVjaW1hbCIsICJwZXJjZW50
IiwgImN1cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmluZyBzdHlsZVN0cmluZyA9IGlu
dGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IiB9LCAic3R5bGUg
bXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBcImN1cnJlbmN5XCIi
LCAiZGVjaW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0
byBzLgogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE5LiBM
ZXQgYyBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMjQuIExl
dCBjZCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5RGlzcGxheSIsICJzdHJpbmciLCDC
qyJjb2RlIiwgInN5bWJvbCIsICJuYW1lIsK7LCAic3ltYm9sIikuCiAgICAgU3RyaW5nIGN1cnJl
bmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3lt
Ym9sIiwgIm5hbWUiIH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIs
IFwic3ltYm9sXCIsIG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIC8vIDI1LiBSZXR1cm5J
ZkFicnVwdChjZCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAyNi4gSWYg
cyBpcyAiY3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3VycmVuY3lEaXNwbGF5XV0gdG8g
Y2QuCiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4
LiBSZXR1cm5JZkFicnVwdChtbmlkKS4KICAgICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21p
bmltdW1JbnRlZ2VyRGlnaXRzXV0gdG8gbW5pZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmlt
dW1JbnRlZ2VyRGlnaXRzOwogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDMyLiBSZXR1cm5JZkFicnVwdChtbmZkKS4K
ICAgICAvLyAzMy4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1GcmFjdGlvbkRpZ2l0c11dIHRv
IG1uZmQuCiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVt
RnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMg
PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CiAKQEAgLTMwMCwyMCArMzAwLDIwIEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzNi4gUmV0dXJuSWZBYnJ1
cHQobXhmZCkuCiAgICAgLy8gMzcuIFNldCBudW1iZXJGb3JtYXQuW1ttYXhpbXVtRnJhY3Rpb25E
aWdpdHNdXSB0byBteGZkLgogICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGlu
dGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1h
eGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAK
ICAgICAvLyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMiKS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0
aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9w
dGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEu
IFJldHVybklmQWJydXB0KG14c2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyA0Mi4gSWYgbW5zZCBpcyBub3QgdW5kZWZpbmVkIG9yIG14c2QgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgbW5zZCBiZSBHZXROdW1iZXJPcHRpb24o
b3B0aW9ucywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIsIDEsIDIxLCAxKS4KICAgICAgICAg
dW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtbnNk
KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBj
LiBMZXQgbXhzZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyIsIG1uc2QsIDIxLCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhz
ZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8g
ZS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERpZ2l0c11dIHRvIG1uc2Qu
CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25pZmljYW50
RGlnaXRzOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlh
bGl6ZU51bWJlckYKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1c2VHcm91cGluZyA9
IHRydWU7CiAgICAgLy8gNDQuIFJldHVybklmQWJydXB0KGcpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1c2VHcm91cGluZ11dIHRv
IGcuCiAgICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwpAQCAtMzYyLDExICszNjIsMTQg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogCiB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmNyZWF0ZU51bWJlckZvcm1hdChFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgQVNTRVJUKCFtX251bWJlckZvcm1hdCk7CiAKICAgICBpZiAoIW1faW5p
dGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChz
dGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAg
LTQ4MCw2ICs0ODMsOSBAQCBjb25zdCBjaGFyKiBJbnRsTnVtYmVyRm9ybWF0OjpjdXJyZW5jeURp
CiAKIEpTT2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1h
dC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUg
ZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmli
dXRlcyBhcmUgc2V0IGFzIGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVy
YWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAt
NDkxLDEwICs0OTcsOSBAQCBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRp
CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlh
bGl6ZU51bWJlckZvcm1hdChzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9j
YWxlLCBqc1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bWJlcmluZ1N5c3RlbSIpLCBqc1N0
cmluZygmc3RhdGUsIG1fbnVtYmVyaW5nU3lzdGVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaXNoCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMS4yIElu
dGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAg
ICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUg
YWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4K
ICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVj
dG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVy
bklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rh
cmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxl
ZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0
KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0
cnVjdHVyZSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQp
OwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0
LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmdlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3Rh
dGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjAp
CiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2
YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEludGxOdW1iZXJGCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNiArODIsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5j
Rm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEx
LjMuNCBGb3JtYXQgTnVtYmVyIEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExl
dCBuZiBiZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUobmYpIGlzIE9i
amVjdCBhbmQgbmYgaGFzIGFuIFtbaW5pdGlhbGl6ZWROdW1iZXJGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlICB0cnVlLgpAQCAtOTEsNyArOTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFs
dWUpLgogICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3Rh
dGUpOwogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDYuIFJldHVy
biBGb3JtYXROdW1iZXIobmYsIHgpLgpAQCAtMTI4LDcgKzEzMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91
bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0
ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdl
dE9iamVjdCwgbmYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYt
PnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsOSBAQCB2b2lkIGNvbnZlcnRJQ1VMb2NhbGVUb0JDUDQ3TGFuZ3VhZ2VU
YWcoCiAKIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBv
cHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJvb2wmIHVzZXNGYWxsYmFjaykKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5
cGUsIHZhbHVlcywgZmFsbGJhY2spCiAgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLiB2YWx1ZXMg
aXMgYWx3YXlzIHVuZGVmaW5lZC4KIApAQCAtMTMwLDE0ICsxMzMsMTQgQEAgYm9vbCBpbnRsQm9v
bGVhbk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLAogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9u
cy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBi
ZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0
YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW4KQEAgLTE3MiwxNCArMTc1LDE0IEBAIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9P
YmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChv
cHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHBy
b3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTE5Miw3ICsxOTUsNyBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVj
U3RhdGUmIHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAvLyBk
LiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjIwLDE0ICsyMjMsMTQgQEAg
dW5zaWduZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgIEpTT2JqZWN0KiBv
cHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1
cHQob3B0cykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gMy4gTGV0
IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMt
PmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVl
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0yMzUsNyArMjM4LDcgQEAgdW5zaWduZWQgaW50bE51
bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyAxLiBJZiB2YWx1
ZSBpcyBOYU4gb3IgbGVzcyB0aGFuIG1pbmltdW0gb3IgZ3JlYXRlciB0aGFuIG1heGltdW0sIHRo
cm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIGlmICghKGRvdWJsZVZhbHVlID49
IG1pbmltdW0gJiYgZG91YmxlVmFsdWUgPD0gbWF4aW11bSkpIHsKQEAgLTU1NiwxNiArNTU5LDE2
IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9CiAKICAg
ICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAi
bGVuZ3RoIikpLgogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQ
cm9wZXJ0eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUg
YmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KQEAgLTU4MSw3ICs1ODQsNyBAQCBWZWN0b3I8U3RyaW5n
PiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2Nh
bGVzT2JqZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVy
bklmQWJydXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1
ZSwgdGhlbgpAQCAtNTkwLDcgKzU5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+
Z2V0KCZzdGF0ZSwgayk7CiAKICAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFs
dWUpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkg
aXMgbm90IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KQEAg
LTYwMyw3ICs2MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4
CiAgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAK
ICAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKHRhZykg
aXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkBAIC05MzMsNiArOTM2LDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogewogICAgIC8vIDku
Mi44IFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICAvLyAxLiBJ
ZiBvcHRpb25zIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTk0MCw3ICs5NDQsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBt
YXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDC
qyAibG9va3VwIiwgImJlc3QgZml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIg
PSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2Nh
bGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3Qg
YmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgpAQCAtOTYwLDcgKzk2NCw3IEBA
IEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9y
dGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlG
cm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KQEAgLTk2OSw3ICs5NzMsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vi
c2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZz
dGF0ZSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+
Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExv
Y2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tp
XSwgZGVzYywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFi
cnVwdCBjb21wbGV0aW9uLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTUgKzQwLDE3IEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0
aFdvcmthcm8KICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxp
dHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBpZiAoIWpzRHluYW1pY0Nhc3Q8SW50bEluc3RhbmNlKj4odGhpc1ZhbHVlKSkgewogICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUpOwogICAgICAgICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIEludGxJbnN0YW5jZSogaW5zdGFuY2UgPSBmYWN0b3J5KHZtKTsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3Rh
bmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQ2FsbERh
dGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUgaXRlcmF0
b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAg
ICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5l
eHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXJlc3Vs
dC5pc09iamVjdCgpKQpAQCAtODAsMTEgKzgwLDE0IEBAIGJvb2wgaXRlcmF0b3JDb21wbGV0ZShF
eGVjU3RhdGUqIGV4ZWMsIEoKIAogSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGl0ZXJhdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmIChkb25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKQEAgLTk3LDEyICsx
MDAsMTMgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0
b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkgewpAQCAtMTI5LDcgKzEzMyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKQEAgLTE2Nyw3ICsx
NzEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgaXRl
cmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5pdGVyYXRvclN5bWJvbCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIAogICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTE3OSw3
ICsxODMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAKICAg
ICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
ciA9IGNhbGwoc3RhdGUsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlw
ZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFy
Z3VtZW50cyk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAg
aWYgKCFpdGVyYXRvci5pc09iamVjdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQ3LDIwICs0OCwyMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbEJh
Y2tUeXBlPgogdm9pZCBmb3JFYWNoSW5JdGVyYWJsZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IGl0ZXJhYmxlLCBjb25zdCBDYWxsQmFja1R5cGUmIGNhbGxiYWNrKQogewogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGl0ZXJhdG9yRm9ySXRlcmFibGUoc3RhdGUsIGl0
ZXJhYmxlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChzdGF0ZSwgaXRlcmF0b3IpOwotICAgICAg
ICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgdm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChuZXh0
LmlzRmFsc2UoKSB8fCBVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKHN0YXRl
LCBuZXh0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNh
bGxiYWNrKHZtLCBzdGF0ZSwgbmV4dFZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDcgQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlM
ZW5ndGgoKSAtIDE7CiAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCiAgICAgaWYgKCFk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CkBAIC02NDMsNyArNjQz
LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAK
ICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0
aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUp
OwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFy
cmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAg
ICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAg
ICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
Njk1LDcgKzY5NSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgYm9v
bCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSwgcHV0UmVzdWx0KSkgewot
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBvbGRMZW5ndGggPCAweEZG
RkZGRkZGdSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3Ro
IDwgMHhGRkZGRkZGRnUpCiAgICAgICAgICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIG9sZExlbmd0
aCArIDEsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MzEsNyAr
NzMxLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAg
ICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAg
IG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgo
KSwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAg
NiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTExOTAsNiArMTE5MCw5IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpID0g
b2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwogICAgIHVuc2lnbmVk
IHZlY3RvckVuZDsKQEAgLTEyNTUsNyArMTI1OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGV4ZWMs
IGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMg
aW4gZmFjdCBjb3JyZWN0IHRvIHNheQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIFN0cnVjdHVyZSog
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CiAgICAgCiAgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwyNCArNzAsMjYgQEAgaW5saW5lIGJvb2wgSlNBcnJheTo6Y2Fu
RmFzdENvcHkoVk0mIHZtLAogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNB
cnJheShvYmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgo
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iai0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvVUlu
dDMyKGV4ZWMpOwogfQogCiBBTFdBWVNfSU5MSU5FIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNBcnJheShv
YmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iai0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gUE5hTjsKICAgICByZXR1cm4gbGVuZ3RoVmFsdWUudG9MZW5ndGgoZXhlYyk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw4ICsxMjYs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlCiAKIGlubGluZSBT
dHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlv
bikKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IHRhcmdldEpTRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRGdW5j
dGlvbik7CiAKQEAgLTE1OCw2ICsxNTksNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0CiAKIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTQXJyYXkqIGJvdW5k
QXJncywgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3RE
YXRhKHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBib29sIGNhbkNvbnN0cnVj
dCA9IGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZTsKQEAgLTE3MCw3ICsxNzIs
NyBAQCBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAgICAgIGNh
bkNvbnN0cnVjdCA/IChzbG93Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwKICAgICAgICAgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0dXJlKHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQm91bmRGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSogCiAgICAgICAgIH0KIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4
ZWMKICAgICAKICAgICBKU09iamVjdCogcHJvdG90eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwpAQCAtMzc4LDExICszNzgsMTEgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nh
c2UoRXhlYwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gYXND
ZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U1N0cmluZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIGlubGluZSBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHRvUHJlZmVycmUKICAgICB9CiAKICAgICBTdHJpbmdJbXBsKiBoaW50
U3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiAKICAgICBpZiAoV1RGOjpl
cXVhbChoaW50U3RyaW5nLCAiZGVmYXVsdCIpKQpAQCAtNzg0LDggKzc4NCw5IEBAIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxi
YWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9v
ZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNW
YWx1ZTo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxs
YmFjaykgY29uc3QKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBib29sIGZvdW5kID0gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC04OTcsNiArODk4LDcgQEAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6ZXF1YWwoRXhlY1N0YXRlKiBleAogQUxXQVlTX0lOTElORSBi
b29sIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiB2MS5hc051
bWJlcigpID09IHYyLmFzTnVtYmVyKCk7CkBAIC05MjQsNyArOTI2LDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogICAgICAgICAgICAgaWYgKHYyLmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogICAgICAgICAgICAgSlNWYWx1
ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MSA9IHAxOwogICAg
ICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkBAIC05MzQsNyArOTM2
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogCiAgICAgICAg
IGlmICh2Mi5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9Qcmlt
aXRpdmUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHYyID0gcDI7CiAgICAgICAgICAgICBpZiAodjEu
aXNJbnQzMigpICYmIHYyLmlzSW50MzIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDE0ICsxMzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0
aGUgYnl0ZU9mZnNldCkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wg
bGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQg
YW5kIHZhbHVlKSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25l
ZCBkYXRhU2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKQEAgLTE5MSwxNCAr
MTkxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0g
dTsKIAogICAgIHUudmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRpYW4g
PSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw2ICs1OTAsOSBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKFZNJiB2bSwgCiAKIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1l
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8v
IFRoZSAibmFtZSIgcHJvcGVydHkgbWF5IGhhdmUgYmVlbiBhbHJlYWR5IGJlZW4gZGVmaW5lZCBh
cyBwYXJ0IG9mIGEgcHJvcGVydHkgbGlzdCBpbiBhbgogICAgIC8vIG9iamVjdCBsaXRlcmFsIChh
bmQgdGhlcmVmb3JlIHJlaWZpZWQpLgogICAgIGlmIChoYXNSZWlmaWVkTmFtZSgpKQpAQCAtNjA1
LDEyICs2MDgsMTEgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygm
dWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4
ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5
TmFtZShleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1Zh
bHVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTQgKzg5LDE0IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9y
YWdlOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9y
U3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMs
IG5leHQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBzdG9yYWdlLmFwcGVuZChuZXh0SXRlbSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBA
QCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIHN0b3JhZ2Uuc2l6ZSgpKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0
SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChpKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIs
NyArMTYyLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAg
ICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgICAgICAvLyBXZSB3b3VsZCBsaWtlIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFz
IGl0IGlzIHBhaW5mdWxseSBzbG93LiBGb3J0dW5hdGVseSwgdW5sZXNzCkBAIC0xODMsMjEgKzE4
MywyMSBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmd1bWVudHM7CiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdG
cm9tSXRlcmF0b3I8Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAw
IDogbGVuZ3RoU2xvdC5nZXRWYWx1ZShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIAogICAgICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjM1LDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRTdHJ1Y3R1cmUgPSBmdW5jdGlv
bi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIHBh
cmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKQEAgLTI1MiwxMiArMjUyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9wdDsKICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYgYXJnQ291
bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIp
IHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvVUlu
dDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY29u
c3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBpbmxpbmUgSlNBcnJh
eUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVz
ID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3lt
Ym9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3Bl
Y2llcy5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVj
dG9yKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBh
cmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihyZXN1bHQpKSB7CkBAIC0xNDcsNyArMTQ3
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuNQpAQCAtMTU3LDEzICsxNTYsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBs
ZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIGxvbmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGV4ZWMsIDIsIGxlbmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQpAQCAtMTgz
LDcgKzE4Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpz
Q2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CkBAIC0xOTgsNyArMTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEpTVmFsdWUgdmFs
dWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTIwOSw3ICsyMDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBB
U1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlm
IChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0y
MzAsNyArMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMTMKQEAgLTI0NSw3ICsy
NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBK
U1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTI1NSw3ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xh
c3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7
CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAt
MjY5LDcgKzI2Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
IHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganND
YXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTI4MiwxMSArMjc4LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKCpleGVjLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAg
am9pbmVyLmFwcGVuZCgqZXhlYywgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CkBAIC0yOTksNyArMjk1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5n
KiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0zMTAsNyArMzA2LDYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8v
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjE2CkBAIC0zMzgsNyArMzMzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICAgICAgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQogCi0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0
LT5pc05ldXRlcmVkKCkpCkBAIC0zNDksNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CiAKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9
IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRl
eCkgewpAQCAtNDMyLDcgKzQyNyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4yNgpAQCAt
NDQ1LDEwICs0MzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAg
IHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAt
NDY3LDcgKzQ2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50
eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAg
ICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkp
OwpAQCAtNTE4LDcgKzUxMiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMu
MjMKQEAgLTUzNyw5ICs1MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVtYmVyKCkpOwogICAgIEFT
U0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDEp
LmlzTnVtYmVyKCkpOwogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB1bnNpZ25lZCBl
bmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5n
dGgsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSk7CiAKQEAgLTU3Miw3ICs1NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3Ms
ICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxNSwxMiArODE1LDE0IEBAIGlubGluZSBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVt
cHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0g
MCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+PSBNSU5f
QVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKQogICAgICAgICBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAg
ICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCkpOwpAQCAtODMzLDggKzgzNSwxMCBAQCBp
bmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzKSk7CiB9CkBAIC04NDYsOCArODUwLDEwIEBA
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQog
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJv
ZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9y
KHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgp
KTsKIH0KQEAgLTg1OSw4ICs4NjUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4
ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVk
IGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2
ICs2NCw5IEBAIFJlZjxNaWNyb3Rhc2s+IGNyZWF0ZUpTSm9iKFZNJiB2bSwgSlNWYWwKIAogdm9p
ZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0YTsKICAgICBDYWxsVHlwZSBoYW5kbGVyQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxEYXRhKTsKICAgICBBU1NF
UlQoaGFuZGxlckNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKQEAgLTcyLDcgKzc1LDcgQEAg
dm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYwogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwLCBsZW5ndGggPSBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7IGluZGV4IDwgbGVu
Z3RoOyArK2luZGV4KQogICAgICAgICBoYW5kbGVyQXJndW1lbnRzLmFwcGVuZChtX2FyZ3VtZW50
cy0+SlNBcnJheTo6Z2V0KGV4ZWMsIGluZGV4KSk7CiAgICAgcHJvZmlsZWRDYWxsKGV4ZWMsIFBy
b2ZpbGluZ1JlYXNvbjo6TWljcm90YXNrLCBtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxUeXBlLCBo
YW5kbGVyQ2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGhhbmRsZXJBcmd1bWVudHMpOwotICAgIGV4
ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcgKzc4LDE5IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKIAogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
TW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVu
dCo+KGNlbGwpOwogICAgIEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0
aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIGlmIChyZXNvbHV0aW9u
LnR5cGUgPT0gSlNNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAg
ICAgICAgIC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhl
IGltcG9ydGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAg
ICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNv
bHV0aW9uLm1vZHVsZVJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKICAgICAgICAgUHJvcGVy
dHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9j
YWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAgICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9k
dWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9y
dGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVj
dFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAg
QVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVlKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
cmVkaXJlY3RTbG90LmdldFZhbHVlKGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lKTsKLSAgICAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgcmVkaXJlY3RTbG90LmF0dHJpYnV0ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwx
MyArMTQ5LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2gKICAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMs
IGtleSksICJcbiIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGlmIChnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQog
ICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5t
b2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgaW5pdGlhdG9y
KTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBt
b2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OkpTTW9kdWxlTmFtZXNwYQogdm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3Jk
LCBjb25zdCBJZGVudGlmaWVyU2V0JiBleHBvcnRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKQEAg
LTgxLDcgKzgyLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl
Yy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUt
bmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZlbnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFi
bGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogfQogCiB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKQEAgLTEzNiw3ICsxMzcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpnZXRPd25Qcm9wCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKIAogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdHJhbXBvbGluZVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBmaWxsZWQgd2l0aCBURFogdmFsdWUsIHRocm93IGEgcmVmZXJlbmNlIGVycm9yLgogICAgICAg
ICBpZiAoIXZhbHVlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
OSw3ICs3NzksNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAg
ICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhvc3RSZXNvbHZlSW1wb3J0
ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7CiAgICAgICAgIGlmIChp
bXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpIHsKICAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3QgPSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIGltcG9ydEVudHJ5LmxvY2FsTmFtZSwgbmFtZXNwYWNlT2JqZWN0LCAvKiBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUs
IHB1dFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNiArMjIwLDE4IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAsIG1fcmVwbGFj
ZXJDYWxsVHlwZShDYWxsVHlwZTo6Tm9uZSkKICAgICAsIG1fZ2FwKGdhcChleGVjLCBzcGFjZS5n
ZXQoKSkpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCFtX3JlcGxhY2VyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3JlcGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRz
KEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVl
OwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+IGFycmF5ID0gbV9yZXBsYWNlci5hc09iamVjdCgp
OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgbmFtZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBpZiAobmFtZS5pc09iamVjdCgpKSB7CkBAIC0yNDgsMzYgKzI1MCwzOSBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAKIExvY2FsPFVua25vd24+IFN0cmlu
Z2lmaWVyOjpzdHJpbmdpZnkoSGFuZGxlPFVua25vd24+IHZhbHVlKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0g
ICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtu
b3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsK
IAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdChtX2V4ZWMtPnZtKCksIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIsIHZhbHVlLmdldCgpKTsKKyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwg
ZW1wdHlQcm9wZXJ0eU5hbWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
LCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBw
ZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJv
cGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBMb2NhbDxV
bmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgp
LCBqc051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmlu
ZWQoKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U09OKEpTVmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJv
cGVydHlOYW1lKQogewotICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXQpOwogICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3QpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAg
ICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvSlNPTik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBy
ZXR1cm4gdG9KU09OSW1wbCh2YWx1ZSwgdG9KU09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9
CkBAIC0zMDEsNyArMzA2LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogCiAgICAgLy8gQ2FsbCB0aGUgdG9KU09OIGZ1bmN0aW9uLgogICAgIHZhbHVlID0gdG9K
U09OKHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5
RmFpbGVkOwogCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uCkBAIC0zMTAsNyAr
MzE1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAg
ICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFsdWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5n
ZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBtX3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJn
cyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAg
ICAgfQogCkBAIC0zMjQsNyArMzI5LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBT
dHJpbmdpZmllcgogCiAgICAgdmFsdWUgPSB1bndyYXBCb3hlZFByaW1pdGl2ZShtX2V4ZWMsIHZh
bHVlKTsKIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKSB7CkBAIC0zNzcsMTQgKzM4MiwxNCBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1w
dHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHkoKTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChI
b2xkZXIodm0sIG1fZXhlYywgb2JqZWN0KSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKIAogICAgIGRvIHsKICAgICAgICAgd2hpbGUg
KG1faG9sZGVyU3RhY2subGFzdCgpLmFwcGVuZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikp
IHsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lm
eUZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBtX2hvbGRlclN0YWNrLnJlbW92ZUxhc3QoKTsK
QEAgLTQzNiw2ICs0NDEsOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zaXplKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZpcnN0IHRpbWUg
dGhyb3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKQEAgLTQ0NCw3ICs0NTEs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAg
ICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29i
amVjdC5nZXQoKSktPmxlbmd0aCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0
LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00NTIsNyArNDU5
LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAg
ICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5n
ZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9i
amVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Niw3
ICs0OTMsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIApAQCAtNTA0LDcgKzUxMSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVp
bGRlci5sZW5ndGgoKTsKQEAgLTY0MCw3ICs2NDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xv
dC5nZXRWYWx1ZShtX2V4ZWMsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC02NTgsNyArNjY1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxr
KEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpLCBmaWx0ZXJlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAg
ICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTY3NSw3ICs2ODIsNyBAQCBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpAQCAtNjk4LDcgKzcwNSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBi
ZSBtb2RpZmllZCBieSB0aGUgcmV2aXZlciBmdW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJv
dwotICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTcxNyw3ICs3MjQsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBtX2V4ZWMsIHByb3ApOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0
LCBtX2V4ZWMsIHByb3AsIGZpbHRlcmVkVmFsdWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdv
dG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTc1NCw3ICs3NjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUg
cGFyYW1ldGVyIikpKTsKICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIC8vIDMuIEVTNiBQcm94eS4K
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBvd25EZXNjcmlwdG9yOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDcs
MTMgKzQ0OCwxMyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBvd25EZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5
XV0oUCkuCiAgICAgICAgIGJvb2wgb3duRGVzY3JpcHRvckZvdW5kID0gY3VycmVudC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgb3duRGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQpIHsKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1h
IExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJvdG90eXBlT2ZdXSgpLgogICAgICAgICAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4K
QEAgLTQ4NSw3ICs0ODYsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJlY2VpdmVy
KTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsKICAgICAg
ICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3Ip
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZp
bmVkLCB0aGVuCkBAIC0xMzYxLDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5
cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVu
c2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CkBAIC0xNjIxLDcgKzE2MjIsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29w
ZS5leGNlcHRpb24oKTsKICAgICBpZiAoZnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09
IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAt
MTY0OSw3ICsxNjUwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Qcmlt
aQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAg
QVNTRVJUKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBtb2RlID09IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgp
IDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLnRvUHJp
bWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIpKTsKQEAgLTE2ODcsNyArMTY4OCw3IEBAIEpTVmFs
dWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoRXgKICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJObyBkZWZhdWx0IHZhbHVlIikpOwogfQpAQCAtMTc4
Nyw3ICsxNzg4LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFvYmplY3RWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTgwOSwxMiArMTgxMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByaXZhCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBK
U1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODI2LDEwICsxODI4LDEwIEBAIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBy
b3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTkyNywxNiArMTkyOSwyMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtCiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9Qcmlt
aXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5jcHAKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJl
cihleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1p
dGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwog
fQpAQCAtMzExMywxNSArMzExOSwxOCBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURl
c2NyaXB0b3IoCiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZt
ICA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRl
ZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBk
ZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAog
ICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBk
ZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxl
dGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZs
YWcgdG8gbWFrZSB0aGlzIHdvcmsuCi0gICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKGV4ZWMtPnZtKCksIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJs
ZSk7CisgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwogICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgIGJvb2wgaXNFeHRlbnNp
YmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRl
c2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0K
QEAgLTMyMjEsMTIgKzMyMzAsMTMgQEAgdm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVy
dHlOYW1lcwogdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVk
ZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzIzOCwxMCArMzI0OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90
b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVh
azsKQEAgLTMyNTcsNyArMzI2Nyw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFtZXRob2QuaXNDZWxsKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE2IEBAIHZvaWQgY3Jl
YXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1
ZT4gcmVzdWx0OwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4
ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNE
b3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3Vi
bGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3Ro
QXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhl
YywgaW5kZXgpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKQEAg
LTk1LDggKzk1LDEwIEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EK
IHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQ
cm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2Fs
bGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ym9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC0x
MDQsNiArMTA2LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYQog
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0
UHJvdG90eXBlOwpAQCAtMTExLDE0ICsxMTQsMTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1
cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFw
cm90b3R5cGUuaXNPYmplY3QoKSkKQEAgLTEzMyw2ICsxMzYsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAg
IE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBl
ID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTE0NCw3ICsxNDgsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMTUyLDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9u
SW5kZXgKICAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVj
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5w
cm9taXNlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpj
cmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBA
QCBwcml2YXRlOgogaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1l
RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDMyX3QgaW5kZXhlZExlbmd0aCA9IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKTsKIApAQCAtMTE5LDE4ICsxMjAsMTggQEAg
aW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydAogCiAgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCiAg
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFz
ZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2
ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNv
IGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxp
bmRleGVkTGVuZ3RofCB0byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwx
MCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
cHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVu
dW1lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTYgKzIwMCwxOCBAQCBKU09iamVj
dCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlCiAvLyBXaGVuIGFuIGV4Y2VwdGlvbiBv
Y2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UuCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2
bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF1bnNjb3BhYmxlcy5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSBibG9ja2VkID0ganND
YXN0PEpTT2JqZWN0Kj4odW5zY29wYWJsZXMpLT5nZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBibG9ja2VkLnRvQm9v
bGVhbihleGVjKTsKQEAgLTIxNyw2ICsyMTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNj
b3BhYmxlKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZN
JiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwog
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOwogICAgIHdoaWxlICgx
KSB7CkBAIC0yMzksNyArMjQzLDcgQEAgSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0
YXRlKiBleAogICAgICAgICBpZiAob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsK
ICAgICAgICAgICAgIGlmICghaXNVbnNjb3BhYmxlKGV4ZWMsIHNjb3BlLCBvYmplY3QsIGlkZW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghZXhlYy0+aGFkRXhjZXB0aW9uKCksICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1
cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UiKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5z
Y29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDkgKzc0LDExIEBAIHZvaWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25z
dCBKU0NlbGwKIAogYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBvdGhlcikgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgc3RyMSA9
IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzdHIyID0gb3RoZXItPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0
cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihF
eGVjU3RhdGUmIAogICAgIEFTU0VSVChtX3N0cmluZ3Muc2l6ZSgpIDw9IG1fc3RyaW5ncy5jYXBh
Y2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFsZW5n
dGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2ICs1NzIsOCBAQCBU
b2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJz
ZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBz
dGF0ZSA9IGluaXRpYWxTdGF0ZTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFj
azsKICAgICBKU1ZhbHVlIGxhc3RWYWx1ZTsKQEAgLTU4Myw3ICs1ODUsNyBAQCBKU1ZhbHVlIExp
dGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICBzdGFydFBhcnNlQXJy
YXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0UGFyc2VBcnJheTogewogICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDApOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVu
ZChhcnJheSk7CiAgICAgICAgICAgICB9CkBAIC02ODEsNyArNjgzLDcgQEAgSlNWYWx1ZSBMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09IG1f
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlICE9IFN0cmljdEpTT04gJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFVu
ZGVyc2NvcmVQcm90by5hZGQob2JqZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhcnNlRXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8g
cmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwpAQCAtNjkzLDcgKzY5NSw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRlbnQpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQsIGxhc3RWYWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+dHlwZSA9PSBUb2tDb21tYSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3Ry
dWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTcxLDcgKzcx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24g
PSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBm
b3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIG5leHRJdGVtKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYgKCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIsOCArMTYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q2x6MzIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBkb3VibGUgbWF4ID0gMDsKICAgICBWZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFy
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
ICAgICAgICBpZiAoc3RkOjppc2luZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSkpOwpAQCAtMjkyLDggKzI5NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3Qg
bGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRl
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVs
ZUtleS5pbXBsKCkpOwpAQCAtMTQyLDEyICsxNDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVs
ZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBt
b2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5r
XSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
dmlzaXRDaGlsZHIKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNT
RVJUKGVycm9yU3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDkgKzg1LDExIEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFYKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVy
T2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9i
amVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9i
amVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbmV3VGFyZ2V0IGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQg
b2YgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAv
LyBTaW5jZSBpZiB3ZSBmb3VuZCB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3Qg
ZmFsbCBpbnRvIHRoZSB0eXBlIGNvbnZlcnNpb24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsx
MzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYg
KG5ld1RhcmdldCAmJiBuZXdUYXJnZXQgIT0gb2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAg
Ly8gYS4gUmV0dXJuID8gT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAi
JU9iamVjdFByb3RvdHlwZSUiKS4KICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJn
ZXQsIGdsb2JhbE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAg
ICB9CkBAIC0yMTEsOCArMjEzLDEwIEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90
b3R5cGVPZigKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4
ZWMsIG9iamVjdCkpOwogfQpAQCAtMjMxLDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dFZhbHVlKTsKIAogICAgIGlmICghY2hlY2tQcm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywg
b2JqZWN0KSkgewpAQCAtMjQxLDE2ICsyNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7
CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhl
YywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQo
ZGlkU2V0UHJvdG90eXBlLCB2bS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAg
IEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRT
ZXRQcm90b3R5cGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwog
fQogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3Jp
cHRvcik7CkBAIC0yNjEsMTkgKzI2NywyMSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlECiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmpl
Y3QqIGRlc2NyaXB0b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBp
ZiAoIWRpZEdldERlc2NyaXB0b3IpCkBAIC0yODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGRlc2NyaXB0b3JzKTsKICAgICAgICAgZGVzY3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1h
eUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMs
MTkgKzMwMSwyMyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JzKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAtMzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlv
biBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JH
ZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwog
fQpAQCAtMzIyLDggKzMzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBl
eGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0Nywy
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTog
VXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0
eUtleXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpA
QCAtMzYwLDQwICszODAsNDAgQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZQogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2Ny
aXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51
bWVyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVl
OwogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAg
IH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlw
dGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
ZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQp
KSB7CiAgICAgICAgIEpTVmFsdWUgZ2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoIWdldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTQwMywxMiArNDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBk
ZXNjLnNldEdldHRlcihnZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wg
dG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQpAQCAtNDQ1LDcgKzQ2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikp
OwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0
b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7
CkBAIC00NTMsNyArNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29y
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVm
aW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0
KiBwcm9wZXJ0aWVzKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGll
cyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0
aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNj
cmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
cHJvcCA9IHByb3BlcnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkKQEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNW
YWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsKICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pc1ByaXZhdGVOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3JzW2ldLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9i
amVjdDsKQEAgLTUzMSw2ICs1NTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmpl
Y3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0
LT5zZWFsKHZtKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0K
IAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBy
b3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1
cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwog
ICAgICAgICAvLyBjLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJl
dmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTU3NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9y
RnJlZXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhl
Yy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdDsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFt
ZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwx
NCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8v
IGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIHRvIGZhbHNlLgogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAg
ICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMo
b2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2
NDYsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmop
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBh
c09iamVjdChvYmopKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTYzOSw2ICs2NzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1Nl
YWxlZChleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CkBAIC02NzAsMTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAg
Ly8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBv
YmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAg
ICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVj
dCgpKQpAQCAtNjg0LDEyICs3MjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAg
aWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAK
ICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSAr
NzQ2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAv
LyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxz
ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4K
ICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iaik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5z
aWJsZSkpOwogfQpAQCAtNzM1LDEzICs3NzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVN
b2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRp
ZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFt
ZU1vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDgg
KzEwMSw5IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSAr
MTE1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09
IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB9CiB9CkBAIC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1Zh
bHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
CkBAIC0xNjAsNyArMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKQEAgLTE2OSw3ICsxNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhp
c1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsy
NTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJh
YmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpOwpAQCAtMjU0LDkgKzI2OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3Ry
aW5nKCkKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0
IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFs
dWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAv
LyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBA
IC0yOTIsNyArMzA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYg
dG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVj
LCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJp
bmdUYWcuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwpAQCAtMzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0
YWcgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRo
aXNPYmplY3QsIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2Jq
ZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ0LDExICs0NCwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dD
YXNlKENhbGxGCiB7CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4g
ZGVmYXVsdFZhbHVlKCkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1By
aW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldFVuZGVmaW5lZCgpCiBH
ZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3JpcHRvcjo6c2xvd0dldHRlclNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2dldHRlciAmJiAhbV9n
ZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIodm0s
IGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMjMgKzU2LDIzIEBAIFByb3h5Q29u
c3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJveHkucmV2b2NhYmxl
IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSB0YXJnZXQgYW5kIHRo
ZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBcmdMaXN0IGFy
Z3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUg
aGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmpl
Y3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFu
ZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tl
LCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIFBy
b3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0sIFN0cnVjdHUKIFN0cmluZyBQcm94eU9iamVj
dDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBj
b25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgICAgICBpZiAoaXNB
cnJheShleGVjLCB0YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuIHRhcmdldC0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4ZWMpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQs
IEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFuZGxlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTU1LDcg
KzE1Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0
SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwpAQCAtMTY5LDcgKzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZv
cm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiB0cmFwUmVzdWx0OwpAQCAt
MTc3LDggKzE3OCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRl
CiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhpcywgc2xvdC50aGlz
VmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0gMDsKICAgICBzbG90LnNldFZhbHVl
KHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwpAQCAtMjEyLDcgKzIxNSw3IEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5
RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2Fs
bFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFT
Q0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgp
OwpAQCAtMjIxLDcgKzIyNCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxs
KGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09i
amVjdCgpKSB7CkBAIC0yMzEsNyArMjM0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlu
dGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVz
Y3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRh
cmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewpAQCAtMjQ0LDcgKzI0Nyw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklY
TUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRv
bid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQ
cm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENvbWUg
dXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVjYXVz
ZQpAQCAtMjU4LDExICsyNjEsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcjsKICAgICB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBm
YWxzZTsKICAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwKQEAgLTI4MSw3ICsy
ODQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBp
ZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5z
bG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCB0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgZ2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYg
KHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpICYmICF0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMzIwLDcgKzMyMyw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGhhc01ldGhvZCA9IGhhbmRs
ZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMt
PmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3Jt
RGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0zMjksMTcgKzMzMiwxNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNW
YWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaXNQ
cm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Nyw3ICszNTAsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlBy
b3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0
JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSIpKTsKQEAgLTQyMCw3ICs0MjMs
NyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlm
IChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTQzMiwxMCArNDM1LDEwIEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1
dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzMsOCArNDc2LDkgQEAgYm9vbCBQcm94eU9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlYwogYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRl
eENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1
dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDgsNyArNTEyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJn
ZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTE5LDcgKzUy
Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAK
ICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0
PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKQEAgLTU1OCw3ICs1NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBB
U0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94
eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBA
IC01NjksMTQgKzU3MywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
ZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVj
LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3Qo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3Vs
dCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9i
amVjdCIpKTsKQEAgLTYxOSw3ICs2MjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVs
ZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZGVsZXRlUHJv
cGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAg
ICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTYyOSwxMSArNjMz
LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9T
YWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFz
Qm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCkBAIC02NDcsNyArNjUx
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNjkzLDcgKzY5Nyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJwcmV2ZW50
RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwoIidwcmV2ZW50RXh0ZW5zaW9ucycgcHJvcGVydHkg
b2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdl
dCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAt
NzAyLDE2ICs3MDYsMTYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNp
bwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBwcmV2ZW50
RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1
bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
dGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJl
dHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91
bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKQEAgLTc0Niw3ICs3NTAsNyBAQCBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2libGVNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVuc2libGUnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMt
PnRhcmdldCgpOwpAQCAtNzU2LDE1ICs3NjAsMTUgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2Fs
bChleGVjLCBpc0V4dGVuc2libGVNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNUYXJnZXRFeHRlbnNpYmxl
ID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sICE9IGlzVGFyZ2V0RXh0ZW5zaWJs
ZSkgewpAQCAtODEzLDE0ICs4MTcsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmlu
ZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2Qo
ZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZpbmVQcm9wZXJ0
eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blByb3BlcnR5KCk7CiAKICAgICBKU09iamVj
dCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTgyOCwxMSArODMyLDExIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3Jp
cHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQ
cm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wg
PSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtODQwLDExICs4NDQsMTEgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZp
bmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRv
RmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5j
b25maWd1cmFibGUoKTsKIApAQCAtOTAyLDcgKzkwNiw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMi
KSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTkxMyw3ICs5MTcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0T3duUHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9
IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQcm9wZXJ0eU5hbWVNb2Rl
IHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKQEAgLTk0MSw3ICs5NDUsNyBA
QCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgICAgICAgICBy
ZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUu
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRv
RXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwo
KSk7CkBAIC05NTAsMjEgKzk1NCwyMSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFy
cmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVy
YWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5
LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFBy
b3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogCiAgICAgUHJvcGVydHlOYW1lQXJy
YXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxVbmlx
dWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0
IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdl
dC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRv
cik7IAotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChpc1By
b3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKICAgICAgICAgICAg
IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7CkBAIC0xMDUz
LDcgKzEwNTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBlT2YiKSwgQVNDSUlM
aXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtMTA2NCwxMSArMTA2OCwxMSBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90eXBlKTsKICAgICBK
U1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF0
cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDc4LDEzICsxMDgyLDEzIEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0
ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2FtZVZh
bHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdzZXRQcm90b3R5cGVP
ZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4gaXRzIHRhcmdldCBpcyBub24tZXh0ZW5zaWJsZSBh
bmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50
IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC0x
MTE4LDcgKzExMjIsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBl
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxs
RGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVND
SUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTExMjgsNyArMTEz
Miw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYm
ICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBAIC0xMTM3LDEzICsxMTQxLDEzIEBAIEpTVmFsdWUg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICB9CiAKICAgICBib29sIHRhcmdl
dElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAg
IHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJn
ZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0
KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdl
dCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7CkBAIC0xMzksMTQg
KzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
aWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVBy
b3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIFJlZmxlY3QuZGVm
aW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Q
cm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpA
QCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHJl
Y2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Iikp
KTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CkBAIC0y
MjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09i
amVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAg
ICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9u
cyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVz
dWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJn
ZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTMw
Nyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAK
ICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQ
cm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3Rv
dHlwZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUgUmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUq
IGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZsYWdz
OwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmluZyA9IGZsYWdzLnRvU3RyaW5nKGV4ZWMpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBmbGFnc1N0cmluZyk7CiAgICAgaWYgKCFmbGFn
c1N0cmluZykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIH0KIAogICAgIFJlZ0V4cEZsYWdzIHJlc3VsdCA9
IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAgICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3Mp
CiAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgcGF0dGVy
biA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBwYXR0ZXJuQXJn
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NB
cmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4
ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogfQpAQCAtMjU1LDYg
KzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1
ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwYXR0ZXJuQXJnID0gYXJn
cy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0gYXJncy5hdCgxKTsKIApAQCAtMjYzLDcg
KzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKIAogICAg
IGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25zdHJ1Y3RBc1JlZ2V4cCAmJiBmbGFn
c0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBwYXR0
ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoY2FsbGVlID09
IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBp
cyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBA
IC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4
ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHApIHsKICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBq
c0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVybkFyZyktPnJlZ0V4cCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTIgKzEzMywxMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnJlCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1
cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhl
Y1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAw
OwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgpIHsKQEAgLTIzMywxNCArMjMzLDE0IEBAIEpTVmFs
dWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVjU3RhdGUKIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJlZ0V4
cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwo
KSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwotCiAgICAgc2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKQEAgLTI0OSwxNCArMjQ5LDE0
IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QKICAgICBpZiAocmVn
RXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcy5sZW5n
dGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAgICAgKnZtLCBl
eGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgICAgICB2
bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhwLAogICAgICAgICAg
ICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgICAgIHJldHVybiBh
ZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJpbmdMZW5ndGgsIGVuZCk7CiAgICAgICAgICAgICB9
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAqdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKKyAgICAgICAgdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgWyZd
IChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGVuZCArIDE7CiAg
ICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTks
MTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
bXB0eVN0cmluZygpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBp
ZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFn
cyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29u
c3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSArMTg5LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NT
dHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBzdHJpbmdbMF0gPSAwOwogCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFs
dWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgc3Rp
Y2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhpc09i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgZmxhZ3Mg
PSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycsIHNvdXJjZSwgJy8n
LCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NT
dHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkpOwpAQCAtNDcyLDEyICs0NzMs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwpAQCAtNTg0LDcgKzU4Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFu
ZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNT
dHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAg
ICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5w
dXQuaXNOdWxsKCkpOwogCkBAIC01OTksNyArNjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4K
ICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpT
U2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQp
OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcg
Kzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBj
b2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CkBAIC0xMjEsMTAgKzEyMSwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3Bl
cnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAogICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJy
ZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7
CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxw
dHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZp
bmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAog
ICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAg
ICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJl
Z0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2Jh
bCkgewogICAgICAgICAvLyBFUzUuMSAxNS41LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4
cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVu
Z3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1
bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQo
KSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcgKzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7
CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJp
bmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFy
Y2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAg
Ly8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNp
bmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVj
KSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgsMTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFs
dWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwxMSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNo
VmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1
ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShl
eGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmlu
ZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEyICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRj
aFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFj
ZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJl
cGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEs
MTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3Ry
aW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDggKzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2go
ZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1l
bnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBh
cmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwy
MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAg
ICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBp
dCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5p
c051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlm
IGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMg
dGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4KQEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJh
dG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEw
LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5s
ZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0
cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0xMzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Q29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcm
IHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcg
KzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsx
NTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9
CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8
L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxl
KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1
OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7
CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAi
PC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsxNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyAr
MTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1Rv
U2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhw
cmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0
byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAg
ICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0
NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxl
bmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0
aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlm
IChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90
IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9T
ZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMsNyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9z
aXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQ
b3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9T
ZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmluZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3Rh
cnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0g
c3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3Rh
cnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhl
YyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2Vh
cmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcg
KzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIw
MTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2Ug
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFs
aXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJn
dW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAg
Q2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJp
bmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
bGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEy
ICs0NiwxMyBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAg
ICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRl
bXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVj
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewpAQCAtNjAsMTIgKzYxLDEyIEBAIEpTQXJy
YXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVt
cGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3
T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi0jaWYgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKLQotbmFt
ZXNwYWNlIHsKLQotLy8gTG9ncyBhbGwgVGhyb3dTY29wZSBhY3Rpdml0eSB0byBoZWxwIGRlYnVn
IHRoZSBzb3VyY2Ugb2YgYSB2ZXJpZmljYXRpb24gZmFpbHVyZS4KLWJvb2wgdHJhY2VPbiA9IGZh
bHNlOwotCi0vLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysg
c3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5nLgotYm9vbCB0
cmFjZVdpdGhTdGFja1RyYWNlcyA9IGZhbHNlOwotCi0vLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1
bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KLWJvb2wgdmVy
aWZpY2F0aW9uT24gPSBmYWxzZTsKLQotdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7Ci19OworI2lm
IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiAvKgogICAgIFRocm93U2Nv
cGUgdmVyaWZpY2F0aW9uIHdvcmtzIHRvIHNpbXVsYXRlIGV4Y2VwdGlvbiB0aHJvd3MgYW5kIGNh
dGNoIGNhc2VzIHdoZXJlCkBAIC0yMjAsNyArMjA3LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9
IDA7CiAKICAgICBiLiBUdXJuIG9uIFRocm93U2NvcGUgdHJhY2luZwogIAotICAgICAgIEp1c3Qg
c2V0IHRyYWNlT249dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWls
ZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAorICAgICAgIEp1c3Qgc2V0IFZNOjptX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzPXRydWUgaW4gdGhlIFZNLCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91
IHNob3VsZAogICAgICAgIHNlZSBhIHRyYWNlIG9mIFRocm93U2NvcGVzIGJlaW5nIGVudGVyZWQg
YW5kIGV4aXRlZCBhcyB3ZWxsIGFzIHRoZWlyIGRlcHRoIGUuZy4KIAogICAgIFRocm93U2NvcGUg
WzFdIEVudGVyOiBsbGludF9zbG93X3BhdGhfamZhbHNlIEAgL1ZvbHVtZXMvRGF0YS93czYvT3Bl
blNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEw
MzIKQEAgLTIzNCw3ICsyMjEsNyBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKIAogICAgIGMu
IFR1cm4gb24gVGhyb3dTY29wZSBzdGFjayBkdW1wcwogCi0gICAgICAgSnVzdCBzZXQgdHJhY2VX
aXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVi
dWlsZC4KKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcz10cnVlIGF0IGluIHRoZSBWTSwgYW5kIHJlYnVpbGQuCiAgICAgICAgVGhlcmVhZnRl
ciwgeW91IHNob3VsZCBzZWUgYSBzdGFjayB0cmFjZXMgYXQgdmFyaW91cyByZWxldmFudCBUaHJv
d1Njb3BlIGV2ZW50cy4KIAogICAgIGQuIFVzaW5nIHRocm93U2NvcGVQcmludElmTmVlZENoZWNr
KCkKQEAgLTI0OSwzMyArMjM2LDE4IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgICAg
IGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVkIHRoZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
aygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCiAqLwogCi1UaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZN
JiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxvY2F0aW9uKQotICAgIDogbV92bSh2bSkKLSAgICAs
IG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRocm93U2NvcGUpCi0gICAgLCBtX2xvY2F0aW9uKGxv
Y2F0aW9uKQotICAgICwgbV9kZXB0aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUt
Pm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2NvcGU6OlRocm93U2NvcGUoVk0mIHZtLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2Vw
dGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BU
aHJvd1Njb3BlID0gdGhpczsKLQotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2co
IjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAi
LCBsb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0
aW9uLmxpbmUpOwotICAgICAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAg
ICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LQotICAgICAgICBpZiAodHJhY2VXaXRoU3RhY2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBv
cnRCYWNrdHJhY2UoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1Nh
dGlzZmllZChTaXRlOjpTY29wZUVudHJ5KTsKKyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIG1fZGVwdGgs
IG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAKICAgICBpZiAoIW1faXNSZWxlYXNlZCkKLSAgICAg
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsK
KyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRp
b25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBJZiB3ZSByZWxlYXNlZCB0aGUgc2NvcGUsIHRoYXQgbWVhbnMgd2UncmUg
bGV0dGluZyBvdXIgY2FsbGVycyBkbyB0aGUKICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrLiBI
b3dldmVyLCBiZWNhdXNlIG91ciBjYWxsZXIgbWF5IGJlIGEgTExJbnQgb3IgSklUCkBAIC0yOTcs
MjcgKzI2OSwyNSBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAgICAgIHdpbGxCZUhh
bmRsZUJ5TExJbnRPckpJVCA9IHRydWU7CiAgICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxM
SW50T3JKSVQpCi0gICAgICAgIHNpbXVsYXRlVGhyb3coKTsKKyAgICAgICAgc2ltdWxhdGVUaHJv
dyhFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQpOwogCi0gICAgaWYgKHRyYWNlT24pIHsK
LSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9k
ZXB0aCwgIl0gRXhpdDogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0
aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lKTsKKyAgICBpZiAobV92bS5tX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpU
aHJvd1Njb3BlRXhpdCwgbV9sb2NhdGlvbik7CiAgICAgICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQogICAgICAgICAgICAgZGF0YUxvZygiLCB3aXRoIHJldGhyb3ciKTsKICAgICAg
ICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICAgICBkYXRhTG9nKCIs
IG5lZWRzIGNoZWNrIik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAKLSAgICAgICAgaWYgKHRy
YWNlV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzKQogICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAg
ICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93U2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CiB9CiAK
IHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNlcHRpb24oKSAmJiBtX3ZtLmV4Y2Vw
dGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlv
bik7CiAgICAgCiAgICAgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpA
QCAtMzI1LDcgKzI5NSw3IEBAIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGVycm9yKQogewogICAgIGlmICghZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHluYW1pY0Nh
c3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxsKCkpKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25D
aGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2RlcHRo
LCBtX2xvY2F0aW9uKTsKICAgICAKICAgICByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBlcnJvcik7CiB9CkBAIC0zMzMsNyArMzAzLDcgQEAgSlNWYWx1ZSBUaHJvd1Njb3BlOjp0aHJv
d0V4Y2VwdGlvbihFeGVjUwogSlNPYmplY3QqIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8
RXhjZXB0aW9uKj4ob2JqKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7
CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KQEAg
LTM0MSw1NSArMzExLDI0IEBAIEpTT2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihF
eGUKIHZvaWQgVGhyb3dTY29wZTo6cHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiB7CiAgICAgaWYgKG1fdm0u
bV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50Kyss
ICI+IE5lZWQgZXhjZXB0aW9uIGNoZWNrIGF0ICIsIGZ1bmN0aW9uTmFtZSwgIiBAICIsIGZpbGUs
ICI6IiwgbGluZSwgIlxuIik7CisgICAgICAgIGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpOZWVk
RXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oZnVuY3Rpb25OYW1lLCBmaWxl
LCBsaW5lKSk7CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6c2ltdWxhdGVUaHJvdygpCit2b2lkIFRo
cm93U2NvcGU6OnNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQgZXZlbnQpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisgICAgbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRF
dmVudCA9IGV2ZW50OwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb24gPSBt
X2xvY2F0aW9uOwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGggPSBtX2RlcHRo
OwogICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSB0cnVlOwogCi0gICAgaWYgKHRyYWNl
T24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBb
IiwgbV9kZXB0aCwgIl0gVGhyb3cgZnJvbTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iKTsKLSAgICAg
ICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRp
b25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcykKICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KIH0KIAot
dm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChUaHJv
d1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAgaWYgKCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7
Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0
aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0aW9uID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9p
bnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRvIHNpdGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4g
Y29uc3QgY2hhciogewotICAgICAgICAgICAgc3dpdGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBj
YXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0g
ICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRXhpdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
IkV4aXQiOwotICAgICAgICAgICAgY2FzZSBTaXRlOjpUaHJvdzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsK
LQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sg
dmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAgICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20g
VGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAiXSAiLCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFp
bExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIsIGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZh
aWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBU
aHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAg
ICAgICAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRp
b25DaGVjayk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklG
SUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4OCArMjYs
NjQgQEAKICNpZm5kZWYgVGhyb3dTY29wZV9oCiAjZGVmaW5lIFRocm93U2NvcGVfaAogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25T
Y29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNP
YmplY3Q7CiAKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2lmIEVOQUJM
RShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCi1jbGFzcyBUaHJvd1Njb3BlIHsKK2Ns
YXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBUaHJvd1Njb3BlTG9jYXRpb24pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9u
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyb3dTY29wZSgpOwogCiAgICAgVGhyb3dTY29w
ZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CiAgICAgVGhyb3dTY29wZShUaHJvd1Njb3Bl
JiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhj
ZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIAotICAgIGlubGluZSBFeGNlcHRp
b24qIGV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KKyAgICB2b2lk
IHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpOwogCiBwcml2YXRlOgotICAgIHZvaWQgc2ltdWxh
dGVUaHJvdygpOworICAgIHZvaWQgc2ltdWxhdGVUaHJvdyhFeGNlcHRpb25FdmVudCk7CiAKLSAg
ICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAgICBTY29wZUVudHJ5LAotICAgICAgICBTY29wZUV4
aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsKLSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0gICAgVk0mIG1fdm07Ci0gICAgVGhyb3dTY29wZSog
bV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9uOwotICAg
IHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9vbCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9OwogfTsK
IAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKLSAgICBKU0M6OlRocm93U2Nv
cGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9f
LCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNlcHRpb25F
dmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKSkKIAogI2RlZmlu
ZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjayhzY29wZV9fKSBcCiAgICAgc2NvcGVfXy5wcmlu
dElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQogCi0jZWxzZSAv
LyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7Citj
bGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBU
aHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIEFMV0FZU19JTkxJTkUg
VGhyb3dTY29wZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCiAgICAgeyB9
CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CisgICAgVGhyb3dT
Y29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9
Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0gICAgCi0g
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9Ci0g
ICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFs
dWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9Owog
CiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NPUEUodm1fXykgXAogICAgIEpTQzo6VGhyb3dTY29w
ZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQor
I2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0K
LSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQotICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlv
bk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxlKQotICAgICAgICAsIGxpbmUobGluZSkKLSAgICB7
IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07Ci0gICAg
Y29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBsaW5lIHsgMCB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Myw0ICs4NzMsMjYgQEAgc2l6ZV90IFZNOjpj
b21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9u
RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0
aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9p
bnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4
Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlv
biB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhy
b3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRl
cHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAg
fQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtNDgsNyArNTAsNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNs
dWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKQEAgLTgyLDYgKzgzLDcgQEAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247Citj
bGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2Zp
bGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTA5LDcgKzExMSw2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhy
b3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC00NDAsMTIgKzQ0
MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAg
IEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxG
cmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAg
RXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9u
OyB9CkBAIC02NDEsMTEgKzY0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICBtX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKICAgICAgICAgbV9sYXN0RXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0K
KyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9
CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wg
bV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKQEAgLTY3MCwxMSArNjc1LDIzIEBAIHByaXZhdGU6
CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlv
biogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShUSFJPV19TQ09QRV9W
RVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29wZSogbV90b3BUaHJvd1Njb3BlIHsgbnVsbHB0ciB9
OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsK
KyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICBFeGNlcHRpb25T
Y29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7IG51bGxwdHIgfTsKKyAgICBFeGNlcHRpb25FdmVu
dCBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudDsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9u
IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOwogICAgIHVuc2lnbmVkIG1fc2ltdWxhdGVk
VGhyb3dQb2ludERlcHRoIHsgMCB9OwogICAgIG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25D
aGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBMb2dzIGFsbCBleGNlcHRpb24gYWN0aXZpdHkgdG8g
aGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgYm9v
bCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAgIC8vIEEgbW9yZSB2ZXJi
b3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVn
aWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcuCisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzIHsgZmFsc2UgfTsKKworICAgIC8vIERpc2FibGVkIHRlbXBvcmFy
aWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRpb24gZmFpbHVyZXMgYXJlIGZpeGVkLgorICAg
IGJvb2wgbV92ZXJpZnlFeGNlcHRpb25FdmVudHMgeyBmYWxzZSB9OworCisgICAgdW5zaWduZWQg
bV9leGNlcHRpb25FdmVudENvdW50IHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fZmFpbE5l
eHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwpAQCAtNzAwLDYgKzcxNywxMCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeTsKIAorICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBw
dXJwb3NlIG9ubHkuCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIENh
dGNoU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEV4Y2VwdGlvblNjb3BlOwogICAgIGZyaWVuZCBj
bGFzcyBUaHJvd1Njb3BlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1
Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFw
U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUo
ZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7CiAK
ICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRl
cmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlm
ICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3
ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdl
YWtTZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgw
KTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNW
YWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxs
RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDkgKzMwMSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewogICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBkYXRhTG9nKGFyZ1N0cik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgs
OCArOTE4LDggQEAKICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5k
ZWYgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklGSUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1df
U0NPUEVfVkVSSUZJQ0FUSU9OICghZGVmaW5lZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgorI2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNo
IGFsbG9jYXRvciB0byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBp
ZiB0aGUgYXNzZW1ibGVyIGlzIGNvbXBpbGVkIGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFy
cgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFyS2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpT
VmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09OUGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVk
OiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
OSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4g
b2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw3
ICs4NTcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAg
Ly8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0
aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlm
ICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsK
KyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VUaHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVl
KGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg3MSw3ICs4NzMsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQgdmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBr
ZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBA
QCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVk
V29ybGQpKTsKKyAgICBWTSYgdm0gPSBleGVjLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1Zh
bHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAg
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9p
c29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUy
OSw5IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdM
aXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0df
RVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlv
bk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0g
aXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFj
ZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAog
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1
aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xODgsMTUgKzE5MCwxOCBAQCBib29s
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRD
b250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIAogICAgIC8vIExvb2t1cCB0
aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUg
cmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFj
ZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwz
MiArMjE0LDMyIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAg
ICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVz
KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
bV92YWx1ZXMpKTsKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1p
bi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1f
bWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAg
ICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFp
bGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiBy
ZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFs
dWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3Qg
PSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6
ZV90IGluZGV4LCBEaWN0aQogCiBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0
cmluZyYgdmFsdWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9v
bCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB2YWx1ZSA9IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVy
dGllc0FzU3RyaW4KIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRp
YWxpemVyT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNT
dGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSgpKTsKQEAgLTY5LDEwICs3MSwxMCBAQCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRp
ZXNBc1N0cmluCiAgICAgICAgIGlmIChzdHJpbmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
ICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFs
dWUpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxMyArOTAsMTQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFs
TwogCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
dm0uYXBpTG9jaygpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBhdXRvJiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25l
ZCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJy
YXkuYXQoaSkuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBw
bGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24o
c3RhdHVzLCBuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwpAQCAtODgsMTkgKzg4LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNl
bGVjdGlvbihzdGF0dXMsIG5ld1NoaXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVt
cywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1
LDExIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMCkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlv
bihuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0
MywxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpT
QXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01
Niw4ICs1OSwxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2
b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0
byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNM
ZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywg
ZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VChibG9iUGFydHMpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRp
bmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGlu
Z3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0
IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUi
LCB0eXBlKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0g
PSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAo
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3
ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAg
ICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBl
bmRpbmdzKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFu
ZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSog
Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxw
dHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90
IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291
bnQ7ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5
QVNDSUkoKSkgewpAQCAtMTA2LDEyICsxMDYsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29y
aXRobShKU0RpY3Rpb25hcgogICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRv
IHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUu
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0
KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJoYXNoIik7CiAKICAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBv
YmplY3QsICJoYXNoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1Zh
bHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBpdkRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
ZXhlYywgaXYsIGl2RGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgaWYgKGl2RGF0YS5zZWNvbmQgIT0gMTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRh
dGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKQEAgLTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0
aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVu
Z3RoID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2Up
OwpAQCAtMTg5LDEwICsxOTEsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRP
YmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwg
cmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkg
anNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlm
ICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVz
dWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICByZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFy
eS5nZXQoImxlbmd0aCIsIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsy
MzgsMTYgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMp
OwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUs
IHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBG
aWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3Rh
dGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVl
ID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50
Iik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVp
bnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25l
bnRWYWx1ZSk7CkBAIC0yNzksMTMgKzI4MSwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1
ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0Fs
Z29yaXRobVJzYU9hZXBQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGlj
dGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdl
dEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVu
dDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAg
IEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgp
LCAibGFiZWwiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5
MywxMCArMjk1LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4K
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgbGFiZWxEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQogCiAgICAgcmVzdWx0LT5sYWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBs
YWJlbERhdGEuc2Vjb25kKTsKIApAQCAtMzE2LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
JnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBz
dWNjZXNzID0gZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFz
aFJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVj
dGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNP
TihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYg
KCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQg
YW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24uCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0
cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5
IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEg
Ym9vbGVhbiB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjpKU0NyeXB0b0tleQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUganNvblZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNv
blZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBr
ZXlPcHMtPmdldEluZGV4KG1fZXhlYywgaSk7CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9u
OwogICAgICAgICAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRy
aWJ1dGUgY291bGQgbm90IGJlIHByb2Nlc3NlZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0s6OnJlY29uYwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJpbmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2
NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
ayIsIGtleUJhc2U2NFVSTCkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90
IHByZXNlbnQgaXMgSldLIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
MjAsNyArNDIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwog
ICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkg
ewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICgh
Z2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4
cG9uZW50KSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlz
c2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1
cykpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBl
eHBvbmVudCk7CiAgICAgfQpAQCAtNDQ2LDM4ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQ
cmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUlu
Zm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlm
ICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAi
LCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVu
dCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVj
LCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwg
cHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JG
cm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3Rv
ckNSVEV4cG9uZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50KTsKICAgICB9CiAKICAgICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAg
aWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhl
clByaW1lSW5mb0pTQXJyYXkpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25l
bnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAg
ICAgfQpAQCAtNDg1LDI0ICs0ODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+
IEpTQ3J5cHRvSwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0Fy
cmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gaW5mbzsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUlu
Zm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMsIGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJKV0sgXCJvdGhcIiBhcnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5w
cmltZUZhY3RvcikpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1l
IGZhY3RvciBmb3IgYSBwcmltZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJW
ZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9y
Q1JURXhwb25lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0
b3IgQ1JUIGV4cG9uZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0Qmln
SW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0
aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUx
OSw3ICs1MTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAK
ICAgICBTdHJpbmcgandrS2V5VHlwZTsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1
aXJlZCBKV0sgXCJrdHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtNTQ5LDYgKzU0OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZv
ck9jdGV0U2VxdWVuY2UoRXgKIAogc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50
cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMm
IGRhdGEsIEpTQzo6SlNPYmplY3QqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRv
SlNPTihleGVjLCByZXN1bHQsICJrdHkiLCAiUlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJl
c3VsdCwgIm4iLCBiYXNlNjRVUkxFbmNvZGUoZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pT
T04oZXhlYywgcmVzdWx0LCAiZSIsIGJhc2U2NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsK
QEAgLTU3MCw5ICs1NzMsOCBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRz
KEpTCiAgICAgaWYgKGRhdGEub3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBk
YXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZv
cygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBKU09iamVjdCoganNQcmltZUlu
Zm8gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0
aWMgdm9pZCBhZGRKV0tBbGdvcml0aG1Ub0pTT04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2Fn
ZXNUb0pTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAg
LTczOCwxMyArNzQxLDEzIEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNl
cmkKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAK
ICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04oZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJl
c3VsdCwgImV4dCIsIGtleS5leHRyYWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihl
eGVjLCByZXN1bHQsIGtleS51c2FnZXNCaXRtYXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4o
KmtleURhdGEpKQpAQCAtNzU1LDcgKzc1OCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OnNlcmkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiS2V5IGRvZXNuJ3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgVk0m
IHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIW1f
Y29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTEgKzgwLDEyIEBA
IFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIGF1dG8mIHN0
YXRlID0gKmNvbnRleHQtPmV4ZWNTdGF0ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KSwgdm0sIHN0YXRlLCBtX2NvbnN0cnVjdG9yLmdldCgpLCBsb2NhbE5hbWUpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBlbGVtZW50KTsKICAgICBpZiAoIWVsZW1l
bnQpIHsKLSAgICAgICAgYXV0byogZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IEFTU0VSVChleGNlcHRpb24pOwogICAgICAgICBpZiAoc2hvdWxkQ2xlYXJFeGNlcHRpb24gPT0g
U2hvdWxkQ2xlYXJFeGNlcHRpb246OkNsZWFyKSB7Ci0gICAgICAgICAgICBzdGF0ZS5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgICAgICAgICBhdXRvKiBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2Vw
dGlvbigpOworICAgICAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTExMCw3ICsxMTIsNyBAQCBzdGF0aWMgUmVmUHRyPEVs
ZW1lbnQ+IGNvbnN0cnVjdEN1c3RvbUVsCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29v
a2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uQ29u
c3RydWN0KCZkb2N1bWVudCwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSk7CiAgICAgSlNW
YWx1ZSBuZXdFbGVtZW50ID0gY29uc3RydWN0KCZzdGF0ZSwgY29uc3RydWN0b3IsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3MpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ2FsbEZ1bmN0aW9uKGNvb2tpZSwgJmRvY3VtZW50KTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoIW5ld0VsZW1lbnQuaXNFbXB0eSgpKTsKQEAgLTE2
Niw3ICsxNjgsNyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsCiAg
ICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoY29udGV4dCwgKm1faXNvbGF0ZWRX
b3JsZCk7CiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOwpAQCAtMTg1LDcgKzE4Nyw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlOjp1cGdyYWRlRWwKIAogICAgIG1fY29uc3RydWN0aW9uU3RhY2sucmVtb3ZlTGFzdCgpOwog
Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgZWxlbWVudC5zZXRJc0ZhaWxlZEN1c3RvbUVsZW1l
bnQoKnRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHN0YXRpYyBKU09iamVjdCogZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWMKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGNhbGxi
YWNrID0gcHJvdG90eXBlLmdldCgmc3RhdGUsIGlkKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKGNhbGxiYWNrLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtODgsNyArODgsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5OjpkZWZpbmUoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIEF0b21p
Y1N0cmluZyBsb2NhbE5hbWUoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0
YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3JWYWx1
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpOwpAQCAtMTE4LDcgKzExOCw3IEBAIEpTVmFs
dWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICB9CiAKICAgICBKU1ZhbHVl
IHByb3RvdHlwZVZhbHVlID0gY29uc3RydWN0b3ItPmdldCgmc3RhdGUsIHZtLnByb3BlcnR5TmFt
ZXMtPnByb3RvdHlwZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIGlmICghcHJvdG90eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ3VzdG9tIGVsZW1lbnQg
Y29uc3RydWN0b3IncyBwcm90b3R5cGUgbXVzdCBiZSBhbiBvYmplY3QiKSk7CkBAIC0xMjksMjUg
KzEyOSwyNSBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAKICAg
ICBpZiAoYXV0byogY29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2so
c3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb25u
ZWN0ZWRDYWxsYmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0Q29ubmVjdGVk
Q2FsbGJhY2soY29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIGlmIChhdXRvKiBkaXNjb25uZWN0ZWRDYWxsYmFjayA9IGdl
dEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImRpc2Nvbm5lY3RlZENhbGxiYWNrIikpKQogICAgICAgICBlbGVt
ZW50SW50ZXJmYWNlLT5zZXREaXNjb25uZWN0ZWRDYWxsYmFjayhkaXNjb25uZWN0ZWRDYWxsYmFj
ayk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYg
KGF1dG8qIGFkb3B0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwg
cHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImFkb3B0ZWRDYWxs
YmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0QWRvcHRlZENhbGxiYWNrKGFk
b3B0ZWRDYWxsYmFjayk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgYXV0byogYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVu
dENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKSB7
CiAgICAgICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0
YXRlLCBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJvYnNlcnZlZEF0dHJpYnV0ZXMiKSkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAg
ICAgZWxlbWVudEludGVyZmFjZS0+c2V0QXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGF0dHJpYnV0
ZUNoYW5nZWRDYWxsYmFjaywgKnZhbHVlKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBzdGF0aWMgSlNW
YWx1ZSB3aGVuRGVmaW5lZFByb21pc2UoRXhlY1N0CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUp
KTsKIAogICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUoc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRlKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghdmFs
aWRhdGVDdXN0b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQoc3RhdGUsIGxvY2FsTmFtZSkp
CkBAIC0xOTEsMTMgKzE5MSwxNSBAQCBzdGF0aWMgSlNWYWx1ZSB3aGVuRGVmaW5lZFByb21pc2Uo
RXhlY1N0CiAKIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OndoZW5EZWZpbmVkKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
c3RhdGUudm0oKSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0gKmpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAg
ICAgYXV0byYgcHJvbWlzZURlZmVycmVkID0gKkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0KTsKICAgICBKU1ZhbHVlIHByb21pc2UgPSB3aGVuRGVmaW5lZFBy
b21pc2Uoc3RhdGUsIGdsb2JhbE9iamVjdCwgd3JhcHBlZCgpKTsKIAotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
ICAgICAgICAgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9taXNlRGVmZXJyZWQpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVy
biBwcm9taXNlRGVmZXJyZWQucHJvbWlzZSgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksOCArMTE5LDExIEBAIFN0cmluZyB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbEMKIAogU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9OwogICAgIFN0cmlu
Z1ZpZXcgdmlldyB7IHN0cmluZyB9OwogCkBAIC0xODcsMTAgKzE5MCwxMSBAQCBkb3VibGUgdmFs
dWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFJFTEVB
U0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uID0ganNEeW5hbWljQ2FzdDxFeGNlcHRpb24qPihleGNlcHRpb25WYWx1
ZSk7CiAgICAgaWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZXhlYy0+bGFz
dEV4Y2VwdGlvbigpOworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CiAg
ICAgICAgIGlmICghZXhjZXB0aW9uKQogICAgICAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEV4Y2VwdGlvbjo6RG9Ob3RDYXB0
dXJlU3RhY2spOwogICAgIH0KQEAgLTIwMCwxNSArMjA0LDE4IEBAIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlMKIAogdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQs
IEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOwogICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhl
Yy0+dm0oKSk7CiAKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRl
U2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxT
dGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKIAogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0g
anNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvdyo+KGdsb2JhbE9iamVjdCkpIHsKQEAgLTIzOSw4ICsy
NDYsOCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAKICAgICAg
ICAgLy8gV2UgbmVlZCB0byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJv
d24gaW4gdGhlIHRvU3RyaW5nKCkgY2FsbCBhYm92ZS4KICAgICAgICAgLy8gcmVwb3J0RXhjZXB0
aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJMYXN0RXhjZXB0
aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHZtLmNsZWFy
TGFzdEV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKQEAgLTI1Niw4ICsyNjMsMTAgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBFeAogCiB2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
KQogewotICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTM0MSw3ICszNTAs
NyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBpZiAoIWVjIHx8IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmICghZWMgfHwg
c2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRocm93RXhjZXB0aW9u
KGV4ZWMsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMpKTsKQEAgLTM1Miw3ICsz
NjEsNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlCiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBpZiAoIWVjLmNvZGUgfHwgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KCFlYy5jb2RlIHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjLmNv
ZGUsIGVjLm1lc3NhZ2UpKTsKQEAgLTM2MiwxNSArMzcxLDE3IEBAIHZvaWQgc2V0RE9NRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiBleGUKIAogYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNh
bGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJ
TGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFhcHBseU1ldGhvZC5p
c1VuZGVmaW5lZCgpOwpAQCAtNTA5LDcgKzUyMCw3IEBAIHN0YXRpYyBpbmxpbmUgVCB0b1NtYWxs
ZXJJbnQoRXhlY1N0YXRlJiAKICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewpAQCAtNTU2LDcgKzU2Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYKICAgICB9CiAKICAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewpAQCAtNjQyLDExICs2NTMsMTQg
QEAgdWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYQogLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCiBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CiAKICAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBr
TWluSW50MzIsIGtNYXhJbnQzMik7CiB9CkBAIC02NzIsMjcgKzY4NiwzNiBAQCB1aW50MzJfdCB0
b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsCiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9X
ZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKIHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
dmFsdWUuaXNVSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CiAKICAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBrTWF4VUludDMyKTsKIH0KIAogaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJ
bnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKIH0KIAogdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwg
eCwgMCwga0pTTWF4SW50ZWdlcik7CiB9CkBAIC04NTYsMjEgKzg3OSwyMSBAQCB2b2lkIHJlcG9y
dERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4CiAKIHZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmco
bWVzc2FnZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7CiB9CiAK
IHZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIs
ICZtZXNzYWdlU3RyaW5nKSk7CiB9CiAKIHZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9K
U1NlcXVlbmNlKEpTQzo6CiAgICAgfQogCiAgICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0g
b2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0
KiB0b0pTU2VxdWVuY2UoSlNDOjoKICAgICB9CiAKICAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50
b1VJbnQzMigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICByZXR1cm4gb2JqZWN0OwpAQCAtNTU5LDggKzU1OSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwpAQCAtNTY5LDggKzU3
MiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlCiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxUPj4mIHZlY3RvcikKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iu
c2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5k
ZWZpbmVkKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgdmVjdG9yW2ldLmdldCgpKSk7CkBAIC02NTQsMTQgKzY2MCwxNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gSlNDOjpKU1ZhbHVlIGpzRnJvemVuQXJyYXkoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKSB7CiAgICAgICAgIGxpc3QuYXBwZW5kKEpTVmFsdWVUcmFpdHM8
VD46OmFycmF5SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBu
dWxscHRyLCBnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZShleGVjLCBhcnJheSk7CiB9CkBAIC03MDIsMzIgKzcxMSw0MCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTmF0aXZlVmFsdWVUCiB0ZW1wbGF0ZTw+IHN0cnVjdCBO
YXRpdmVWYWx1ZVRyYWl0czxTdHJpbmc+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZl
VmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBTdHJpbmcm
IGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlu
ZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICByZXR1cm4g
IWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8dW5zaWdu
ZWQ+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCB1bnNpZ25lZCYgaW5kZXhlZFZhbHVlKQogICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1
ZS50b1VJbnQzMigmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsK
KyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxmbG9hdD4gewogICAgIHN0YXRpYyBpbmxpbmUg
Ym9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUsIGZsb2F0JiBpbmRleGVkVmFsdWUpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvRmxvYXQoJmV4ZWMpOwotICAgICAgICBy
ZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0
aW9uKCk7CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8
ZG91YmxlPiB7CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgZG91YmxlJiBpbmRleGVkVmFsdWUpCiAg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1Zh
bHVlLnRvTnVtYmVyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKQEAgLTc2
NCwxMSArNzgxLDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFZlY3RvcjxUPiB0b05hdGl2ZUEK
ICAgICB9CiAKICAgICBWZWN0b3I8VD4gcmVzdWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZl
eGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJmV4ZWMsIHZhbHVl
LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICBUIGNvbnZlcnRlZFZhbHVlOwotICAgICAgICBpZiAoIU5hdGl2ZVZhbHVl
VHJhaXRzPFQ+OjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUsIGNvbnZlcnRlZFZhbHVlKSkK
KyAgICAgICAgYm9vbCBzdWNjZXNzID0gTmF0aXZlVmFsdWVUcmFpdHM8VD46Om5hdGl2ZVZhbHVl
KCpzdGF0ZSwganNWYWx1ZSwgY29udmVydGVkVmFsdWUpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5oYWRFeGNl
cHRpb24oKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydGVkVmFsdWUpOwogICAgIH0p
OwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDExICs3NSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VUaGlz
VHlwCiB7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJn
dW1lbnRDb3VudCgpID09IDIpOworICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFj
ZU5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhleGVjU3Rh
dGUpOwotICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
X1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGZ1bmN0aW9uTmFt
ZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7
Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZVR5cGVF
cnJvcihleGVjU3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0
ZjgoKS5kYXRhKCksIGZ1bmN0aW9uTmFtZS51dGY4KCkuZGF0YSgpKSkpOwogfQogCkBAIC04Nywx
MSArODksMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYWtlR2V0dGVyVAogewog
ICAgIEFTU0VSVChleGVjU3RhdGUpOwogICAgIEFTU0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA9PSAyKTsKKyAgICBWTSYgdm0gPSBleGVjU3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0g
ZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAg
ICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgYXV0byBhdHRyaWJ1dGVOYW1lID0gZXhl
Y1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBB
U1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlwZUVycm9yKGV4
ZWNTdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCku
ZGF0YSgpLCBhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01H
bG9iYWxPYmplY3RUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgUmVmPEpTR2xvYmFsT2JqZWN0Q2Fs
bGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayht
X2dsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCkBAIC02NCw3ICs2Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6cnVuVGFzayhleGVjLCBtX3Rhc2sp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3Rhc2stPnJ1bihleGVjKTsKLSAgICAgICAg
QVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nv
cGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDUsNyArMjA1LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBpdGVyYXRvckZvckVh
Y2goSlNDOgogICAgICAgICBhcHBlbmRGb3JFYWNoQXJndW1lbnRzKHN0YXRlLCB3cmFwcGVyLT5n
bG9iYWxPYmplY3QoKSwgYXJndW1lbnRzLCB2YWx1ZSk7CiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQod3JhcHBlcik7CiAgICAgICAgIEpTQzo6Y2FsbCgmc3RhdGUsIGNhbGxiYWNrLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJndW1lbnRzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29k
ZShKU0M6OmpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Qcm9taXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTEgKzEw
MCwxNCBAQCB2b2lkIERlZmVycmVkV3JhcHBlcjo6cmVqZWN0KEV4Y2VwdGlvbkNvCiAKIHZvaWQg
cmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTUHJvbWlzZURlZmVycmVkJiBwcm9taXNl
RGVmZXJyZWQpCiB7Ci0gICAgaWYgKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpT
VmFsdWUgZXJyb3IgPSBzdGF0ZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKLSAgICBzdGF0ZS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIEpTVmFsdWUgZXJyb3IgPSBzY29wZS5leGNlcHRpb24oKS0+dmFs
dWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgRGVmZXJyZWRXcmFwcGVy
OjpjcmVhdGUoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCAmcHJvbWlzZURlZmVycmVkKS0+cmVqZWN0
KGVycm9yKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlz
ZS5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDEyICsxNTgsMTUgQEAgdm9pZCByZWpl
Y3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQwogCiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGNh
bGxQcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNQcm9taXNlRGVmZXJy
ZWQqKSkKIHsKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CiAgICAgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVy
cmVkID0gKkpTQzo6SlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QpOwogICAgIHByb21pc2VGdW5jdGlvbigmc3RhdGUsICZwcm9taXNlRGVmZXJyZWQpOwogCiAg
ICAgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBw
cm9taXNlRGVmZXJyZWQpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHBy
b21pc2VEZWZlcnJlZC5wcm9taXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDE0IEBAIGJvb2wgSlNET01TdHJpbmdNYXA6
OmRlbGV0ZVByb3BlcnR5QnlJbmQKIAogYm9vbCBKU0RPTVN0cmluZ01hcDo6cHV0RGVsZWdhdGUo
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NywxMyArMTk3LDE1
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbGwoKQogICAgIHsKICAgICAgICAgUmVmPEpTRE9NV2lu
ZG93TWljcm90YXNrQ2FsbGJhY2s+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhtX2dsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgIFZNJiB2bSA9IG1f
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgICAgIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6cnVuVGFzayhleGVjLCBtX3Rhc2spOwogCi0gICAgICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDYgKzM2OSw5IEBAIGJvb2wgSlNET01XaW5kb3c6
OnByZXZlbnRFeHRlbnNpb25zKEpTT2IKIAogdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogI2lmIEVO
QUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICAvLyBUbyBhdm9pZCBicmVha2luZyBvbGQgd2lk
Z2V0cywgbWFrZSAidmFyIGxvY2F0aW9uID0iIGluIGEgdG9wLWxldmVsIGZyYW1lIGNyZWF0ZQog
ICAgIC8vIGEgcHJvcGVydHkgbmFtZWQgImxvY2F0aW9uIiBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcg
YSBuYXZpZ2F0aW9uICg8cmRhcjovL3Byb2JsZW0vNTY4ODAzOT4pLgpAQCAtMzgyLDcgKzM4NSw3
IEBAIHZvaWQgSlNET01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSYKICNlbmRpZgogCiAg
ICAgU3RyaW5nIGxvY2F0aW9uU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUo
JnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKExvY2F0aW9u
KiBsb2NhdGlvbiA9IHdyYXBwZWQoKS5sb2NhdGlvbigpKQpAQCAtNDA2LDE1ICs0MDksMTggQEAg
SlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0YXRlJiBzdAogCiBKU1ZhbHVlIEpTRE9N
V2luZG93OjpvcGVuKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgSlNWYWx1ZSB0YXJnZXRWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEp
OwogICAgIEF0b21pY1N0cmluZyB0YXJnZXQgPSB0YXJnZXRWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpID8gQXRvbWljU3RyaW5nKCJfYmxhbmsiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSA6IHRhcmdldFZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFN0
cmluZyB3aW5kb3dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPERPTVdpbmRvdz4gb3BlbmVkV2lu
ZG93ID0gd3JhcHBlZCgpLm9wZW4odXJsU3RyaW5nLCB0YXJnZXQsIHdpbmRvd0ZlYXR1cmVzU3Ry
aW5nLCBhY3RpdmVET01XaW5kb3coJnN0YXRlKSwgZmlyc3RET01XaW5kb3coJnN0YXRlKSk7CkBA
IC00NzAsMTAgKzQ3NiwxMCBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2co
RXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIFN0cmluZyB1cmxTdHJpbmcg
PSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBTdHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIERpYWxvZ0hhbmRsZXIgaGFuZGxlcihz
dGF0ZSk7CkBAIC01MTEsMTYgKzUxNywxNiBAQCBzdGF0aWMgSlNWYWx1ZSBoYW5kbGVQb3N0TWVz
c2FnZShET01XaW5kCiAgICAgICAgIH0KICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KHRyYW5zZmVyYWJsZXNBcmdJbmRleCksIG1lc3NhZ2VQb3J0cywg
YXJyYXlCdWZmZXJzKTsKICAgICB9Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgJm1lc3NhZ2VQb3J0cywgJmFy
cmF5QnVmZmVycyk7CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBTdHJpbmcgdGFyZ2V0T3JpZ2luID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmlu
ZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KHRhcmdldE9yaWdp
bkFyZ0luZGV4KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01NDUsNyArNTUxLDcgQEAgSlNWYWx1ZSBK
U0RPTVdpbmRvdzo6c2V0VGltZW91dChFeGVjU3RhdAogCiAgICAgQ29udGVudFNlY3VyaXR5UG9s
aWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQoKSA/IHdyYXBw
ZWQoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IG51bGxwdHI7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9u
OjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgY29udGVudFNlY3VyaXR5
UG9saWN5KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBpZiAoIWFjdGlvbikKQEAgLTU3MCw3ICs1NzYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpz
ZXRJbnRlcnZhbChFeGVjU3RhCiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRT
ZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50
KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbnQgZGVsYXkgPSBz
dGF0ZS5hcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZleGVjKSk7CiAKICAgICBkb3VibGUgc3RhcnRU
aW1lKGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoJmV4ZWMpKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIGRvdWJsZSBlbmRUaW1lKGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMSkudG9OdW1i
ZXIoJmV4ZWMpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC04Nyw3ICs4
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBpZiAo
dmFsdWVBcmd1bWVudC5pc0NlbGwoKSAmJiB2YWx1ZUFyZ3VtZW50LmFzQ2VsbCgpLT5pbmhlcml0
cyhzdGQ6OnJlbW92ZV9wb2ludGVyPEpTQXJyYXlCdWZmZXIqPjo6dHlwZTo6aW5mbygpKSkgewog
CiAgICAgICAgIEFycmF5QnVmZmVyKiBkYXRhID0gdG9BcnJheUJ1ZmZlcih2YWx1ZUFyZ3VtZW50
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIWRhdGEp
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rl
dmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDMyICs0NSwzNSBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6
OkFjY2VsZXJhCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVz
dCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIHhW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJ4IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNh
blByb3ZpZGVYID0gIXhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB4ID0g
eFZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgSlNWYWx1ZSB5VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWSA9ICF5VmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKTsKICAgICBkb3VibGUgeSA9IHlWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgelZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInoiKSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVogPSAh
elZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHogPSB6VmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBp
ZiAoIWNhblByb3ZpZGVYICYmICFjYW5Qcm92aWRlWSAmJiAhY2FuUHJvdmlkZVopCkBAIC04NCwz
MiArODcsMzUgQEAgc3RhdGljIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpSb3RhdGlvbgogICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBh
bHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09i
amVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgSlNWYWx1ZSBhbHBoYVZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFscGhhIikp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3Zp
ZGVBbHBoYSA9ICFhbHBoYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIGFs
cGhhID0gYWxwaGFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgYmV0YVZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJldGEiKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZUJldGEgPSAhYmV0
YVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIGJldGEgPSBiZXRhVmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBKU1ZhbHVlIGdhbW1hVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAiZ2FtbWEiKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZUdhbW1hID0gIWdhbW1hVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgZ2FtbWEgPSBnYW1tYVZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFj
YW5Qcm92aWRlQWxwaGEgJiYgIWNhblByb3ZpZGVCZXRhICYmICFjYW5Qcm92aWRlR2FtbWEpCkBA
IC0xNzAsNiArMTc2LDkgQEAgSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50OjppbnRlcnZhbChF
eAogCiBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb25FdmVudChF
eGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5nIHR5cGUg
PSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAg
IGJvb2wgYnViYmxlcyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3RhdGUpOwogICAg
IGJvb2wgY2FuY2VsYWJsZSA9IHN0YXRlLmFyZ3VtZW50KDIpLnRvQm9vbGVhbigmc3RhdGUpOwpA
QCAtMTc3LDE1ICsxODYsMTUgQEAgSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0RGV2
aWNlTQogICAgIC8vIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUgbnVsbCBvciB1bmRlZmlu
ZWQsIG1hcmsgdGhlbSBhcyBub3QgcHJvdmlkZWQuCiAgICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhl
IHN0YW5kYXJkIEphdmFTY3JpcHQgY29udmVyc2lvbi4KICAgICBSZWZQdHI8RGV2aWNlTW90aW9u
RGF0YTo6QWNjZWxlcmF0aW9uPiBhY2NlbGVyYXRpb24gPSByZWFkQWNjZWxlcmF0aW9uQXJndW1l
bnQoc3RhdGUuYXJndW1lbnQoMyksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNjZWxlcmF0
aW9uPiBhY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5ID0gcmVhZEFjY2VsZXJhdGlvbkFyZ3Vt
ZW50KHN0YXRlLmFyZ3VtZW50KDQpLCBzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9u
UmF0ZT4gcm90YXRpb25SYXRlID0gcmVhZFJvdGF0aW9uUmF0ZUFyZ3VtZW50KHN0YXRlLmFyZ3Vt
ZW50KDUpLCBzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgYm9vbCBpbnRlcnZhbFByb3ZpZGVkID0gIXN0YXRlLmFyZ3VtZW50KDYpLmlzVW5k
ZWZpbmVkT3JOdWxsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rp
b25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGlj
dGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBKU1ZhbHVl
JiBmaW5hbFJlc3VsdCkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEFTU0VSVChpc1ZhbGlk
KCkpOwogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
bV9leGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIGJvb2wgcHJvcGVydHlGb3VuZCA9IG1faW5pdGlh
bGl6ZXJPYmplY3QuZ2V0KCktPmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIFsm
XSAoYm9vbCBwcm9wZXJ0eUZvdW5kLCBQcm9wZXJ0eVNsb3QmIHNsb3QpIC0+IGJvb2wgewpAQCAt
ODYsNyArODgsNyBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvCiAg
ICAgICAgIGZpbmFsUmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uVGhyb3duOwogICAgIHJldHVybiBwcm9wZXJ0eUZvdW5kID8gUHJvcGVydHlG
b3VuZCA6IE5vUHJvcGVydHlGb3VuZDsKIH0KQEAgLTE1MSwxNyArMTUzLDIwIEBAIHZvaWQgSlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252
ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8U3RyaW5nPiYg
cmVzdWx0KQogewogICAgIEFTU0VSVChleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoKmV4ZWMsIHZh
bHVlLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbVZh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKTsKICAgICB9CkBAIC0yMjEsNiArMjI2LDkgQEAgdm9pZCBKU0RpY3Rp
b25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEhhc2hTZXQ8QXRvbWljU3RyaW5n
PiYgcmVzdWx0KQogewogICAgIEFTU0VSVChleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHJlc3Vs
dC5jbGVhcigpOwogCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC0yMjgs
MTIgKzIzNiwxMiBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiAK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2Vx
dWVuY2UoKmV4ZWMsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IEpTVmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVzdWx0LmFkZChpdGVtVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKICAgICB9CkBAIC0yOTcsMTcgKzMwNSwyMCBA
QCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEpTQzo6RXhlCiB2b2lkIEpTRGljdGlv
bmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9y
PFJlZlB0cjxNZWRpYVN0cmVhbT4+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gc3RyZWFt
ID0gSlNNZWRpYVN0cmVhbTo6dG9XcmFwcGVkKGl0ZW1WYWx1ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIwMyw2ICsyMDMsOSBAQCBpbmxpbmUgYm9vbCBKU0RpY3Rpb25hcnk6OmdldChjb25zdCBjaGFy
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUmVzdWx0PgogSlNEaWN0aW9uYXJ5OjpH
ZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5QW5kUmVzdWx0KGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgVCogY29udGV4dCwgdm9pZCAoKnNldHRlcikoVCogY29u
dGV4dCwgY29uc3QgUmVzdWx0JikpIGNvbnN0CiB7CisgICAgSlNDOjpWTSYgdm0gPSBtX2V4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNDOjpKU1ZhbHVlIHZhbHVlOwogICAgIEdldFByb3BlcnR5UmVzdWx0IGdldFByb3BlcnR5UmVz
dWx0ID0gdHJ5R2V0UHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgc3dpdGNoIChn
ZXRQcm9wZXJ0eVJlc3VsdCkgewpAQCAtMjEyLDcgKzIxNSw3IEBAIEpTRGljdGlvbmFyeTo6R2V0
UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAgICAgICAgUmVzdWx0IHJlc3VsdDsKICAgICAgICAg
Y29udmVydFZhbHVlKG1fZXhlYywgdmFsdWUsIHJlc3VsdCk7CiAKLSAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOwogCiAgICAgICAgIHNldHRl
cihjb250ZXh0LCByZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTMsMTYgKzE1MywxNiBAQCBKU1ZhbHVlIEpTRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQo
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA8IDQpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAgICAgYXV0byBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byBuYW1lID0gc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0
PGludDMyX3Q+KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBhdXRvIGhlaWdodCA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDMpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYXV0byogY29udGV4dCA9IHdy
YXBwZWQoKS5nZXRDU1NDYW52YXNDb250ZXh0KFdURk1vdmUoY29udGV4dElkKSwgV1RGTW92ZShu
YW1lKSwgV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDEyIEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHQKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgfHwgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNKU0V4ZWN1dGlvbkZvcmJpZGRlbigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRFeGVjdXRpb25Db250ZXh0LT52bSgp
KTsKKyAgICBWTSYgdm0gPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgLy8gU2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZGlzcGF0Y2hpbmct
ZXZlbnRzIHNwZWMgb24gY2FsbGluZyBoYW5kbGVFdmVudC4KKyAgICAvLyAiSWYgdGhpcyB0aHJv
d3MgYW4gZXhjZXB0aW9uLCByZXBvcnQgdGhlIGV4Y2VwdGlvbi4iIEl0IHNob3VsZCBub3QgcHJv
cGFnYXRlIHRoZQorICAgIC8vIGV4Y2VwdGlvbi4KIAogICAgIEpTT2JqZWN0KiBqc0Z1bmN0aW9u
ID0gdGhpcy0+anNGdW5jdGlvbihzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIWpz
RnVuY3Rpb24pCkBAIC0xMDksNiArMTE0LDE0IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5k
bGVFdmVudChTY3JpcHQKICAgICAvLyBJZiBqc0Z1bmN0aW9uIGlzIG5vdCBhY3R1YWxseSBhIGZ1
bmN0aW9uLCBzZWUgaWYgaXQgaW1wbGVtZW50cyB0aGUgRXZlbnRMaXN0ZW5lciBpbnRlcmZhY2Ug
YW5kIHVzZSB0aGF0CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAg
ICAgIGhhbmRsZUV2ZW50RnVuY3Rpb24gPSBqc0Z1bmN0aW9uLT5nZXQoZXhlYywgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlRXZlbnQiKSk7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OworCisgICAgICAgICAgICBldmVudC0+dGFyZ2V0KCktPnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVu
dEhhbmRsZXIoKTsKKyAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEoaGFuZGxlRXZlbnRGdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIH0KIApAQCAtMTIx
LDcgKzEzNCw2IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAg
ICAgICAgRXZlbnQqIHNhdmVkRXZlbnQgPSBnbG9iYWxPYmplY3QtPmN1cnJlbnRFdmVudCgpOwog
ICAgICAgICBnbG9iYWxPYmplY3QtPnNldEN1cnJlbnRFdmVudChldmVudCk7CiAKLSAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBWTUVudHJ5U2NvcGUgZW50cnlT
Y29wZSh2bSwgdm0uZW50cnlTY29wZSA/IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDog
Z2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25DYWxsKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNhbGxUeXBlLCBjYWxsRGF0YSk7CkBAIC0xMzgsNyArMTUw
LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogCiAgICAgICAg
IGlmIChpczxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKSB7CiAg
ICAgICAgICAgICBhdXRvIHNjcmlwdENvbnRyb2xsZXIgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxT
Y29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNjcmlwdCgpOwotICAgICAgICAgICAgYm9v
bCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKGV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmIGlz
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGVjLT5leGNlcHRpb24oKSkpOworICAgICAg
ICAgICAgYm9vbCB0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uID0gKHNjb3BlLmV4Y2VwdGlvbigp
ICYmIGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihzY29wZS5leGNlcHRpb24oKSkpOwog
ICAgICAgICAgICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gfHwgc2NyaXB0Q29udHJv
bGxlci0+aXNUZXJtaW5hdGluZ0V4ZWN1dGlvbigpKQogICAgICAgICAgICAgICAgIHNjcmlwdENv
bnRyb2xsZXItPmZvcmJpZEV4ZWN1dGlvbigpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogCiAgICAgdW5zaWduZWQgYmxvYlBhcnRzTGVuZ3RoID0gMDsKICAgICBKU09iamVjdCog
YmxvYlBhcnRzID0gdG9KU1NlcXVlbmNlKGV4ZWMsIGFyZywgYmxvYlBhcnRzTGVuZ3RoKTsKLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIEFTU0VSVChibG9iUGFydHMpOwogCkBAIC02OSw3ICs2OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIDEsICJmaWxlbmFtZSIsICJGaWxlIiwgbnVsbHB0ciwgIkRP
TVN0cmluZyIpOwogCiAgICAgU3RyaW5nIGZpbGVuYW1lID0gYXJnLnRvV1RGU3RyaW5nKCZleGVj
KS5yZXBsYWNlKCcvJywgJzonKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nIG5vcm1hbGl6ZWRUeXBlOwpAQCAt
ODcsNyArODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAg
ICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSB0eXBlIHByb3BlcnR5LgogICAgICAgICBTdHJp
bmcgdHlwZTsKICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsKLSAgICAgICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgICAgIG5vcm1hbGl6ZWRUeXBlID0gQmxvYjo6bm9ybWFsaXplZENvbnRlbnRU
eXBlKHR5cGUpOwpAQCAtOTUsNyArOTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTCiAgICAgICAgIC8vIE9ubHkgdHJ5IHRvIHBhcnNlIHRoZSBsYXN0TW9kaWZp
ZWQgZGF0ZSBpZiB0aGVyZSB3YXMgbm90IGFuIGludmFsaWQgdHlwZSBhcmd1bWVudC4KICAgICAg
ICAgaWYgKHR5cGUuaXNFbXB0eSgpIHx8ICAhbm9ybWFsaXplZFR5cGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBkaWN0aW9uYXJ5LmdldCgibGFzdE1vZGlmaWVkIiwgbGFzdE1vZGlmaWVkKTsK
LSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA3LDcgKzEw
Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7ICsraSkgewogICAgICAgICBK
U1ZhbHVlIGl0ZW0gPSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICAgICBpZiAoQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVt
KSkKQEAgLTExOCw3ICsxMTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTCiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMp
OwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBl
bmQoc3RyaW5nLCBBU0NJSUxpdGVyYWwoInRyYW5zcGFyZW50IikpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDkgQEAgc3Rh
dGljIHZvaWQgc2V0TWF4aW11bUFnZShQb3NpdGlvbk9wdGlvbgogCiBzdGF0aWMgUmVmUHRyPFBv
c2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zaXRpb25PcHRpb25zKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIENyZWF0ZSBkZWZhdWx0IG9wdGlv
bnMuCiAgICAgYXV0byBvcHRpb25zID0gUG9zaXRpb25PcHRpb25zOjpjcmVhdGUoKTsKIApAQCAt
ODIsNyArODUsNyBAQCBzdGF0aWMgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zCiAK
ICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBv
YmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUs
ICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3Jh
cHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnkoZXhlYywgb2JqZWN0KTsKQEAgLTk5LDE5ICsxMDIsMjIgQEAgc3RhdGljIFJlZlB0cjxQ
b3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvcwogCiBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OmdldEN1
cnJlbnRQb3NpdGlvbihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8g
QXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJvckNhbGxi
YWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAKICAgICBhdXRvIHBvc2l0aW9uQ2FsbGJh
Y2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+KCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJhY2spOwog
CiAgICAgYXV0byBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxs
YmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3Rh
dGUuYXJndW1lbnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0FsbG93TnVs
bCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgYXV0
byBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoJnN0YXRlLCBzdGF0ZS5h
cmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCkBAIC0xMjEsMTkgKzEyNywyMiBAQCBKU1Zh
bHVlIEpTR2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvCiAKIEpTVmFsdWUgSlNHZW9sb2Nh
dGlvbjo6d2F0Y2hQb3NpdGlvbihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gQXJndW1lbnRzOiBQb3NpdGlvbkNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25FcnJv
ckNhbGxiYWNrLCAob3B0aW9uYWwpUG9zaXRpb25PcHRpb25zCiAKICAgICBhdXRvIHBvc2l0aW9u
Q2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjazxKU1Bvc2l0aW9uQ2FsbGJhY2s+
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uQ2FsbGJh
Y2spOwogCiAgICAgYXV0byBwb3NpdGlvbkVycm9yQ2FsbGJhY2sgPSBjcmVhdGVGdW5jdGlvbk9u
bHlDYWxsYmFjazxKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgc3RhdGUuYXJndW1lbnQoMSksIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgfCBDYWxsYmFja0Fs
bG93TnVsbCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgYXV0byBwb3NpdGlvbk9wdGlvbnMgPSBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoJnN0YXRlLCBz
dGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIEFTU0VSVChwb3NpdGlvbk9wdGlvbnMpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
QWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDkgQEAg
c3RhdGljIEpTVmFsdWUgbmFtZWRJdGVtcyhFeGVjU3RhdGUmIHN0YQogLy8gSFRNTEFsbENvbGxl
Y3Rpb25zIGFyZSBzdHJhbmdlIG9iamVjdHMsIHRoZXkgc3VwcG9ydCBib3RoIGdldCBhbmQgY2Fs
bC4KIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIVE1MQWxsQ29sbGVj
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIApAQCAtNjUsNyArNjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CiAgICAg
ICAgIC8vIFN1cHBvcnQgZm9yIGRvY3VtZW50LmFsbCg8aW5kZXg+KSBldGMuCiAgICAgICAgIFN0
cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXgg
PSBwYXJzZUluZGV4KCpzdHJpbmcuaW1wbCgpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodG9KUyhleGVjLCBqc0NvbGxlY3Rpb24tPmdsb2JhbE9iamVjdCgpLCBjb2xsZWN0
aW9uLml0ZW0oaW5kZXgudmFsdWUoKSkpKTsKQEAgLTc2LDcgKzc5LDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAgICAgLy8gVGhlIHNlY29uZCBhcmcsIGlm
IHNldCwgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdlIHdhbnQKICAgICBTdHJpbmcgc3RyaW5n
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KCpleGVjLT5hcmd1bWVu
dCgxKS50b1dURlN0cmluZyhleGVjKS5pbXBsKCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBpdGVt
ID0gY29sbGVjdGlvbi5uYW1lZEl0ZW1XaXRoSW5kZXgoc3RyaW5nLCBpbmRleC52YWx1ZSgpKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYsMTIgKzQ2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoV0VC
R0wpCiBzdGF0aWMgdm9pZCBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKEV4ZWNTdGF0ZSYgc3RhdGUs
IFJlZlB0cjxDYW52YXNDb250ZXh0QXR0cmlidXRlcz4mIGF0dHJzKQogeworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgSlNWYWx1ZSBpbml0aWFsaXplclZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAgICAg
aWYgKGluaXRpYWxpemVyVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCA9IGluaXRpYWxpemVyVmFs
dWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5KCZzdGF0ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwogICAgIAogICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGdyYXBoaWNzQXR0cnM7CkBAIC04Myw3ICs4
Niw3IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKICNpZiBFTkFC
TEUoV0VCR0wpCiAgICAgaWYgKEhUTUxDYW52YXNFbGVtZW50OjppczNkVHlwZShjb250ZXh0SWQp
KSB7CiAgICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoc3RhdGUsIGF0dHJzKTsKLSAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
I2VuZGlmCkBAIC0xMTAsMTQgKzExMywxNCBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6
OnByb2JhYmx5U3VwCiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzID0gd3JhcHBlZCgp
OwogICAgIGNvbnN0IFN0cmluZyYgY29udGV4dElkID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiBhdHRy
czsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKEhUTUxDYW52YXNFbGVtZW50OjppczNkVHlw
ZShjb250ZXh0SWQpKSB7CiAgICAgICAgIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoc3RhdGUsIGF0
dHJzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogICAgIGlmICghZWxlbWVudEludGVyZmFjZS0+aXNVcGdyYWRpbmdFbGVtZW50KCkpIHsK
ICAgICAgICAgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlID0gZ2V0RE9NU3RydWN0dXJlPEpTSFRN
TEVsZW1lbnQ+KHZtLCAqZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byogbmV3RWxlbWVudFN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKCZleGVj
LCBuZXdUYXJnZXRWYWx1ZSwgYmFzZVN0cnVjdHVyZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShl
eGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICAgICAgUmVmPEhUTUxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVsZW1lbnQ6OmNyZWF0
ZShlbGVtZW50SW50ZXJmYWNlLT5uYW1lKCksIGRvY3VtZW50KTsKQEAgLTk4LDEyICs5OCwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgQVNTRVJUKGVs
ZW1lbnRXcmFwcGVyVmFsdWUuaXNPYmplY3QoKSk7CiAKICAgICBKU1ZhbHVlIG5ld1Byb3RvdHlw
ZSA9IG5ld1RhcmdldC0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBKU09iamVjdCogZWxlbWVudFdyYXBwZXJPYmplY3QgPSBhc09iamVjdChlbGVtZW50
V3JhcHBlclZhbHVlKTsKICAgICBKU09iamVjdDo6c2V0UHJvdG90eXBlKGVsZW1lbnRXcmFwcGVy
T2JqZWN0LCAmZXhlYywgbmV3UHJvdG90eXBlLCB0cnVlIC8qIHNob3VsZFRocm93SWZDYW50U2V0
ICovKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgZWxlbWVudEludGVyZmFjZS0+ZGlkVXBncmFkZUxhc3RFbGVtZW50SW5D
b25zdHJ1Y3Rpb25TdGFjaygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Mywx
OCArNjMsMTggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnB1c2hTdGF0ZShFeGVjU3RhdGUmIAogICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCksIDAsIDApOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIC8vIEZJWE1FOiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0
aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAg
ICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0
YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAtOTcsMTggKzk3LDE4
IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUoRXhlY1N0YXQKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBoaXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAwLCAw
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyBG
SVhNRTogdGl0bGUgc2hvdWxkIG5vdCBiZSBudWxsYWJsZS4KICAgICBTdHJpbmcgdGl0bGUgPSB2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIFN0cmluZyB1cmw7CiAgICAgaWYgKGFyZ0NvdW50ID4gMikgewogICAgICAgICB1
cmwgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIFN0
cmluZyBuYW1lID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBK
U1ZhbHVlIG9wdGlvbnNWYWx1ZSA9IHN0YXRlLmFyZ3VtZW50KDEpOwpAQCAtNjYsMTcgKzY2LDE3
IEBAIEpTVmFsdWUgSlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUKICAgICBib29sIGF1
dG9JbmNyZW1lbnQgPSBmYWxzZTsKICAgICBpZiAoIW9wdGlvbnNWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CiAgICAgICAgIEpTVmFsdWUga2V5UGF0aFZhbHVlID0gb3B0aW9uc1ZhbHVlLmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAia2V5UGF0aCIpKTsKLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgaWYgKCFrZXlQYXRoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAg
ICAga2V5UGF0aCA9IGlkYktleVBhdGhGcm9tVmFsdWUoc3RhdGUsIGtleVBhdGhWYWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgYXV0b0luY3JlbWVudCA9IG9wdGlvbnNWYWx1
ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImF1dG9JbmNyZW1l
bnQiKSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
bnNwZWN0b3JGcm9udGVuZEhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw2IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09i
amVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0
ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5
RXZlbnRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2
ICs5OCw5IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CkBAIC0xMTIsOSArMTE1LDkgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6
OmluaXRpYWxpegogICAgICAgICBleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGFy
Z3MsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgbV9mdW5jdGlvbk5hbWUpLAogICAgICAg
ICBtX3NvdXJjZVVSTCwgbV9zb3VyY2VQb3NpdGlvbiwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC0xMjMsMTQgKzEyNiwx
MyBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgaWYgKG1f
b3JpZ2luYWxOb2RlKSB7CiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAgICAgICAgICAv
LyBFbnN1cmUgdGhhdCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRvIG1hcmsgdGhl
IGV2ZW50IGxpc3RlbmVyIHdlJ3JlIGNyZWF0aW5nLgotICAgICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHBhc3MgdGhlIGdsb2Jh
bCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCi0gICAgICAgICAgICBzZXRXcmFwcGVy
KGV4ZWMtPnZtKCksIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5h
bE5vZGUpKSk7CisgICAgICAgICAgICBzZXRXcmFwcGVyKHZtLCBhc09iamVjdCh0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgKm1fb3JpZ2luYWxOb2RlKSkpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gQWRkIHRoZSBldmVudCdzIGhvbWUgZWxlbWVudCB0byB0aGUgc2NvcGUKICAgICAgICAgLy8g
KGFuZCB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgZm9ybSAtIHNlZSBKU0hUTUxFbGVtZW50OjpldmVu
dEhhbmRsZXJTY29wZSkKLSAgICAgICAgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zZXRTY29wZShleGVj
LT52bSgpLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigpKS0+cHVzaEV2ZW50SGFuZGxlclNjb3Bl
KGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKSkpOworICAgICAgICBsaXN0ZW5lckFz
RnVuY3Rpb24tPnNldFNjb3BlKHZtLCBqc0Nhc3Q8SlNOb2RlKj4od3JhcHBlcigpKS0+cHVzaEV2
ZW50SGFuZGxlclNjb3BlKGV4ZWMsIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2NvcGUoKSkpOwogICAg
IH0KICAgICByZXR1cm4ganNGdW5jdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA3LDExICsxMDcsMTQgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBsaW5rQW5kRXZhbHVhdGVNb2R1bGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgaW5pdGlhdG9y
LCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgCiAgICAgICAgIEpTTWFpblRocmVhZEV4ZWNTdGF0
ZSBjdXJyZW50U3RhdGUoZXhlYyk7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9
IEpTQzo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIG1vZHVsZUtleSwgaW5pdGlhdG9yKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CisgICAgICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwpAQCAtMTMxLDggKzEzNCwxMCBAQCBwcml2YXRlOgogCiAgICAgfkpTTWFpblRocmVhZEV4ZWNT
dGF0ZSgpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHNfbWFpblRocmVhZFN0YXRlLT52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc19tYWluVGhyZWFk
U3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNj
b3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICBib29sIGRpZEV4aXRKYXZhU2NyaXB0ID0gc19t
YWluVGhyZWFkU3RhdGUgJiYgIW1fcHJldmlvdXNTdGF0ZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDkgQEAgSlNWYWx1ZSBKU01l
c3NhZ2VFdmVudDo6ZGF0YShFeGVjU3RhdGUmIAogCiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRs
ZUluaXRNZXNzYWdlRXZlbnQoSlNNZXNzYWdlRXZlbnQqIGpzRXZlbnQsIEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGNvbnN0IFN0cmluZyYgdHlwZUFyZyA9IHN0
YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgYm9v
bCBjYW5CdWJibGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKICAg
ICBib29sIGNhbmNlbGFibGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgyKS50b0Jvb2xlYW4oJnN0YXRl
KTsKQEAgLTExNiwxNiArMTE5LDE2IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1l
c3NhZ2VFdmUKICAgICAgICAgbWVzc2FnZVBvcnRzID0gc3RkOjptYWtlX3VuaXF1ZTxNZXNzYWdl
UG9ydEFycmF5PigpOwogICAgICAgICBhcnJheUJ1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFy
cmF5QnVmZmVyQXJyYXk+KCk7CiAgICAgICAgIGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCg3KSwgKm1lc3NhZ2VQb3J0cywgKmFycmF5QnVmZmVycyk7Ci0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAg
ICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJnKHN0YXRlLnZtKCksIHN0YXRlLmFyZ3Vt
ZW50KDMpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgRGVwcmVjYXRlZDo6
U2NyaXB0VmFsdWUgZGF0YUFyZyh2bSwgc3RhdGUuYXJndW1lbnQoMykpOworICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgTWVzc2FnZUV2ZW50JiBldmVudCA9IGpzRXZlbnQtPndyYXBwZWQoKTsKICAgICBldmVu
dC5pbml0TWVzc2FnZUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZywg
ZGF0YUFyZywgb3JpZ2luQXJnLCBsYXN0RXZlbnRJZEFyZywgc291cmNlQXJnLCBXVEZNb3ZlKG1l
c3NhZ2VQb3J0cykpOwotICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQoc3RhdGUudm0oKSwganNFdmVu
dCwgZGF0YUFyZy5qc1ZhbHVlKCkpOworICAgIGpzRXZlbnQtPm1fZGF0YS5zZXQodm0sIGpzRXZl
bnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMiArNzMsMTIg
QEAgdm9pZCBmaWxsTWVzc2FnZVBvcnRBcnJheShKU0M6OkV4ZWNTdGF0ZQogICAgIC8vIFZhbGlk
YXRpb24gb2Ygc2VxdWVuY2UgdHlwZXMsIHBlciBXZWJJREwgc3BlYyA0LjEuMTMuCiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKHN0
YXRlLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBWYWxpZGF0aW9uIG9mIG5vbi1udWxsIG9iamVj
dHMsIHBlciBIVE1MNSBzcGVjIDEwLjMuMy4KICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEFycmF5QnVmZmVyQXJyYXkgYXJy
YXlCdWZmZXJBcnJheTsKICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDEpLCBwb3J0QXJyYXksIGFycmF5QnVmZmVyQXJyYXkpOwogICAgICAgICBhdXRv
IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCAmcG9ydEFycmF5LCAmYXJyYXlCdWZmZXJBcnJheSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAK
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
c0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERl
YwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQ4
X3QgbmF0aXZlVmFsdWUgeyBjb252ZXJ0PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJh
bmdlKSB9OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBEZWNpc2lvblBvaW50
IGRlY2lzaW9uUG9pbnQgeyBzdGF0aWNfY2FzdDxEZWNpc2lvblBvaW50PihuYXRpdmVWYWx1ZSkg
fTsKQEAgLTk4LDcgKzk4LDcgQEAgc3RhdGljIGlubGluZSBEZWNpc2lvbiB0b0RlY2lzaW9uKEV4
ZWNTdAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVp
bnQ4X3QgbmF0aXZlVmFsdWUgeyBjb252ZXJ0PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgRW5mb3Jj
ZVJhbmdlKSB9OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gRGVjaXNpb246OkFsbG93Owog
CiAgICAgRGVjaXNpb24gZGVjaXNpb24geyBzdGF0aWNfY2FzdDxEZWNpc2lvbj4obmF0aXZlVmFs
dWUpIH07CkBAIC0xMTksOCArMTE5LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29udGVudEZpbHRlclNl
dHRpbmdzOjpkZWMKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lz
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBEZWNpc2lvbiBkZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICB3cmFwcGVkKCkuc2V0RGVjaXNpb24oZGVjaXNp
b24pOwpAQCAtMTMzLDggKzEzNiwxMSBAQCBKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0
aW5nczo6dW5iCiAKIHZvaWQgSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXRVbmJsb2Nr
UmVxdWVzdERlY2lzaW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBEZWNpc2lvbiB1bmJsb2NrUmVxdWVzdERlY2lzaW9uIHsgdG9EZWNpc2lv
bihzdGF0ZSwgdmFsdWUpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdy
YXBwZWQoKS5zZXRVbmJsb2NrUmVxdWVzdERlY2lzaW9uKHVuYmxvY2tSZXF1ZXN0RGVjaXNpb24p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwxMSArNDksMTIg
QEAgdWludDE2X3QgSlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIEV4ZWNTdGF0
ZSogc3RhdGUgPSBtX2RhdGEtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0b0pTKHN0YXRlLCBtX2Rh
dGEtPmdsb2JhbE9iamVjdCgpLCBub2RlKSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
Tm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gcmV0
dXJuZWRFeGNlcHRpb247CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZGF0YS0+aW52b2tlQ2FsbGJh
Y2soYXJncywgSlNDYWxsYmFja0RhdGE6OkNhbGxiYWNrVHlwZTo6RnVuY3Rpb25Pck9iamVjdCwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhzdGF0ZSwgImFjY2VwdE5vZGUiKSwgcmV0dXJuZWRFeGNl
cHRpb24pOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgcmV0dXJuZWRFeGNlcHRp
b24pOwogICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbikgewogICAgICAgICAvLyBSZXRocm93IGV4
Y2VwdGlvbi4KICAgICAgICAgdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCByZXR1cm5lZEV4
Y2VwdGlvbik7CkBAIC02Miw3ICs2Myw3IEBAIHVpbnQxNl90IEpTTm9kZUZpbHRlcjo6YWNjZXB0
Tm9kZShOb2RlKiAKICAgICB9CiAKICAgICB1aW50MTZfdCByZXN1bHQgPSBjb252ZXJ0PHVpbnQx
Nl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCiAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZU9yU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmcuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UaHJvd1Njb3BlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKQEAgLTM1LDYgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBWZWN0b3I8c3RkOjpl
eHBlcmltZW50YWw6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiB0b05vZGVPclN0cmluZ1Zl
Y3RvcihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CiAKICAgICBWZWN0b3I8c3RkOjpleHBl
cmltZW50YWw6OnZhcmlhbnQ8UmVmPE5vZGU+LCBTdHJpbmc+PiByZXN1bHQ7CkBAIC00Niw3ICs1
MCw3IEBAIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm8KICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQobm9kZS0+d3JhcHBlZCgpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoc3RyaW5nKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFu
c2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCwxMyArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU1ZhbHVlIEpTU1FMVHJhbnNh
Y3Rpb246OmV4ZWN1dGVTcWwoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbigm
c3RhdGUsIFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKICAgICBTdHJpbmcgc3FsU3RhdGVtZW50ID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmco
JnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICAvLyBOb3cgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgU1FMIGFyZ3VtZW50
cwpAQCAtNjMsMTUgKzY2LDE1IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNx
bChFeGUKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIHN0YXRlLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTgxLDcgKzg0LDcgQEAgSlNWYWx1ZSBK
U1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVu
ZCBpdAogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudG9TdHJpbmcoJnN0
YXRlKS0+dmFsdWUoJnN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0
aEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
VkdMZW5ndGhDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcg
KzkwLDcgQEAgSlNWYWx1ZSBKU1NWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVQogICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDE2ICs3OSwxOSBAQCBib29sIEpT
U3RvcmFnZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTCiAKIHZvaWQgSlNTdG9yYWdlOjpnZXRP
d25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgSlNTdG9yYWdlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RvcmFnZSo+
KG9iamVjdCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpLmxlbmd0aChlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5rZXkoaSwg
ZWMpKSk7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIApAQCAtOTcsNiArMTAw
LDkgQEAgdm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYgogCiBib29sIEpT
U3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmLCBib29sJiBwdXRSZXN1bHQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBPbmx5IHBlcmZvcm0gdGhlIGN1c3RvbSBwdXQgaWYg
dGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgYSBuYXRpdmUgcHJvcGVydHkgYnkgdGhpcyBuYW1lLgog
ICAgIC8vIFNpbmNlIGhhc1Byb3BlcnR5KCkgd291bGQgZW5kIHVwIGNhbGxpbmcgY2FuR2V0SXRl
bXNGb3JOYW1lKCkgYW5kIGJlIGZvb2xlZCwgd2UgbmVlZCB0byBjaGVjawogICAgIC8vIHRoZSBu
YXRpdmUgcHJvcGVydHkgc2xvdHMgbWFudWFsbHkuCkBAIC0xMTAsNyArMTE2LDcgQEAgYm9vbCBK
U1N0b3JhZ2U6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGlj
YXRlcyB3aGV0aGVyIHB1dERlbGVnYXRlKCkgc2hvdWxkIGhhbmRsZSB0aGUgcHV0IG9wZXJhdGlv
biAod2hpY2gKICAgICAgICAgLy8gaWYgdHJ1ZSwgdGVsbHMgdGhlIGNhbGxlciBub3QgdG8gZXhl
Y3V0ZSB0aGUgZ2VuZXJpYyBwdXQpLiBJdCBkb2VzIG5vdCBpbmRpY2F0ZSB3aGV0aGVyCiAgICAg
ICAgIC8vIHB1dERlbGVnYXRlKCkgZGlkIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZSB0aGUgb3BlcmF0
aW9uIG9yIG5vdCAod2hpY2ggaXQgZGlkbid0IGluIHRoaXMKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsMTEgQEAgdm9pZCBKU1RleHRUcmFjazo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZQogdm9pZCBKU1RleHRUcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5z
ZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsOCArNDMsMTEgQEAgdm9pZCBKU1ZpZGVvVHJhY2s6OnZpc2l0QWRkaXRp
b25hbENoaWxkcgogdm9pZCBKU1ZpZGVvVHJhY2s6OnNldEtpbmQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRl
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRLaW5kKHN0
cmluZyk7CiAjZWxzZQpAQCAtNTYsOCArNTksMTEgQEAgdm9pZCBKU1ZpZGVvVHJhY2s6OnNldEtp
bmQoRXhlY1N0YXRlJiBzdAogdm9pZCBKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZh
bHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICB3cmFwcGVkKCku
c2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMCAr
MTA1LDEwIEBAIEpTVmFsdWUgSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbmQKIAogICAg
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWdu
ZWQgcG5hbWUgPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJmV4ZWMpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIGluZGV4
ID0gZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZleGVjKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0SW5kZXhlZFBhcmFtZXRlcihwbmFtZSwgaW5kZXgpOwogICAgIHJldHVybiB0b0pT
KCZleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5OSwxMCArMTk5LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihK
U1dlYkcKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiBjb250ZXh0ID0gb2JqLT53cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm87CiAgICAgc3dp
dGNoIChvYmplY3RUeXBlKSB7CkBAIC0zMzUsNyArMzM1LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIAogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgY29uc3QgU3RyaW5nIG5hbWUgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEV4dGVuc2lv
biogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7CiAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKQEAgLTM1NywxMyArMzU3LDEz
IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0g
d3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgdW5zaWduZWQgYXR0YWNobWVudCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKS50
b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwogICAgIGlmIChlYykg
ewpAQCAtMzg0LDcgKzM4NCw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXQKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlJiBjb250ZXh0ID0gd3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQu
Z2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00MDgsNyArNDA4LDcg
QEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIGlmICghcHJv
Z3JhbSAmJiAhc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkK
ICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwogICAgIHVuc2ln
bmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMp
OwogICAgIGlmIChlYykgewpAQCAtNDM3LDcgKzQzNyw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwogICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dy
YXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIHVuc2lnbmVkIHBuYW1lID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMp
IHsKQEAgLTQ5Niw2ICs0OTYsOSBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiBib29s
IHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTUwOCw3
ICs1MTEsNyBAQCBib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDCiAgICAg
CiAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlND
OjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19j
YXN0PFQ+KHYudG9OdW1iZXIoJnN0YXRlKSk7CiAgICAgfQpAQCAtNTU2LDExICs1NTksMTEgQEAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdQogICAgIH0gZWxzZQogICAg
ICAgICBpbmRleCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsK
ICAgICAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC03MDcsNyArNzEw
LDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgCiAgICAgYm9vbCB0cmFu
c3Bvc2UgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgUmVmUHRy
PEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0
U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTEgKzYzLDE0IEBAIGVudW0gY2xhc3MgQ3J5cHRv
S2V5Rm9ybWF0IHsKIAogc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+IGNyZWF0ZUFsZ29y
aXRobUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGFsZ29yaXRobUlkZW50aWZp
ZXI7Ci0gICAgaWYgKCFKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlk
ZW50aWZpZXIoJnN0YXRlLCB2YWx1ZSwgYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlkZW50aWZpZXIoJnN0YXRlLCB2YWx1
ZSwgYWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICBhdXRvIHJlc3VsdCA9IENyeXB0b0FsZ29yaXRobVJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoYWxnb3JpdGhtSWRlbnRpZmllcik7CiAgICAgaWYg
KCFyZXN1bHQpCkBAIC04MSw3ICs4NCw3IEBAIHN0YXRpYyBib29sIGNyeXB0b0tleUZvcm1hdEZy
b21KU1ZhbHVlKEUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBTdHJpbmcga2V5Rm9ybWF0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChr
ZXlGb3JtYXRTdHJpbmcgPT0gInJhdyIpCiAgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUZvcm1h
dDo6UmF3OwpAQCAtMTE0LDcgKzExNyw3IEBAIHN0YXRpYyBib29sIGNyeXB0b0tleVVzYWdlc0Zy
b21KU1ZhbHVlKEUKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsg
KytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IGFycmF5LT5nZXRJbmRleCgmc3RhdGUs
IGkpOwogICAgICAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBlbGVtZW50LnRvU3RyaW5nKCZzdGF0
ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJlbmNyeXB0IikKICAgICAgICAg
ICAgIHJlc3VsdCB8PSBDcnlwdG9LZXlVc2FnZUVuY3J5cHQ7CkBAIC0xNDUsMTYgKzE0OCwxNCBA
QCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4CiAgICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFs
Z29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGht
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JF
bmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1l
dGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9X
cmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTE2
NywxMCArMTY4LDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgK
ICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgy
KSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VE
ZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSk7CkBAIC0yMDEsMTYgKzIwMiwxNCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpk
ZWNyeXB0KEV4CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0
aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlm
aWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMp
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5
PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
KTsKICAgICBpZiAoIWtleSkKQEAgLTIyMywxMCArMjIyLDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRh
IGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRh
RnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSk7Cisg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2Vz
cykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNl
RGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBl
ciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21p
c2VEZWZlcnJlZCk7CkBAIC0yNTYsMTYgKzI1NSwxNCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjpzaWduKEV4ZWNTCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1
dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8
fCBhbGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JTaWduKCZzdGF0ZSwgYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5
cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTI3OCwxMCArMjc1LDEwIEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRp
b25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0
YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRp
b25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSwgZGF0
YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQ
cm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVh
dGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4g
d3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IHByb21pc2VEZWZlcnJlZCk7CkBAIC0zMTEsMTYgKzMwOCwxNCBAQCBKU1ZhbHVlIEpTV2ViS2l0
U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAog
ICAgIGF1dG8gYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBhbGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JWZXJpZnkoJnN0YXRlLCBhbGdv
cml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
ICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBh
cmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJl
ZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMzMzLDE2ICszMjgsMTYgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZQogICAgIH0KIAogICAgIENyeXB0
b09wZXJhdGlvbkRhdGEgc2lnbmF0dXJlOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIHNpZ25hdHVyZSkp
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nl
c3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgyKSwgc2lnbmF0dXJlKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgzKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMyksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJy
ZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwog
ICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtMzcyLDIy
ICszNjcsMjAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGlnZXN0KEV4ZQogICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAo
IWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yRGlnZXN0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAg
aWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
JnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSk7CisgICAgQVNTRVJUKHNj
b3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHBy
b21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVk
V3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7
CkBAIC00MTcsMzAgKzQxMCwyOCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpnZW5l
cmF0ZUtlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3JpdGht
ID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0p
OworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6
OmNyZWF0ZVBhcmFtZXRlcnNGb3JHZW5lcmF0ZUtleSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRp
ZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
KSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNj
b3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJs
ZSA9IGZhbHNlOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAg
ICBleHRyYWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbigmc3Rh
dGUpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwogICAgIGlmIChz
dGF0ZS5hcmd1bWVudENvdW50KCkgPj0gMykgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdl
c0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKSkgewotICAg
ICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgYXV0byBzdWNj
ZXNzID0gY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIp
LCBrZXlVc2FnZXMpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VE
ZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSk7CkBAIC00ODQsNyArNDc1LDcgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYg
c3RhdGUsIAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGtleVNlcmlh
bGl6YXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSz4o
JnN0YXRlLCBqd2tTdHJpbmcpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ5NywxMSArNDg4LDExIEBAIHN0YXRpYyB2
b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKIAogICAgIE9wdGlvbmFsPENyeXB0b0Fs
Z29yaXRobVBhaXI+IHJlY29uY2lsZWRSZXN1bHQgPSBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNp
bGVBbGdvcml0aG0oYWxnb3JpdGhtLmdldCgpLCBwYXJhbWV0ZXJzLmdldCgpKTsKICAgICBpZiAo
IXJlY29uY2lsZWRSZXN1bHQpIHsKLSAgICAgICAgaWYgKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQWxnb3JpdGhtIHNwZWNpZmllZCBpbiBr
ZXkgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvbmUgcGFzc2VkIHRvIGltcG9ydEtleSBhcyBhcmd1
bWVudCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYWxnb3JpdGhtID0gcmVjb25jaWxlZFJlc3VsdC0+YWxnb3JpdGhtOwpAQCAt
NTEzLDE1ICs1MDQsMTUgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUs
IAogICAgIEFTU0VSVChwYXJhbWV0ZXJzKTsKIAogICAgIGtleVNlcmlhbGl6YXRpb24tPnJlY29u
Y2lsZUV4dHJhY3RhYmxlKGV4dHJhY3RhYmxlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlVXNhZ2VzKGtleVVzYWdlcyk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8ga2V5RGF0YSA9IGtleVNlcmlh
bGl6YXRpb24tPmtleURhdGEoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01MzksNDUgKzUzMCw0NCBAQCBKU1ZhbHVlIEpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3Jt
YXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBj
cnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZv
cm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlm
ICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
Q3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9IGNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtPiBhbGdvcml0aG07CiAgICAgUmVmUHRyPENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CiAgICAgaWYgKCFzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgyKS5pc051bGwoKSkgewogICAgICAgICBhbGdvcml0aG0gPSBjcmVhdGVBbGdv
cml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAg
ICAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7
CisgICAgICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgIH0KKwogICAgICAgICBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1E
aWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0ZSwgYWxnb3JpdGht
LT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYg
KCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAg
ICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNlOwogICAgIGlm
IChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNCkgewogICAgICAgICBleHRyYWN0YWJsZSA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBD
cnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50
KCkgPj0gNSkgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCg0KSwga2V5VXNhZ2VzKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5VXNh
Z2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpOworICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CiAg
ICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlz
ZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CkBAIC01OTAsNyArNTgw
LDcgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KAogICAgIH07CiAK
ICAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgZGF0YSwgV1RGTW92ZShh
bGdvcml0aG0pLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBX
VEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIHByb21p
c2VEZWZlcnJlZC0+cHJvbWlzZSgpOwpAQCAtNjE3LDcgKzYwNyw3IEBAIHN0YXRpYyB2b2lkIGV4
cG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICB9CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6OkpXSzogewogICAgICAgICBTdHJpbmcgcmVzdWx0ID0gSlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLOjpzZXJpYWxpemUoJnN0YXRlLCBrZXkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHJlc3VsdC51dGY4
KFN0cmljdENvbnZlcnNpb24pOwogICAgICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0QnVmZmVy
OwpAQCAtNjQwLDEwICs2MzAsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhw
b3J0S2V5KAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3Jt
YXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5Rm9ybWF0RnJvbUpT
VmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpOworICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtl
eSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwog
ICAgIGlmICgha2V5KQpAQCAtNjU5LDcgKzY0OSw3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OmV4cG9ydEtleSgKICAgICB9OwogCiAgICAgV2ViQ29yZTo6ZXhwb3J0S2V5KHN0YXRl
LCBrZXlGb3JtYXQsICprZXksIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWls
dXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CkBAIC02NzQsMTAgKzY2
NCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp3cmFwS2V5KEV4CiAgICAgICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0g
ICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
MCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigp
IHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6
OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBA
IC02OTQsMTYgKzY4NCwxNCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp3cmFwS2V5
KEV4CiAgICAgfQogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwotICAgIGlmICghYWxnb3Jp
dGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5
cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMykpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJz
KTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0cjxE
ZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtNzQ2LDE2ICs3MzQsMTYgQEAg
SlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICgh
Y3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlG
b3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0
byBzdWNjZXNzID0gY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDApLCBrZXlGb3JtYXQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNj
ZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgd3JhcHBlZEtleURhdGE7Ci0gICAgaWYg
KCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSwgd3JhcHBlZEtleURhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSk7Cisg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2Vz
cykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENy
eXB0b0tleT4gdW53cmFwcGluZ0tleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMikpOwogICAgIGlmICghdW53cmFwcGluZ0tleSkKQEAgLTc2OCw0NCAr
NzU2LDQxIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnVud3JhcEtleSgKICAgICB9
CiAKICAgICBhdXRvIHVud3JhcEFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVl
KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCF1bndyYXBBbGdv
cml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgdW53cmFwQWxnb3JpdGhtKTsKKyAgICBpZiAoIXVud3Jh
cEFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogICAgIGF1
dG8gdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFy
eTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCB1bndyYXBBbGdvcml0aG0tPmlk
ZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwotICAgIGlmICghdW53cmFw
QWxnb3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0aG1QYXJh
bWV0ZXJzKTsKKyAgICBpZiAoIXVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+
IHVud3JhcHBlZEtleUFsZ29yaXRobTsKICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1l
dGVycz4gdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVyczsKICAgICBpZiAoIXN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDQpLmlzTnVsbCgpKSB7CiAgICAgICAgIHVud3JhcHBlZEtleUFsZ29y
aXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgdW53cmFwcGVkS2V5QWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCF1
bndyYXBwZWRLZXlBbGdvcml0aG0pCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgfQorCiAgICAgICAgIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMgPSBK
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXko
JnN0YXRlLCB1bndyYXBwZWRLZXlBbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoNCkpOwotICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJh
bWV0ZXJzKTsKKyAgICAgICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQo
KSA+PSA2KSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
NSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdl
cyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA3KSB7Ci0gICAgICAgIGlm
ICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDYpLCBr
ZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNl
cHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTgxOSwxMSArODA0LDE1IEBAIEpTVmFsdWUgSlNXZWJL
aXRTdWJ0bGVDcnlwdG86OnVud3JhcEtleSgKICAgICAgICAgYXV0byBpbXBvcnRGYWlsdXJlQ2Fs
bGJhY2sgPSBbd3JhcHBlcl0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHdyYXBwZXItPnJlamVj
dChudWxscHRyKTsKICAgICAgICAgfTsKKworICAgICAgICBWTSYgdm0gPSBkb21HbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KwogICAgICAgICBFeGVjU3RhdGUmIHN0YXRlID0gKmRvbUdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogICAgICAgICBXZWJDb3JlOjppbXBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgc3RkOjpt
YWtlX3BhaXIocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSksIHVud3JhcHBlZEtleUFsZ29y
aXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycywgZXh0cmFjdGFibGUsIGtleVVz
YWdlcywgV1RGTW92ZShpbXBvcnRTdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGltcG9ydEZhaWx1
cmVDYWxsYmFjaykpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgLy8gRklY
TUU6IFJlcG9ydCBleGNlcHRpb24gZGV0YWlscyB0byBjb25zb2xlLCBhbmQgcG9zc2libHkgdG8g
Y2FsbGluZyBzY3JpcHQgb25jZSB0aGVyZSBpcyBhIHN0YW5kYXJkaXplZCB3YXkgdG8gcGFzcyBl
cnJvcnMgdG8gV2ViQ3J5cHRvIHByb21pc2UgcmVqZWN0IGZ1bmN0aW9ucy4KLSAgICAgICAgICAg
IHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgICAgICB9CiAg
ICAgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoJmV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmZXhlYykp
OwogCiAgICAgU3RyaW5nIHNjcmlwdFVSTCA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoJmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIC8vIFNlZSBzZWN0aW9uIDQuOC4yIHN0ZXAgMTQgb2YgV2Vi
V29ya2VycyBmb3Igd2h5IHRoaXMgaXMgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNj
b3BlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDEzICs2MiwxNiBAQCB2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0QWRkaXRpb25hCiAK
IEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyhFeGVjU3RhdGUmIHN0
YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdXJsczsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKICAgICAgICAgdXJscy5hcHBlbmQodmFsdWVUb1VTVlN0cmluZygmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAg
LTg3LDcgKzkwLDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KAog
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1
bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlv
bikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwpAQCAtMTA0LDcgKzEwNyw3IEBAIEpTVmFs
dWUgSlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0SW50ZXJ2YWwKICAgICAgICAgcmV0dXJuIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZz
dGF0ZSkpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0g
U2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwg
d3JhcHBlZCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBq
c051bWJlcigwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBKU0M6OkpT
VmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byBmdW5jdGlvbiA9IG9iamVjdC5nZXQoJnN0
YXRlLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCBwcm9wZXJ0eU5hbWUpKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKIAogICAgIGlm
ICghZnVuY3Rpb24uaXNGdW5jdGlvbigpKSB7CkBAIC03MCwxOSArNzAsMjMgQEAgSlNDOjpKU1Zh
bHVlIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRybwogCiBib29sIFJlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXI6OmlzQ29udHJvbGxlZFJlYWRhYmxlU3RyZWFtTG9ja2VkKCkgY29uc3QK
IHsKLSAgICBhdXRvJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soJnN0YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9
IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAotICAgIGF1
dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihzdGF0ZS52bSgp
LmNsaWVudERhdGEpOworICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgYXV0byYgY2xpZW50
RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwogICAg
IGF1dG8gcmVhZGFibGVTdHJlYW0gPSBtX2pzQ29udHJvbGxlci0+Z2V0KCZzdGF0ZSwgY2xpZW50
RGF0YS5idWlsdGluTmFtZXMoKS5jb250cm9sbGVkUmVhZGFibGVTdHJlYW1Qcml2YXRlTmFtZSgp
KTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCi0gICAgYXV0byBpc0xvY2tlZCA9IGdsb2Jh
bE9iamVjdCgpLT5idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVy
bmFscygpLm1faXNSZWFkYWJsZVN0cmVhbUxvY2tlZEZ1bmN0aW9uLmdldCgpOworICAgIGF1dG8g
aXNMb2NrZWQgPSBnbG9iYWxPYmplY3QtPmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0
KCk7CiAKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHJlYWRhYmxlU3RyZWFtKTsKICAgICBhdXRvIHJlc3VsdCA9IGNhbGxGdW5j
dGlvbihzdGF0ZSwgaXNMb2NrZWQsIEpTQzo6anNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKLSAg
ICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgIHJldHVybiByZXN1bHQuaXNUcnVlKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDggKzc0LDEyIEBAIGlubGluZSBKU0RPTUdsb2JhbE9iamVjdCogUmVhZGFibGVTdHJl
YW0KIAogaW5saW5lIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6ZW5xdWV1
ZShSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mJiBidWZmZXIpCiB7Ci0gICAgSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKCZzdGF0ZSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSB0aGlzLT5n
bG9iYWxPYmplY3QoKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKHZtKTsKIAogICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgIGVycm9y
KHN0YXRlLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKCZzdGF0ZSkpOwpAQCAtODQsOCArODgsOCBA
QCBpbmxpbmUgYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sCiAgICAgYXV0byBsZW5n
dGggPSBidWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICBhdXRvIGNodW5rID0gSlNDOjpVaW50OEFy
cmF5OjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCAwLCBsZW5ndGgpOwogICAgIEFTU0VSVChjaHVu
ayk7Ci0gICAgZW5xdWV1ZShzdGF0ZSwgdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBjaHVu
ay5nZXQoKSkpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGVucXVl
dWUoc3RhdGUsIHRvSlMoJnN0YXRlLCBnbG9iYWxPYmplY3QsIGNodW5rLmdldCgpKSk7CisgICAg
QVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRB
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBT
Y2hlZHVsZWRBY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIERPTVdyYXBwZXJXb3JsZCYg
aXNvbGF0ZWRXb3JsZCwgQ29udGVudFNlY3VyaXR5UG9saWN5KiBwb2xpY3kpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERhdGEodiwgY2FsbERhdGEpID09IENhbGxUeXBlOjpO
b25lKSB7CiAgICAgICAgIGlmIChwb2xpY3kgJiYgIXBvbGljeS0+YWxsb3dFdmFsKGV4ZWMpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2LnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1
bGVkQWN0aW9uPihuZXcgU2NoZWR1bGVkQWN0aW9uKHN0cmluZywgaXNvbGF0ZWRXb3JsZCkpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xv
YmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQy
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQo
RXhlY1N0YXRlJiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0JiB2YWx1ZSkKIHsKICAgICBhdXRvJiB2bSA9IHNjcmlwdFN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0U3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBnbG9iYWxPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSksIHRvSlMo
JnNjcmlwdFN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOwotICAgIGlmIChzY3JpcHRTdGF0
ZS5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlwdFN0YXRl
LCBzY3JpcHRTdGF0ZS5leGNlcHRpb24oKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgeworICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlwdFN0YXRlLCBzY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
OSw3ICszODksOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSgpCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9leGVjLT5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgVk0m
IHZtID0gbV9leGVjLT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiAKICAg
ICB2b2lkIHRocm93U3RhY2tPdmVyZmxvdygpCkBAIC0yNDQ4LDYgKzI0NTAsOSBAQCBwcml2YXRl
OgogCiBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXpl
KCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gaW5kZXhTdGFj
azsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IHByb3BlcnR5TmFtZVN0YWNrOwogICAgIFZl
Y3RvcjxKU09iamVjdCosIDMyPiBvdXRwdXRPYmplY3RTdGFjazsKQEAgLTI0NjgsNyArMjQ3Myw3
IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgICAg
ICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNBcnJheSogb3V0
QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KG1fZXhlYywgMCwgbV9nbG9iYWxPYmplY3QsIGxl
bmd0aCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChvdXRBcnJh
eSk7CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQob3V0QXJyYXkpOwpAQCAt
MjcwNiwxMyArMjcxMSwxNiBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxp
emVkCiBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZShKU0NvbnRleHRSZWYgb3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMob3Jp
Z2luQ29udGV4dCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pT
KGV4ZWMsIGFwaVZhbHVlKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigp
LT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAg
ICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KICAgICBBU1NFUlQoc2VyaWFsaXplZFZhbHVlKTsKQEAgLTI3NDEsMTIgKzI3NDksMTUg
QEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogSlNWYWx1ZVJlZiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiBkZXN0aW5hdGlv
bkNvbnRleHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSB0b0pTKGRlc3RpbmF0aW9uQ29udGV4dCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVj
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIEpTVmFs
dWUgdmFsdWUgPSBkZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IG51bGxwdHIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUo
KSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoZXhlYywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgQVNTRVJUKHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY28KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsRXhlYygpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBK
U0M6OmV2YWx1YXRlKGV4ZWMsIHNvdXJjZUNvZGUuanNTb3VyY2VDb2RlKCksIG1fd29ya2VyR2xv
YmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxUaGlzKCksIHJldHVybmVkRXhjZXB0aW9uKTsKIApAQCAt
MTQ0LDkgKzE0NCwxMiBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNv
CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwog
ICAgICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBlcnJvcjsKICAgICAgICAgaWYgKG1fd29y
a2VyR2xvYmFsU2NvcGUtPnNhbml0aXplU2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgZXJyb3IsIHNvdXJjZUNvZGUuY2FjaGVkU2Ny
aXB0KCkpKSB7Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpOwotICAgICAgICAgICAgcmV0dXJuZWRF
eGNlcHRpb24gPSB2bS5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNl
cHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEw
MjQsNyArMTAyNCw3IEBAIHN1YiBHZW5lcmF0ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnQK
ICAgICAgICAgbXkgJG5lZWRFeGNlcHRpb25DaGVjayA9IDA7CiAgICAgICAgIGZvcmVhY2ggbXkg
JG1lbWJlciAoQHskZGljdGlvbmFyeS0+bWVtYmVyc30pIHsKICAgICAgICAgICAgIGlmICgkbmVl
ZEV4Y2VwdGlvbkNoZWNrKSB7Ci0gICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpXG4iOworICAgICAgICAgICAgICAgICRyZXN1
bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iOwogICAg
ICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICAgICAgcmV0dXJuIE51bGxvcHQ7XG4iOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQg
dGhpcyB0byBzaGFyZSBhIGxvdCBtb3JlIGNvZGUgd2l0aCBKU1ZhbHVlVG9OYXRpdmUuCkBAIC0z
MTI3LDcgKzMxMjcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTtc
biIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpO1xuIikgaWYgISRhdHRyaWJ1dGUtPmlzU3RhdGljOwogICAgICAgICAgICAgaWYgKCEkYXR0
cmlidXRlLT5pc1N0YXRpYykgewpAQCAtMzIyNSw3ICszMjI1LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIG5hdGl2ZVZhbHVlID0gJG5hdGl2ZVZhbHVl
O1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVO
TElLRUxZKCFuYXRpdmVWYWx1ZSkpIHtcbiIpOwpAQCAtMzIzNiw3ICszMjM2LDcgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvIG5hdGl2ZVZhbHVlID0gJG5h
dGl2ZVZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRp
b24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICByZXR1cm4gZmFsc2U7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KQEAgLTM5ODIsNyArMzk4Miw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICB9XG4i
KQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgVmVjdG9yPCRuYXRpdmVFbGVtZW50VHlwZT4gJG5hbWUgPSB0b05hdGl2ZUFyZ3Vt
ZW50czwkbmF0aXZlRWxlbWVudFR5cGU+KCpzdGF0ZSwgJGFyZ3VtZW50SW5kZXgpO1xuIik7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
JHZhbHVlID0gIldURk1vdmUoJG5hbWUpIjsKQEAgLTQwMTcsNyArNDAxNyw3IEBAIHN1YiBHZW5l
cmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIkaW5kZW50ICAgICRkZWZpbmVPcHRpb25hbFZhbHVlID0gcGFyc2U8JGNs
YXNzTmFtZT4oKnN0YXRlLCAke25hbWV9VmFsdWUpO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKVxuIik7CisgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGlu
ZGVudCAgICBpZiAoVU5MSUtFTFkoISRvcHRpb25hbFZhbHVlKSlcbiIpOwogICAgICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRN
dXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAkYXJndW1lbnRJbmRleCwgXCIkbmFt
ZVwiLCBcIiR2aXNpYmxlSW50ZXJmYWNlTmFtZVwiLCAkcXVvdGVkRnVuY3Rpb25OYW1lLCBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPCRjbGFzc05hbWU+KCkpO1xuIik7CkBAIC00MDQwLDcgKzQw
NDAsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCEkY2hlY2tlZEFyZ3VtZW50LmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgJG5hbWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICBpZiAoJG1heVRo
cm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VMWSghJG5hbWUpKVxuIik7CkBAIC00MDgz
LDcgKzQwODMsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byAkbmFtZSA9ICR7b3V0ZXJ9JHtuYXRpdmVW
YWx1ZX07XG4iKTsKICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFtZSkiOwog
ICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtNDQ2NCw3ICs0NDY0LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5j
dGlvbkNhbGwoKQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuIiAuICRpbmRlbnQgLiAi
c2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7XG4iKSBpZiAkcmFpc2VzRXhjZXB0aW9uOwogCiAg
ICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn0sICJTY3Jp
cHRTdGF0ZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICIg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICB9
CiAKQEAgLTUyNzgsNyArNTI3OCw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmlu
ZyBldmVudFR5cGUgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUp
LT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgJHtpbnRl
cmZhY2VOYW1lfUluaXQgZXZlbnRJbml0OwpAQCAtNTI4Nyw3ICs1Mjg3LDcgQEAgdGVtcGxhdGU8
PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0
LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICAgICAgSlNPYmplY3QqIGlu
aXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChzdGF0ZSk7Ci0gICAg
ICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCF0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkg
d3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAgICAgICAgIEpTRGljdGlvbmFy
eSBkaWN0aW9uYXJ5KHN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CkBAIC01NDMwLDcgKzU0MzAs
NyBAQCBFTkQKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb25zdHJ1Y3RvckNhbGxXaXRoIn0sICJTY3JpcHRTdGF0ZSIpKSB7Ci0gICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEFjdGl2CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG1lc3NhZ2UgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLnBvc3RNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdEN1c3RvCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
YW5vdGhlckZ1bmN0aW9uKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUs
NyArODUsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0g
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFRlc3RFdmVudENvbnN0cnVjdG9y
SW5pdCBldmVudEluaXQ7CkBAIC05NCw3ICs5NCw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAoIWluaXRpYWxpemVyVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewogICAgICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFs
d2F5cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgICAgIEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVj
dCA9IGluaXRpYWxpemVyVmFsdWUudG9PYmplY3Qoc3RhdGUpOwotICAgICAgICBBU1NFUlQoIXN0
YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0
aGUgaW5pdGlhbGl6ZXIgb2JqZWN0LgogICAgICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShz
dGF0ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3Bw
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RFdmVudAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5pdGVtKFdURk1vdmUoaW5kZXgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3LDggQEAgYm9vbCBz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjg1LDcgKzI4
Niw3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnUKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0UmVndWxhckF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yOTYsNyArMjk3LDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzA0LDcgKzMwNiw3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmEK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0UHVibGljQW5k
UHJpdmF0ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zMTYsNyArMzE4LDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQ
cml2YQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxP
YmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzI0LDcgKzMyNyw3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0UHVibGljQW5kUHJpdmEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0UHVibGljQW5kUHJpdmF0ZUNvbmRpdGlvbmFsQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNyw3ICszNDAsOCBAQCBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDUsNyArMzQ5
LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3Miw3
ICszNzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEdsb2JhCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwucmVndWxhck9w
ZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC0zOTMsNyArMzk3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RHbG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFy
YW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFy
YW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDE2
LDcgKzQyMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmEKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQ
YXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMSwxMCArMjMxLDEwIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRo
aXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoVU5MSUtFTFkoIWNvbnRleHQp
KQpAQCAtNjYzLDkgKzY2MywxMCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9y
SW1wbGVtCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIFRlc3RJbnRlcmZhY2U6OnNldEltcGxlbWVudHNTdGF0aWNBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY3OCw3ICs2NzksOCBAQCBi
b29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC02ODYsNyArNjg4
LDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJbXBsZW1lbnRzU3RyMihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02OTksNyArNzAxLDggQEAg
Ym9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyhFeAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzE2LDcgKzcx
OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUoRXgKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTcz
OSw5ICs3NDMsMTAgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdGF0aWNBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc1NCw3ICs3NTks
OCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03NjIs
NyArNzY4LDcgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKAogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1l
bnRhbDo6c2V0U3VwcGxlbWVudGFsU3RyMihpbXBsLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC03NzUsNyArNzgxLDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VTdXBwbGVtZW50YWxTdHIzKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzkyLDcgKzc5OSw4IEBAIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlU3VwcGxlbWVudGFsTm9kZSgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTg1Miw3ICs4NjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyCiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3Ry
QXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJn
dW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKQEAgLTkzMCw3ICs5MzgsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyCiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChz
dGF0ZS0+YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw4IEBAIGJv
b2wgc2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXQKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvcio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEzICs5MSwxMyBA
QCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBzdHIx
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBB
U0NJSUxpdGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMyA9
IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMikudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBhdXRvIG9iamVjdCA9IFRlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGVGb3JKU0NvbnN0
cnVjdG9yKCpjYXN0ZWRUaGlzLT5kb2N1bWVudCgpLCBXVEZNb3ZlKHN0cjEpLCBXVEZNb3ZlKHN0
cjIpLCBXVEZNb3ZlKHN0cjMpLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNyAr
MjA3LDggQEAgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9kZSogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9kZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yMTUsNyArMjE2
LDcgQEAgYm9vbCBzZXRKU1Rlc3ROb2RlTmFtZShFeGVjU3RhdGUqIHN0YXRlLAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROYW1lKFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJt
aW5pc3RpYy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYxLDcgKzM2MSw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRl
dGVybWkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5v
bmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzY5LDcgKzM3MCw3IEBAIGJvb2wgc2V0SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzgwLDcgKzM4MSw4IEBAIGJvb2wg
c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
Mzg4LDcgKzM5MCw3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJt
aW5pc3RpY0V4Y2VwdGlvbkF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMzk5LDcgKzQwMSw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE5vbmRldGVybWluaXN0aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE5vbmRldGVybWluaXN0aWMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDA3LDcgKzQxMCw3IEBAIGJvb2wgc2V0SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY0dldHRlckV4Y2VwdGlvbkF0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE4LDcgKzQyMSw4
IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWkKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5vbmRldGVybWluaXN0
aWMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vbmRldGVybWluaXN0aWMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtNDI3LDcgKzQzMSw3IEBAIGJvb2wgc2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05v
bmRldGVybWkKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MjUsOTcgKzUyNSw5NyBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnk+
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KICAgICBhdXRvIGVudW1lcmF0aW9uVmFs
dWVXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3Rh
dGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJl
bnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVX
aXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJh
dGlvblZhbHVlV2l0aERlZmF1bHQiKSksIFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAg
YXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCA9IGNvbnZlcnRPcHRp
b25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5n
RGVmYXVsdCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVtcHR5U3RyaW5nKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzdHJpbmdX
aXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxTdHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aERlZmF1bHQi
KSksICJkZWZhdWx0U3RyaW5nIik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc3RyaW5nV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0
T3B0aW9uYWw8U3RyaW5nPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBib29sZWFu
V2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aERlZmF1bHQi
KSksIGZhbHNlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8
Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHNlcXVlbmNlT2ZTdHJpbmdz
ID0gY29udmVydE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNlcXVlbmNlT2ZTdHJpbmdzIikp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byByZXN0cmljdGVkRG91YmxlID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUs
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0
cmljdGVkRG91YmxlIikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJp
Y3RlZERvdWJsZSA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRG91Ymxl
IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXN0cmljdGVkRG91YmxlV2l0
aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGVXaXRo
RGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0
ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMsIDApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIHJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVk
RmxvYXQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxv
YXQgPSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXQiKSksIFNob3Vs
ZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0g
Y29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpLCBT
aG91bGRBbGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0V2l0aERl
ZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5yZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxJbnRlZ2Vy
Q2xhbXBlZCA9IGNvbnZlcnRPcHRpb25hbDxpbnQ4X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyQ2xhbXBlZCIp
KSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFs
PGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzbWFsbEludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gc21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlID0gY29udmVydE9wdGlvbmFs
PHVpbnQ4X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlIikpLCBFbmZvcmNl
UmFuZ2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICBhdXRvIHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0
aW9uYWw8dWludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3Jt
YWxDb252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPGludDMyX3Q+
KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiaW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gaW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPGludDMyX3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiaW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3Jt
YWxDb252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnNpZ25lZEludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8
dWludDMyX3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDx1aW50MzJfdD4oc3Rh
dGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1
bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8g
bGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPGludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyIikp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBsYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxD
b252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdlciA9IGNvbnZlcnRPcHRpb25h
bDx1aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gdW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDx1
aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252
ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byogbnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUs
IEpTTm9kZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJudWxsYWJsZU5vZGUiKSksIElzTnVsbGFibGU6Olllcyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYW55VmFs
dWUgPSBjb252ZXJ0T3B0aW9uYWw8SlNDOjpKU1ZhbHVlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImFueVZhbHVlIikpLCBqc1VuZGVm
aW5lZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAgICAgYXV0byBhbnlUeXBlZGVmVmFsdWUgPSBjb252ZXJ0T3B0aW9uYWw8SlNDOjpKU1Zh
bHVlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImFueVR5cGVkZWZWYWx1ZSIpKSwganNVbmRlZmluZWQoKSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZGljdGlvbmFy
eU1lbWJlciA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgImRpY3Rpb25hcnlNZW1iZXIiKSkpOwogICAgIHJldHVybiBUZXN0T2Jq
OjpEaWN0aW9uYXJ5IHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQpLCBX
VEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25W
YWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhEZWZhdWx0KSwg
V1RGTW92ZShzdHJpbmdXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhEZWZhdWx0
KSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJp
bmdzKSwgV1RGTW92ZShyZXN0cmljdGVkRG91YmxlKSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3Vi
bGUpLCBXVEZNb3ZlKHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0
cmljdGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdCksIFdURk1v
dmUodW5yZXN0cmljdGVkRmxvYXQpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0
KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbElu
dGVnZXJDbGFtcGVkKSwgV1RGTW92ZShzbWFsbEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUo
c21hbGxVbnNpZ25lZEludGVnZXJFbmZvcmNlZFJhbmdlKSwgV1RGTW92ZShzbWFsbFVuc2lnbmVk
SW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShpbnRlZ2VyKSwgV1RGTW92ZShpbnRlZ2VyV2l0
aERlZmF1bHQpLCBXVEZNb3ZlKHVuc2lnbmVkSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRJbnRl
Z2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGxhcmdlSW50ZWdlciksIFdURk1vdmUobGFyZ2VJbnRl
Z2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZSh1
bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShudWxsYWJsZU5vZGUpLCBX
VEZNb3ZlKGFueVZhbHVlKSwgV1RGTW92ZShhbnlUeXBlZGVmVmFsdWUpLCBkaWN0aW9uYXJ5TWVt
YmVyLnZhbHVlKCkgfTsKQEAgLTYzMSwxMyArNjMxLDEzIEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8
VGVzdE9iajo6RGljdGlvbmFyeVQKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAg
IGF1dG8gcmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlID0gY29udmVydDxUZXN0T2JqOjpFbnVtVHlw
ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVm
YXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8qIG5vbk51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+
KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAibm9uTnVsbGFibGVOb2RlIikpLCBJc051bGxhYmxlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVxdWlyZWREaWN0
aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oc3Rh
dGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJy
ZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIiKSkpOwogICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9u
YXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbCB7IFdURk1vdmUocmVxdWlyZWRFbnVtZXJhdGlv
blZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpLCAqbm9uTnVsbGFibGVOb2Rl
LCByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OwpAQCAtNjU1LDcgKzY1NSw3IEBA
IHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeVQKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnRPcHRp
b25hbDxUZXN0T2JqOjpFbnVtVHlwZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJlbnVtZXJhdGlvblZhbHVlIikpKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBib29s
ZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8Ym9vbD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91
dERlZmF1bHQiKSkpOwogICAgIHJldHVybiBUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRv
bGVyYXRlTnVsbCB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldp
dGhvdXREZWZhdWx0KSB9OwpAQCAtNjczLDcgKzY3Myw3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8
QWx0ZXJuYXRlRGljdGlvbmFyeU4KICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAg
IGF1dG8gZW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxUZXN0T2JqOjpFbnVtVHlw
ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJlbnVtZXJhdGlvblZhbHVlIikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHQgPSBj
b252ZXJ0T3B0aW9uYWw8Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSkpOwogICAgIHJl
dHVybiBBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZSB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZSks
IFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSB9OwpAQCAtMzA5MCw5ICszMDkwLDEwIEBA
IGJvb2wgc2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmcKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgVGVzdE9iajo6
c2V0U3RhdGljU3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zMTAzLDcgKzMxMDQsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFi
bGVkQnlTZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zMTE4LDcgKzMxMjAsOCBAQCBib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0
ZSogc3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMTI2LDcgKzMxMjksNyBAQCBib29sIHNldEpTVGVzdE9iakVudW1BdHRyKEV4ZWNTdGF0ZSog
c3RhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIHZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MzEzOSw3ICszMTQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0
YQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzE0
Nyw3ICszMTUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpCeXRlQXR0cihFeGVjU3RhdGUqIHN0YQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRCeXRlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zMTU4LDcgKzMxNjIsOCBAQCBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihF
eGVjU3RhdGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zMTY2LDcgKzMxNzEsNyBAQCBib29sIHNldEpTVGVzdE9iak9jdGV0QXR0cihFeGVj
U3RhdGUqIHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDhfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRPY3RldEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE3Nyw3ICszMTgyLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpTaG9ydEF0dHIoRXhlY1N0YXRlKiBzdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzE4NSw3ICszMTkxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpT
aG9ydEF0dHIoRXhlY1N0YXRlKiBzdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U2hvcnRBdHRyKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxOTYsNyArMzIwMiw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyMDQsNyArMzIxMSw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cihFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDbGFtcGVkU2hvcnRBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyMTUsNyArMzIy
Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEUKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyMjMsNyArMzIzMSw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKEUKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
RW5mb3JjZVJhbmdlU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTMyMzQsNyArMzI0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9y
dEF0dHIoRXhlY1MKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTMyNDIsNyArMzI1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0
dHIoRXhlY1MKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjUzLDcgKzMyNjIsOCBAQCBib29sIHNl
dEpTVGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjYxLDcgKzMyNzEsNyBAQCBib29sIHNldEpT
VGVzdE9iakxvbmdBdHRyKEV4ZWNTdGF0ZSogc3RhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRMb25nQXR0cihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjcyLDcgKzMyODIs
OCBAQCBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjgwLDcgKzMyOTEsNyBA
QCBib29sIHNldEpTVGVzdE9iakxvbmdMb25nQXR0cihFeGVjU3RhdGUqCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IGNvbnZlcnQ8aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzI5MSw3ICszMzAyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0
cihFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzI5OSw3ICszMzExLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nQXR0cihF
eAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzMTAsNyArMzMyMiw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzMTgsNyArMzMzMSw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5nQXR0cihFeGVjU3RhdGUqIHMKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zMzI5LDcgKzMzNDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0
cmluZ0F0dHIoRXhlY1N0YXRlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zMzM3LDcgKzMzNTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmlu
Z0F0dHIoRXhlY1N0YXRlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZh
bHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldFVzdnN0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzM0OCw3ICszMzYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0T2Jq
QXR0cihFeGVjU3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzM2OSw3ICszMzg0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0TnVsbGFi
bGVPYmpBdHRyKEV4ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzM5Myw3ICszNDA5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpMZW5pZW50VGVzdE9i
akF0dHIoRXhlYwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzQxNCw3ICszNDMxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRp
bmdOdWxsQQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzQyMiw3ICszNDQwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdO
dWxsQQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJp
bmcoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzQzMyw3ICsz
NDUxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ0MSw3ICszNDYw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSB2YWx1ZVRvVVNWU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgdmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0VXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzQ1Miw3ICszNDcxLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ2MCw3ICszNDgwLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRyKAogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJz
ZTxBbHRlcm5hdGVFbnVtTmFtZT4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVW
YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0NzMsNyArMzQ5Myw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0OTQsNyArMzUxNSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1MDIsNyArMzUyNCw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqQ3JlYXRlKEV4ZWNTdGF0ZSogc3RhdGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29s
ZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldENyZWF0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNTEzLDcgKzM1MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNTIxLDcgKzM1NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpy
ZWZsZWN0ZWRzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzUzMiw3ICszNTU1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZTdHJpbmdBdHRyKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzU0MCw3ICszNTY0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZT
dHJpbmdBdHRyKAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1l
czo6cmVmbGVjdGVkdXN2c3RyaW5nYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTM1NTEsNyArMzU3NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkSW50ZWdyYWxBdHRyKEUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTM1NTksNyArMzU4NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkSW50ZWdyYWxBdHRyKEUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU3MCw3ICszNTk1LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU3OCw3ICszNjA0LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpSZWZsZWN0ZWRVbnNpZ25lZEludGVncgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkSW50
ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1bnNpZ25lZGludGVn
cmFsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM1ODksNyArMzYxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIo
RXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1
OTcsNyArMzYyNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIoRXgK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRib29sZWFuYXR0ckF0dHIsIFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2MDgsNyArMzYzNSw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3QKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2MTYsNyArMzY0NCw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVJMQXR0cihFeGVjU3QKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVybGF0dHJBdHRyLCBXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjI3LDcgKzM2NTUsOCBAQCBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjM1LDcgKzM2NjQsNyBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0dHIoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9V
U1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3Z1cmxhdHRyQXR0ciwgV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzY0Niw3ICszNjc1LDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzY1NCw3ICszNjg0LDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1
ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjY1LDcgKzM2OTUsOCBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjczLDcgKzM3MDQsNyBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUludGVncmFsCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRJbnRlZ3Jh
bEF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
Njg0LDcgKzM3MTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5B
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjky
LDcgKzM3MjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJvb2xlYW5BCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRCb29sZWFuQXR0cmli
dXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEJvb2xlYW5BdHRyQXR0ciwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcwMyw3ICszNzM1LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzcxMSw3ICszNzQ0LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21VUkxBdHRyKAogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFVSTEF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzIzLDcgKzM3NTYsOCBA
QCBib29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzMxLDcgKzM3NjUsNyBAQCBi
b29sIHNldEpTVGVzdE9iakVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1CiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc0Myw3ICszNzc3
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc1MSw3ICszNzg2LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0cihFeGVjU3RhdAogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB0b0Zsb2F0MzJBcnJheSh2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpIHsKICAg
ICAgICAgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAiVGVzdE9i
amVjdCIsICJ0eXBlZEFycmF5QXR0ciIsICJGbG9hdDMyQXJyYXkiKTsKQEAgLTM3NjYsNyArMzgw
MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24KIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3NzQsNyArMzgxMCw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24KICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM3ODUsNyArMzgyMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldp
dGhHZXR0ZXJFeGNlcHRpb24KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM3OTMsNyArMzgzMCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhH
ZXR0ZXJFeGNlcHRpb24KICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzgw
NCw3ICszODQxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbgog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzgxMyw3
ICszODUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2VwdGlvbgogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwpAQCAtMzgyNSw3ICszODYzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4
Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzgzNCw3ICszODczLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aFNldHRlckV4Y2Vw
dGlvbgogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlIGVjOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtMzg0Niw3ICszODg1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4YwogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg1NCw3ICszODk0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyV2l0aEdldHRlckV4YwogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODY1LDcgKzM5MDUsOCBA
QCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODc0LDcgKzM5MTUsNyBAQCBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjCiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKICAgICBz
ZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTM4ODYsNyArMzkyNyw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQ3VzdG9tQXR0cihFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5MDEsNyArMzk0Myw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqT25mb28oRXhlY1N0YXRlKiBzdGF0ZSwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5MTYsNyArMzk1OSw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqT253ZWJraXRmb28oRXhlY1N0YXRlKiAKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTM5MzEsNyArMzk3NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM5MzksNyArMzk4NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFdpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0ZSgqc3RhdGUsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM5NTAsNyArMzk5NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVy
Q2EKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5
NTgsNyArNDAwNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2EK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldFdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRlKCpz
dGF0ZSwgYWN0aXZlRE9NV2luZG93KHN0YXRlKSwgZmlyc3RET01XaW5kb3coc3RhdGUpLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTY5LDcgKzQwMTUsOCBA
QCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTkzLDcgKzQwNDAsOCBAQCBi
b29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDE0LDcgKzQwNjIsOCBAQCBib29s
IHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDM4LDcgKzQwODcsOCBAQCBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250CiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDYyLDcgKzQxMTIsOCBAQCBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDg2LDcgKzQxMzcsOCBAQCBib29sIHNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MTEwLDcgKzQxNjIsOCBAQCBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRBcmd1bWVudHNBbmRDCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MTMyLDcgKzQxODUsOCBAQCBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjEoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00MTQwLDcgKzQxOTQsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjEoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIxKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNTMsNyArNDIwNyw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3QKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxNjEsNyArNDIxNiw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMihFeGVjU3QKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENv
bmRpdGlvbmFsQXR0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtNDE3NCw3ICs0MjI5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4
ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NDE4Miw3ICs0MjM4LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIzKEV4ZWNT
dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTk1LDcgKzQyNTEsOCBAQCBib29sIHNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjRDb25zdHJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MjEyLDcgKzQyNjksOCBAQCBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjVDb25zdHJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00MjI5LDcgKzQyODcsOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjZDb25zdHJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC00MjQ1LDcgKzQzMDQsOCBAQCBib29sIHNldEpTVGVzdE9iakFueUF0dHJp
YnV0ZShFeGVjU3RhdGUqCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MjYyLDcgKzQzMjIsOCBAQCBib29sIHNldEpTVGVzdE9iak11dGFibGVQb2lu
dChFeGVjU3RhdGUqCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC00Mjg2LDcgKzQzNDcsOCBAQCBib29sIHNldEpTVGVzdE9iakltbXV0YWJsZVBvaW50
KEV4ZWNTdGF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC00MzEwLDcgKzQzNzIsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0
YXRlKiBzCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC00MzE4LDcgKzQzODEsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmF3YmVycnkoRXhlY1N0YXRl
KiBzCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRCbHVlYmVycnkoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNDMyOSw3ICs0MzkyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpJZChF
eGVjU3RhdGUqIHN0YXRlLCBFbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDMzNyw3ICs0NDAxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpJZChFeGVj
U3RhdGUqIHN0YXRlLCBFbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SWQoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNDM0OCw3ICs0NDEyLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpSZXBsYWNlYWJsZUF0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtNDM2Myw3ICs0NDI4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpO
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtNDM3MSw3ICs0NDM3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxs
YWJsZUxvbmdTZXR0YWJsZUF0dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVMb25nU2V0dGFibGVB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDM4
Miw3ICs0NDQ4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDM5MCw3
ICs0NDU3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQQogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MDEsNyArNDQ2OCw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWIKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0MDksNyArNDQ3Nyw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWIKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VT
VlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVs
bGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00NDIwLDcgKzQ0ODgsOCBAQCBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlU3RyaW5nVmFsdWUoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00NDI4LDcgKzQ0OTcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxh
YmxlU3RyaW5nVmFsdWUoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZVN0cmluZ1ZhbHVlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MzksNyArNDUwOCw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW4KIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0NDcsNyArNDUxNyw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW4KICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
cGFyc2U8VGVzdE9iajo6T3B0aW9uYWw+KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0
aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDYwLDcgKzQ1MzAsOCBAQCBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDY5LDcgKzQ1NDAsNyBAQCBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKEV4CiAgICAgUmVmPFRlc3ROb2RlPiBm
b3J3YXJkZWRJbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpLnB1dEZvcndhcmRzQXR0cmlidXRl
KCk7CiAgICAgYXV0byYgaW1wbCA9IGZvcndhcmRlZEltcGwuZ2V0KCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQ4MCw3ICs0NTUxLDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cgogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ5MSw3ICs0NTYzLDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgYXV0byYgaW1wbCA9ICpmb3J3YXJkZWRJbXBsOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROYW1lKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1MDIsNyArNDU3NCw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ1MTAsNyArNDU4Myw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUoRXgKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmlu
ZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5naWZpZXJBdHRyaWJ1dGUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDU0Niw3ICs0NjE5LDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24o
V1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNDU2OSw3ICs0NjQyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTQ2MjcsMTAgKzQ3MDAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJn
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFy
Z3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAg
IGlmIChVTkxJS0VMWSghb2JqQXJnKSkKQEAgLTQ2NjgsMTAgKzQ3NDEsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBieXRlQXJnID0gY29udmVydDxpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVu
dCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDcwOSwxMCArNDc4MiwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIG9jdGV0QXJnID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChz
dGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKQEAgLTQ3NTAs
MTAgKzQ4MjMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6
OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJn
KSkKQEAgLTQ3OTEsMTAgKzQ4NjQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJ
S0VMWSghb2JqQXJnKSkKQEAgLTQ4MzIsNyArNDkwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0g
dmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFyZ1RyZWF0
aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShhcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDg1Miw3ICs0OTI1LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byByZXNvbHZlciA9IEpTWFBhdGhOU1Jlc29sdmVyOjp0b1dyYXBwZWQoKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXJlc29s
dmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoWFBhdGhOU1Jl
c29sdmVyUGFyYW1ldGVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOwpAQCAtNDg5OCw3ICs0OTcxLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBpbmRleCA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChzdGF0ZSwgaW1wbC5udWxsYWJsZVN0cmlu
Z1NwZWNpYWxNZXRob2QoV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CkBAIC00OTIwLDcgKzQ5OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgYXV0byBlbnVtQXJnVmFsdWUgPSBzdGF0ZS0+YXJndW1l
bnQoMCk7CiAgICAgVGVzdE9iajo6RW51bVR5cGUgZW51bUFyZzsKICAgICBhdXRvIG9wdGlvbmFs
VmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aEVudW1BcmciLCBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5NDQsNyAr
NTAxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBP
cHRpb25hbDxUZXN0T2JqOjpFbnVtVHlwZT4gZW51bUFyZzsKICAgICBpZiAoIWVudW1BcmdWYWx1
ZS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGVudW1BcmcgPSBwYXJzZTxUZXN0T2JqOjpFbnVt
VHlwZT4oKnN0YXRlLCBlbnVtQXJnVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCFlbnVtQXJnKSkKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVudW1B
cmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnIiwgZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CkBAIC00OTcwLDcgKzUwNDMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIGVu
dW1BcmcgPSBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMTsKICAgICB9IGVsc2UgewogICAg
ICAgICBhdXRvIG9wdGlvbmFsVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRl
LCBlbnVtQXJnVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
aWYgKFVOTElLRUxZKCFvcHRpb25hbFZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVudW1BcmciLCAi
VGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlIiwg
ZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CkBAIC00OTk1
LDcgKzUwNjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNTAy
MCw3ICs1MDkzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhVU1ZTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA0MCw3ICs1MTEzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBz
dHIgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhO
dWxsYWJsZVVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MDYwLDcgKzUxMzMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUwODAsNyArNTE1
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gc2VyaWFsaXplZEFyZyA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIDAsIDApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLnNlcmlhbGl6ZWRWYWx1ZShXVEZNb3ZlKHNlcmlhbGl6ZWRBcmcpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTE3OSw3ICs1
MjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3Vt
ZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTUxOTksNyAr
NTI3Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnB1YmxpY0FuZFByaXZhdGVNZXRob2QoV1RG
TW92ZShhcmd1bWVudCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBA
IC01MjE5LDEzICs1MjkyLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbGlz
dGVuZXIgPSBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShzdGF0ZS0+YXJndW1lbnQoMSksICpjYXN0
ZWRUaGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKHN0YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFs
aXN0ZW5lcikpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgMSwgImxpc3RlbmVyIiwgIlRlc3RPYmplY3QiLCAiYWRkRXZlbnRMaXN0ZW5l
ciIsICJFdmVudExpc3RlbmVyIik7CiAgICAgYXV0byB1c2VDYXB0dXJlID0gc3RhdGUtPmFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuYWRk
RXZlbnRMaXN0ZW5lcihXVEZNb3ZlKHR5cGUpLCAqbGlzdGVuZXIsIFdURk1vdmUodXNlQ2FwdHVy
ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MjQ1
LDEzICs1MzE4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbGlzdGVuZXIg
PSBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShzdGF0ZS0+YXJndW1lbnQoMSksICpjYXN0ZWRUaGlz
LCBmYWxzZSwgY3VycmVudFdvcmxkKHN0YXRlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFsaXN0ZW5l
cikpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMSwgImxpc3RlbmVyIiwgIlRlc3RPYmplY3QiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciIs
ICJFdmVudExpc3RlbmVyIik7CiAgICAgYXV0byB1c2VDYXB0dXJlID0gc3RhdGUtPmFyZ3VtZW50
KDIpLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwucmVtb3Zl
RXZlbnRMaXN0ZW5lcihXVEZNb3ZlKHR5cGUpLCAqbGlzdGVuZXIsIFdURk1vdmUodXNlQ2FwdHVy
ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Mjg0
LDcgKzUzNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndp
dGhTY3JpcHRTdGF0ZU9iaigqc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtNTMyMSw3ICs1Mzk0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0
ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC01MzgwLDcgKzU0NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSk7CiAKICAgICBzZXRE
T01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtNTQwMCw3ICs1NDczLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmICghY29udGV4dCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCpzdGF0ZSwgKmNv
bnRleHQpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwogfQpAQCAtNTQ4Niw3ICs1NTU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhp
cywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmcoV1RGTW92ZShvcHQpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTUwNCw3ICs1NTc3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IDY2NiA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShX
VEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC01NTI0LDEwICs1NTk3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uT3B0ID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxB
cmcoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTQ3LDEzICs1NjIwLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gbm9uT3B0ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MSA9IHN0
YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9wdDIgPSBzdGF0ZS0+
YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoV1RGTW92ZShub25PcHQpLCBXVEZNb3ZlKG9wdDEpLCBX
VEZNb3ZlKG9wdDIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTU3MSw3ICs1NjQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcoV1RGTW92ZShz
dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTU4
OSw3ICs1NjYyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBz
dHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogdmFsdWVU
b1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmcoV1RGTW92ZShz
dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTYw
Nyw3ICs1NjgwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBz
dHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tIDogc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21p
Y1N0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01NjI1LDcgKzU2OTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
QVNDSUlMaXRlcmFsKCJmb28iKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NDMsNyArNTcxNiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBBdG9taWNTdHJpbmcoImZvbyIsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0
YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0
cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NjYx
LDcgKzU3MzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0
ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Njc5LDcg
KzU3NTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQoV1RGTW92ZShz
dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY5
Nyw3ICs1NzcwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZv
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBz
dHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IG51bGxBdG9tIDogc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21p
Y1N0cmluZ0lzTnVsbChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC01NzE1LDcgKzU3ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gZW1wdHlTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzMzLDcgKzU4MDYsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gZW1wdHlTdHJpbmcoKSA6IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzUxLDcgKzU4
MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gZW1wdHlBdG9tIDogc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmlu
Z0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNTc2OSw3ICs1ODQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PGRvdWJsZT4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOKFdURk1vdmUo
bnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU3ODcsNyArNTg2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbnVtYmVyID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNo
b3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhPcHRpb25hbEZsb2F0SXNOYU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTgwNSw3ICs1ODc4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDY0X3Q+KCkgOiBjb252ZXJ0PGlu
dDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01ODIzLDcgKzU4OTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4NDEsNyArNTkx
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1aW50NjRfdD4oKSA6
IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxVbnNpZ25lZExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4NTksNyArNTkzMiw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDx1aW50
NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xv
bmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNTg3Nyw3ICs1OTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVk
VGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBhcnJheSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KCkgOiB0b05hdGl2ZUFycmF5PFN0cmluZz4o
KnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlKFdURk1vdmUoYXJyYXkpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg5NSw3ICs1OTY4
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBhcnJheSA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4oKSA6IHRvTmF0
aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0Vt
cHR5KFdURk1vdmUoYXJyYXkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNTkxMyw3ICs1OTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywg
SlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBiID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRp
b25hbDxib29sPigpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvQm9vbGVhbihzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVh
bihXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTkzMSw3ICs2MDA0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBiID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UoV1RG
TW92ZShiKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTYwMDksNyArNjA4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBSZWZQdHI8WFBhdGhOU1Jlc29sdmVyPiByZXNvbHZlciA9IG51bGxwdHI7CiAgICAg
aWYgKCFzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBy
ZXNvbHZlciA9IEpTWFBhdGhOU1Jlc29sdmVyOjp0b1dyYXBwZWQoKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlcikpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1
bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2Jq
ZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlciIsICJYUGF0aE5TUmVzb2x2
ZXIiKTsKQEAgLTYwNTIsNyArNjEyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1l
bnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0
IiwgIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7CkBAIC02MTE2LDcg
KzYxODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzRnVuY3Rpb24o
KSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsIDEsICJjYWxsYmFjayIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKQEAgLTYyNDksNyArNjMyMiw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICAgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgIm9i
akFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOwogICAg
IH0KICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3Zl
KG9iakFyZyksIFdURk1vdmUoc3RyQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTYyNzUsNyArNjM0OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlw
ZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92
ZXJsb2FkZWRNZXRob2QiLCAiVGVzdE9iaiIpOwogICAgIH0KICAgICBhdXRvIGxvbmdBcmcgPSBz
dGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0
aG9kKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYyOTUsNyArNjM2OCw3IEBAIHN0YXRpYyBp
bmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJn
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYzMTUs
NyArNjM4OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShsb25nQXJnKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYzNzgsNyArNjQ1MSw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJs
b2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDE4LDcgKzY0OTEsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFy
cmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
YXJyYXlBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNjQzOCw3ICs2NTExLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJy
YXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjQ1OCw3ICs2NTMxLDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RG
TW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNjU0Niw3ICs2NjE5LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBUZXN0
T2JqKiBvYmpBcmcgPSBudWxscHRyOwogICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTY1NzgsNyArNjY1MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0Iiwg
Im92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOwogICAg
IH0KICAgICBhdXRvIGxvbmdBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/
IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyKFdURk1vdmUo
b2JqQXJnKSwgV1RGTW92ZShsb25nQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTY2MjQsNyArNjY5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqQ28KICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byBhcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkg
OiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihUZXN0T2JqOjpjbGFzc01ldGhvZFdpdGhPcHRpb25hbChXVEZNb3ZlKGFyZykp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC02NjQ5LDcgKzY3MjIs
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGFyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBU
ZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NjY2LDcgKzY3MzksNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9iakNvCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0aG9kMShXVEZNb3ZlKHR5
cGUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjcw
OSwxMCArNjc4MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8dWlu
dDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgxKSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNs
YXNzTWV0aG9kV2l0aENsYW1wKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdz
TG9uZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02
NzMyLDEwICs2ODA1LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1
aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIEVuZm9yY2VSYW5nZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnc0xvbmcgPSBjb252ZXJ0PHVpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5jbGFzc01ldGhvZFdpdGhFbmZvcmNlUmFuZ2UoV1RGTW92ZShvYmpBcmdz
U2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3NTUsNyArNjgyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdW5z
aWduZWRMb25nU2VxdWVuY2UgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVu
c2lnbmVkTG9uZ1NlcXVlbmNlKFdURk1vdmUodW5zaWduZWRMb25nU2VxdWVuY2UpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjc3Niw3ICs2ODQ5LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gdmFs
dWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdBcnJheUZ1bmN0aW9uKFdURk1v
dmUodmFsdWVzKSwgZWMpKTsKIApAQCAtNjgyMSwxMCArNjg5NCwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG51bGxhYmxlQXJyYXlBcmcgPSB0
b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aEFuZFdpdGhvdXROdWxsYWJsZVNlcXVl
bmNlKFdURk1vdmUoYXJyYXlBcmcpLCBXVEZNb3ZlKG51bGxhYmxlQXJyYXlBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjg0NCw3ICs2OTE3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBlbGVtZW50SWQgPSBBdG9taWNTdHJpbmcoc3RhdGUtPmFyZ3VtZW50
KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhzdGF0ZSkpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLmdldEVsZW1lbnRCeUlkKFdURk1vdmUoZWxlbWVudElk
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY5MjcsNyArNzAw
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbnZlcnQzKFdURk1vdmUo
dmFsdWUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
Njk0Nyw3ICs3MDIwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDQoV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MDEyLDEwICs3MDg1LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gaGVhZCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IHRhaWwgPSB0b05hdGl2
ZUFyZ3VtZW50czxTdHJpbmc+KCpzdGF0ZSwgMSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwudmFyaWFkaWNTdHJpbmdNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwMzUsMTAgKzcx
MDgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29udmVydDxkb3VibGU+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgVmVjdG9yPGRvdWJsZT4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPGRvdWJs
ZT4oKnN0YXRlLCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52YXJpYWRpY0RvdWJs
ZU1ldGhvZChXVEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzA4NywxMCArNzE2MCwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYiA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFueShXVEZNb3ZlKGEpLCBXVEZN
b3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NzEzNyw3ICs3MjEwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRl
LCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VGdW5jdGlvbldpdGhGbG9hdEFyZ3VtZW50
KFdURk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcxODQsNyArNzI1Nyw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYSA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1
bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZShzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MjEwLDcgKzcyODMsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxk
QWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0UHJv
bWlzZU92ZXJsb2FkZWRGdW5jdGlvbihXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0
ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MzI0LDcgKzcz
OTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9h
ZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC03MzQ3LDcgKzc0MjAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoYSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MzkwLDcgKzc0
NjMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC03NDExLDcgKzc0ODQsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdU
Rk1vdmUoYSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC03NDUwLDcgKzc1MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluaXQgPSBjb252ZXJ0RGljdGlvbmFy
eTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwuYXR0YWNoU2hhZG93Um9vdChpbml0LnZhbHVlKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBhcnJheUJ1ZmZlciA9IHRvQXJyYXlCdWZmZXIoc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFhcnJheUJ1ZmZlcikpCiAg
ICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwg
MCwgImFycmF5QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwg
IkFycmF5QnVmZmVyIik7CkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlCdWZm
ZXJWaWV3ID0gdG9BcnJheUJ1ZmZlclZpZXcoc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFhcnJheUJ1ZmZlclZpZXcpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJhcnJh
eUJ1ZmZlclZpZXciLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJy
YXlCdWZmZXJWaWV3Iik7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJpbmcg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUo
V1RGTW92ZShzdHJpbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNy
ZWF0ZWQoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkp
KTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0
cnVjdEpTCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0
ZWRUaGlzKTsKICAgICBWZWN0b3I8aW50MzJfdD4gbG9uZ0FyZ3MgPSB0b05hdGl2ZUFyZ3VtZW50
czxpbnQzMl90Pigqc3RhdGUsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iamVj
dCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoV1RGTW92ZShsb25nQXJncykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxs
ZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmlu
Z3MgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFZlY3RvcjxTdHJpbmc+KCkg
OiB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpjcmVhdGUoV1RGTW92ZShzZXF1ZW5jZU9mU3RyaW5n
cykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpAQCAtODgsNyAr
ODgsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPdmVycgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBuYW1l
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgaW1wbC5uYW1lZEl0ZW0oV1RGTW92ZShuYW1lKSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw4IEBA
IGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTI1OSw3ICsyNjAsNyBAQCBib29sIHNl
dEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRWYWx1ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNzAsNyArMjcxLDgg
QEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjc4LDcgKzI4MCw3IEBAIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENhY2hl
ZFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMyLDcgKzEzMiw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCAKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaGVsbG8gPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtF
TFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgInRlc3RD
YWxsYmFjayIsICJUZXN0VHlwZWRlZnMiLCBudWxscHRyKTsKQEAgLTM2MCw3ICszNjAsOCBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzY4LDcgKzM2OSw3
IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXQKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNzksNyArMzgwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0
YWJsZVNlcmlhbGl6ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5
cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM4Nyw3ICszODksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZz
SW1tdXRhYmxlU2VyaWFsaXplCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJbW11dGFibGVTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzk4
LDcgKzQwMCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2UKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVk
ZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC00MDYsNyArNDA5LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhj
ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE3LDcgKzQyMCw4IEBAIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2UKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MjYsNyArNDMwLDcgQEAgYm9vbCBz
ZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtNDM4LDcgKzQ0Miw4
IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHQKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDYsNyAr
NDUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aEdl
dHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC00NTcsNyArNDYyLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0
dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQ2Niw3ICs0NzIsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldp
dGhTZXR0CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShu
YXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTQ5
MSw3ICs0OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RUeXBlZGVmczo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8geCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPGludDMyX3Q+
KCkgOiB0b05hdGl2ZUFycmF5PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5mdW5jKFdURk1vdmUoeCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTEsMTkgKzUx
NywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHdpZHRoID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIGhlaWdodCA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDEpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgYXV0byBibHVyID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MiksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIGNvbG9yID0gc3RhdGUtPmFyZ3VtZW50KDMpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgzKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGF1dG8gYWxwaGEgPSBzdGF0ZS0+YXJndW1lbnQoNCkuaXNVbmRlZmlu
ZWQoKSA/IE9wdGlvbmFsPGZsb2F0PigpIDogY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoNCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLnNldFNoYWRvdyhXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZSho
ZWlnaHQpLCBXVEZNb3ZlKGJsdXIpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92ZShhbHBoYSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NDMsNyArNTQ5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvUmVmUHRyTmF0aXZlQXJyYXk8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlLCBKU1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzTnVtYmVyKGltcGwubWV0aG9kV2l0aFNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcp
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTYzLDcgKzU2OSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm51
bGxhYmxlU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODMsMTAgKzU4OSwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGFyZzEgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGFyZzIgPSBzdGF0ZS0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIENsYW1wKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5mdW5jV2l0aENsYW1wKFdURk1vdmUoYXJnMSksIFdU
Rk1vdmUoYXJnMikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC02MjIsNyArNjI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RU
eXBlZAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwogICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdT
ZXF1ZW5jZUZ1bmN0aW9uKFdURk1vdmUodmFsdWVzKSwgZWMpKTsKIApAQCAtNjQ1LDcgKzY1MSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHZh
bHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwg
Y2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbjIo
V1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02NjcsNyArNjczLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzZXF1ZW5jZUFyZyA9IHRvUmVmUHRyTmF0aXZlQXJyYXk8VGVzdEV2ZW50VGFyZ2V0LCBKU1Rl
c3RFdmVudFRhcmdldD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQm9vbGVhbihpbXBsLmNhbGxXaXRoU2VxdWVu
Y2VUaGF0UmVxdWlyZXNJbmNsdWRlKFdURk1vdmUoc2VxdWVuY2VBcmcpKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05Q
X2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNv
YmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBf
anNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDEyIEBAIGJvb2wgX05Q
Tl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8KICAgICAgICAgaWYgKCFyb290T2JqZWN0
IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGZ1bmN0aW9uIG9iamVjdC4KICAgICAgICAg
SlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wOwpAQCAtMTkzLDcgKzE5Nyw3IEBAIGJvb2wgX05Q
Tl9JbnZva2VEZWZhdWx0KE5QUCwgTlBPYmplY3QqIG8KIAogICAgICAgICAvLyBDb252ZXJ0IGFu
ZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAgICAgY29udmVy
dFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7ICAgICAgICAKICAgICB9CiAKQEAgLTIyNSw4ICsyMjksMTMgQEAgYm9v
bCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTgogICAgICAgICBSb290T2JqZWN0
KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwogICAgICAgICBpZiAoIXJvb3RPYmplY3Qg
fHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElk
ZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxE
YXRhKTsKQEAgLTI0MCw3ICsyNDksNyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2Jq
ZWN0KiBvLCBOCiAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
dGhlIGZ1bmN0aW9uIGNhbGwuCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMs
IHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMjYwLDE0ICsyNjksMTggQEAgYm9vbCBfTlBOX0V2YWx1YXRlKE5QUCwgTlBPYmplY3Qq
IG8sIE5QUwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgU3RyaW5nIHNjcmlwdFN0cmluZyA9IGNv
bnZlcnROUFN0cmluZ1RvVVRGMTYocyk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIHJldHVy
blZhbHVlID0gSlNDOjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICAg
ICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShz
Y3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICAgICAgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmV0dXJuVmFsdWUsIHZhcmlhbnQpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI4NCwxMCArMjk3LDE0IEBAIGJvb2wgX05QTl9HZXRQ
cm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFy
b290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZp
ZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgIEpTVmFsdWUgcmVzdWx0OwogICAgICAgICBpZiAoaS0+aXNTdHJp
bmcoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmll
ckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKQEAgLTI5NSw3ICszMTIsNyBA
QCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBy
ZXN1bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGktPm51bWJlcigpKTsKIAogICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHQsIHZhcmlhbnQpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMxOCw4ICszMzUsMTIgQEAgYm9vbCBfTlBO
X1NldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3Qg
fHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5h
bWUpOwogCiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CkBAIC0zMjcsNyArMzQ4LDcgQEAg
Ym9vbCBfTlBOX1NldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgb2Jq
LT5pbXAtPm1ldGhvZFRhYmxlKCktPnB1dChvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21O
UElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShl
eGVjLCB2YXJpYW50LCByb290T2JqZWN0KSwgc2xvdCk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqLT5pbXAsIGV4ZWMs
IGktPm51bWJlcigpLCBjb252ZXJ0TlBWYXJpYW50VG9WYWx1ZShleGVjLCB2YXJpYW50LCByb290
T2JqZWN0KSwgZmFsc2UpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTM0NiwyNyArMzY3LDMyIEBAIGJvb2wgX05QTl9SZW1vdmVQcm9wZXJ0eShOUFAsIE5QT2Jq
ZWN0KiAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgYXV0byBn
bG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKwogICAgICAgICBJ
ZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBpZiAoIW9iai0+
aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBp
LT5zdHJpbmcoKSkpKSB7Ci0gICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGktPm51bWJlcigpKSkgewotICAg
ICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqLT5pbXAsIGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJ
ZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgob2JqLT5pbXAs
IGV4ZWMsIGktPm51bWJlcigpKTsKIAotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzgxLDE3ICs0MDcsMjEgQEAgYm9vbCBfTlBOX0hh
c1Byb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwg
IXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRp
ZmllclJlcCo+KHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIo
ZXhlYywgaS0+c3RyaW5nKCkpKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhh
c1Byb3BlcnR5KGV4ZWMsIGktPm51bWJlcigpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKQEAgLTQxNCwxMCArNDQ0LDE0IEBAIGJvb2wgX05QTl9IYXNNZXRob2Qo
TlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2Jq
ZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2Jq
ZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIEpTVmFsdWUgZnVu
YyA9IG9iai0+aW1wLT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywg
aS0+c3RyaW5nKCkpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVk
KCk7CiAgICAgfQogICAgIApAQCAtNDQzLDggKzQ3NywxMiBAQCBib29sIF9OUE5fRW51bWVyYXRl
KE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9i
amVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAg
ICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIGF1dG8g
Z2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncyk7CiAKICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFt
ZXMob2JqLT5pbXAsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKQEAg
LTQ1OCw3ICs0OTYsNyBAQCBib29sIF9OUE5fRW51bWVyYXRlKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAgICAgICAgICppZGVudGlmaWVyID0gaWRlbnRpZmllcnM7CiAgICAgICAgICpjb3VudCA9IHNp
emU7CiAKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtNDc5
LDkgKzUxNywxMyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvCiAg
ICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAg
IGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CisKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIGNvbnN0cnVj
dG9yIG9iamVjdC4KICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IG9iai0+aW1wOwpAQCAt
NDk2LDcgKzUzOCw3IEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28K
ICAgICAgICAgCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgogICAg
ICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDE0ICs2
OCwxMyBAQCB2b2lkIENJbnN0YW5jZTo6c2V0R2xvYmFsRXhjZXB0aW9uKFN0cmluCiAKIHZvaWQg
Q0luc3RhbmNlOjptb3ZlR2xvYmFsRXhjZXB0aW9uVG9FeGVjU3RhdGUoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCiAgICAgaWYgKGdsb2JhbEV4Y2VwdGlvblN0cmluZygpLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMs
IGdsb2JhbEV4Y2VwdGlvblN0cmluZygpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4
dEludGVybmFsLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlSW50ZXJuYWwuaD4K
ICNpbXBvcnQgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgorI2ltcG9ydCA8cnVudGltZS9DYXRj
aFNjb3BlLmg+CiAjaW1wb3J0IDxydW50aW1lL0NvbXBsZXRpb24uaD4KICNpbXBvcnQgPHJ1bnRp
bWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2ltcG9ydCA8cnVudGltZS9KU0dsb2JhbE9iamVj
dC5oPgpAQCAtMTI5LDggKzEzMCwxMCBAQCBzdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNv
bGUoRXhlY1N0CiAKIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0gICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgSlNDOjpWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYywgZXhjZXB0
aW9uKTsKIH0KIApAQCAtMzM0LDkgKzMzNywxMiBAQCAtIChpZCljYWxsV2ViU2NyaXB0TWV0aG9k
OihOU1N0cmluZyAqKW5hCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBMb29rIHVwIHRo
ZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xv
YmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRv
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJBTShzY29w
ZSk7CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb24gPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKG5hbWUpKSk7CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CkBAIC0zNjksMTAgKzM3NSwxMiBAQCAtIChpZClldmFsdWF0ZVdlYlNjcmlw
dDooTlNTdHJpbmcgKilzY3JpCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7Ci0KLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
YXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBVTlVTRURfUEFSQU0o
c2NvcGUpOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTTWFpblRocmVh
ZEV4ZWNTdGF0ZTo6cHJvZmlsZWRFdmFsdWF0ZShleGVjLCBKU0M6OlByb2ZpbGluZ1JlYXNvbjo6
T3RoZXIsIG1ha2VTb3VyY2UoU3RyaW5nKHNjcmlwdCkpLCBKU0M6OkpTVmFsdWUoKSk7CiAKQEAg
LTM4NiwxNyArMzk0LDE5IEBAIC0gKHZvaWQpc2V0VmFsdWU6KGlkKXZhbHVlIGZvcktleTooTlNT
dHIKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0
byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAg
IGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4oW3NlbGYgX2ltcF0pOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0LCBleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSwgY29udmVydE9iamNWYWx1ZVRvVmFs
dWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgc2xv
dCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVj
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICB9CiB9CiAKQEAgLTQwNSwyMiArNDE1LDI1IEBAIC0gKGlkKXZhbHVl
Rm9yS2V5OihOU1N0cmluZyAqKWtleQogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7Ci0KICAgICBpZCByZXN1bHRPYmo7CiAgICAgeworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCiAgICAgICAgIC8vIE5lZWQgdG8g
c2NvcGUgdGhpcyBsb2NrIHRvIGVuc3VyZSB0aGF0IHdlIHJlbGVhc2UgdGhlIGxvY2sgYmVmb3Jl
IGNhbGxpbmcKICAgICAgICAgLy8gW3N1cGVyIHZhbHVlRm9yS2V5OmtleV0gd2hpY2ggbWlnaHQg
dGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBieXBhc3MgdGhlIEpTTG9jayBkZXN0cnVjdG9yLAogICAg
ICAgICAvLyBsZWF2aW5nIHRoZSBsb2NrIHBlcm1hbmVudGx5IGhlbGQKLSAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgICAgIAorICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKwogICAg
ICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAgICAgICAgIAotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwog
ICAgICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICB9CiAKICAgICAgICAgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZh
bHVlVG9PYmpjVmFsdWU6cmVzdWx0IG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJvb3RP
YmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKQEAgLTQzNywxNSArNDUwLDE3
IEBAIC0gKHZvaWQpcmVtb3ZlV2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWsKICAgICBpZiAoIVtz
ZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm47CiAKLSAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3Qg
PSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
ICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkoW3NlbGYgX2lt
cF0sIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgIH0KIH0KIApAQCAtNDU0LDE1ICs0NjksMTcgQEAgLSAoQk9PTCloYXNXZWJTY3Jp
cHRLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAg
ICAgICAgcmV0dXJuIE5POwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgQk9PTCByZXN1bHQgPSBb
c2VsZiBfaW1wXS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCBTdHJpbmcoa2V5KSkpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25U
b0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTQ5MCwxNiArNTA3LDE4IEBAIC0gKGlkKXdlYlNjcmlwdFZhbHVlQXRJbmRleDoodW5zaWduZWQp
aW4KICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsK
KyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBd
LT5nZXQoZXhlYywgaW5kZXgpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRp
b25Ub0NvbnNvbGUoZXhlYyk7CiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgfQogCiAgICAgaWQgcmVzdWx0T2JqID0gW1dlYlNjcmlwdE9iamVjdCBfY29udmVy
dFZhbHVlVG9PYmpjVmFsdWU6cmVzdWx0IG9yaWdpblJvb3RPYmplY3Q6W3NlbGYgX29yaWdpblJv
b3RPYmplY3RdIHJvb3RPYmplY3Q6W3NlbGYgX3Jvb3RPYmplY3RdXTsKQEAgLTUxMiwxNSArNTMx
LDE3IEBAIC0gKHZvaWQpc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ24KICAgICBpZiAo
IVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm47CiAKLSAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmpl
Y3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKICAgICBbc2VsZiBfaW1wXS0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChbc2VsZiBfaW1w
XSwgZXhlYywgaW5kZXgsIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIGZhbHNlKTsKIAotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw5IEBAIHN0YXRpYyBib29sIGNvbnRhaW5zT25s
eUFTQ0lJV2l0aE5vVXBwZXIKICAgICAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0RG9tYWlu
TGlzdChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBhcnJheU9iamVjdCwgVmVjdG9y
PFN0cmluZz4mIHZlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQVNTRVJUKHZlY3Rvci5pc0Vt
cHR5KCkpOwogICAgIGlmICghYXJyYXlPYmplY3QgfHwgIWlzSlNBcnJheShhcnJheU9iamVjdCkp
CiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWlu
TGlzdDsKQEAgLTcxLDcgKzc0LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5M
aXN0KEV4ZQogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3QgSlNWYWx1
ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZS5pc1N0cmluZygpKQorICAgICAgICBpZiAoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CiAgICAgICAgIAogICAgICAg
ICAvLyBEb21haW5zIHNob3VsZCBiZSBwdW55Y29kZSBlbmNvZGVkIGxvd2VyIGNhc2UuCkBAIC04
NywxMSArOTAsMTQgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZQog
CiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldFR5cGVGbGFncyhFeGVjU3RhdGUmIGV4ZWMsIGNv
bnN0IEpTVmFsdWUmIHR5cGVWYWx1ZSwgUmVzb3VyY2VGbGFncyYgZmxhZ3MsIHVpbnQxNl90ICgq
c3RyaW5nVG9UeXBlKShjb25zdCBTdHJpbmcmKSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF0
eXBlVmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGNvbnN0IEpT
T2JqZWN0KiBvYmplY3QgPSB0eXBlVmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgIEFTU0VSVCgh
ZXhlYy5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgaWYgKCFpc0pTQXJyYXkob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJheTsKIApAQCAtMTAwLDcgKzEwNiw3
IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSBhcnJheS0+Z2V0
SW5kZXgoJmV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFs
dWUpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAg
ICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVHJpZ2dl
ckZsYWdzQXJyYXk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZleGVjKTsKQEAgLTExNiwxMiArMTIyLDE1IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAgICAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRy
aWdnZXIoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVjdCYgcnVsZU9iamVjdCwgVHJpZ2dl
ciYgdHJpZ2dlcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgSlNWYWx1ZSB0cmlnZ2VyT2Jq
ZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMs
ICJ0cmlnZ2VyIikpOwotICAgIGlmICghdHJpZ2dlck9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlv
bigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgaWYgKCF0cmlnZ2VyT2JqZWN0
IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlcjsKICAg
ICAKICAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlck9iamVjdCA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlciIpKTsKLSAg
ICBpZiAoIXVybEZpbHRlck9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0
ZXJPYmplY3QuaXNTdHJpbmcoKSkKKyAgICBpZiAoIXVybEZpbHRlck9iamVjdCB8fCBzY29wZS5l
eGNlcHRpb24oKSB8fCAhdXJsRmlsdGVyT2JqZWN0LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVy
biBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVVJMRmlsdGVySW5UcmlnZ2VyOwog
CiAgICAgU3RyaW5nIHVybEZpbHRlciA9IHVybEZpbHRlck9iamVjdC50b1dURlN0cmluZygmZXhl
Yyk7CkBAIC0xMzEsMTEgKzE0MCwxMSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmln
Z2VyKEV4ZWNTCiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAKICAgICBjb25z
dCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2
ZSIpKTsKLSAgICBpZiAodXJsRmlsdGVyQ2FzZVZhbHVlICYmICFleGVjLmhhZEV4Y2VwdGlvbigp
ICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICBpZiAodXJsRmlsdGVyQ2Fz
ZVZhbHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNCb29s
ZWFuKCkpCiAgICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmls
dGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhlYyk7CiAKICAgICBjb25zdCBKU1ZhbHVlIHJlc291
cmNlVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMsICJyZXNvdXJjZS10eXBlIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRp
b24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1
dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgcmVzb3VyY2VUeXBlVmFsdWUs
IHRyaWdnZXIuZmxhZ3MsIHJlYWRSZXNvdXJjZVR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdz
RXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNDMsNyArMTUy
LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5
OwogCiAgICAgY29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJsb2FkLXR5cGUiKSk7Ci0gICAg
aWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmplY3QoKSkgewor
ICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7
CiAgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgbG9hZFR5
cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZExvYWRUeXBlKTsKICAgICAgICAgaWYgKHR5cGVG
bGFnc0Vycm9yKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9yOwpAQCAtMTUxLDcg
KzE2MCw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NB
cnJheTsKIAogICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIpKTsKLSAgICBp
ZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkgeworICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkgewogICAgICAgICBh
dXRvIGlmRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KGlmRG9tYWlu
KSwgdHJpZ2dlci5kb21haW5zKTsKICAgICAgICAgaWYgKGlmRG9tYWluRXJyb3IpCiAgICAgICAg
ICAgICByZXR1cm4gaWZEb21haW5FcnJvcjsKQEAgLTE2Myw3ICsxNzIsNyBAQCBzdGF0aWMgc3Rk
OjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAKICAgICBjb25zdCBKU1Zh
bHVlIHVubGVzc0RvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAidW5sZXNzLWRvbWFpbiIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhj
ZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3BlLmV4
Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAgIGlmICh0cmln
Z2VyLmRvbWFpbkNvbmRpdGlvbiAhPSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUpCiAg
ICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5sZXNzQW5kSWZE
b21haW47CiAgICAgICAgIGF1dG8gdW5sZXNzRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4
ZWMsIGFzT2JqZWN0KHVubGVzc0RvbWFpbiksIHRyaWdnZXIuZG9tYWlucyk7CkBAIC0xODksMTMg
KzE5OCwxNiBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoY29uc3QgU3RyaW5nCiAKIHN0
YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpT
T2JqZWN0JiBydWxlT2JqZWN0LCBBY3Rpb24mIGFjdGlvbiwgYm9vbCYgdmFsaWRTZWxlY3RvcikK
IHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgdmFsaWRTZWxlY3RvciA9IHRydWU7CiAgICAgY29uc3QgSlNW
YWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgImFjdGlvbiIpKTsKLSAgICBpZiAoIWFjdGlvbk9iamVjdCB8fCBleGVj
LmhhZEV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIWFj
dGlvbk9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0
aW9uOwogCiAgICAgY29uc3QgSlNWYWx1ZSB0eXBlT2JqZWN0ID0gYWN0aW9uT2JqZWN0LmdldCgm
ZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInR5cGUiKSk7Ci0gICAgaWYgKCF0
eXBlT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmco
KSkKKyAgICBpZiAoIXR5cGVPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmpl
Y3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWRBY3Rpb25UeXBlOwogCiAgICAgU3RyaW5nIGFjdGlvblR5cGUgPSB0eXBlT2JqZWN0
LnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTIwOCw3ICsyMjAsNyBAQCBzdGF0aWMgc3RkOjplcnJv
cl9jb2RlIGxvYWRBY3Rpb24oRXhlY1N0CiAgICAgICAgIGFjdGlvbiA9IEFjdGlvblR5cGU6OkJs
b2NrQ29va2llczsKICAgICBlbHNlIGlmIChhY3Rpb25UeXBlID09ICJjc3MtZGlzcGxheS1ub25l
IikgewogICAgICAgICBKU1ZhbHVlIHNlbGVjdG9yID0gYWN0aW9uT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInNlbGVjdG9yIikpOwotICAgICAgICBpZiAo
IXNlbGVjdG9yIHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlzU3RyaW5nKCkp
CisgICAgICAgIGlmICghc2VsZWN0b3IgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9y
LmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZTsKIAogICAgICAgICBTdHJpbmcgcyA9
IHNlbGVjdG9yLnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTI0NiwxNyArMjU4LDIwIEBAIHN0YXRp
YyBzdGQ6OmVycm9yX2NvZGUgbG9hZFJ1bGUoRXhlY1N0YXQKIAogc3RhdGljIHN0ZDo6ZXJyb3Jf
Y29kZSBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3RyaW5nJiBydWxl
cywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsZUxpc3QpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIC8vIEZJWE1FOiBKU09OUGFyc2Ugc2hvdWxkIHJlcXVpcmUgY2FsbGJhY2tzIGluc3Rl
YWQgb2YgYW4gRXhlY1N0YXRlLgogICAgIGNvbnN0IEpTVmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNP
TlBhcnNlKCZleGVjLCBydWxlcyk7CiAKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAh
ZGVjb2RlZFJ1bGVzKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVz
KQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZDsKIAog
ICAgIGlmICghZGVjb2RlZFJ1bGVzLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0OwogCiAgICAg
Y29uc3QgSlNPYmplY3QqIHRvcExldmVsT2JqZWN0ID0gZGVjb2RlZFJ1bGVzLnRvT2JqZWN0KCZl
eGVjKTsKLSAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKCF0b3BMZXZlbE9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmpl
Y3Q7CiAgICAgCiAgICAgaWYgKCFpc0pTQXJyYXkodG9wTGV2ZWxPYmplY3QpKQpAQCAtMjcyLDEx
ICsyODcsMTEgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVzKAogICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9vTWFueVJ1bGVzOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBK
U1ZhbHVlIHZhbHVlID0gdG9wTGV2ZWxBcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOwotICAgICAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFsdWUpCisgICAgICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVG9wTGV2ZWxBcnJheTsKIAogICAgICAgICBjb25z
dCBKU09iamVjdCogcnVsZU9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KCZleGVjKTsKLSAgICAgICAg
aWYgKCFydWxlT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghcnVs
ZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkUnVsZTsKIAogICAgICAgICBhdXRvIGVycm9yID0g
bG9hZFJ1bGUoZXhlYywgKnJ1bGVPYmplY3QsIGxvY2FsUnVsZUxpc3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDAyLDYgKzQwMDIsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRU
cmFjCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEhUTUxNZWRpYUVsZW1l
bnQmIG1lZGlhKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8gbWVkaWFKU1dy
YXBwZXIgPSB0b0pTKCZleGVjLCAmZ2xvYmFsT2JqZWN0LCBtZWRpYSk7CiAgICAgCiAgICAgLy8g
UmV0cmlldmUgdGhlIGNvbnRyb2xsZXIgdGhyb3VnaCB0aGUgSlMgb2JqZWN0IGdyYXBoCkBAIC00
MDA5LDE4ICs0MDExLDE4IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUo
SlMKICAgICBpZiAoIW1lZGlhSlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKICAgICAKLSAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksICJjb250cm9sc0hvc3QiKTsKKyAgICBK
U0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgImNvbnRyb2xzSG9zdCIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sc0hvc3RKU1dy
YXBwZXIgPSBtZWRpYUpTV3JhcHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sc0hvc3QpOwot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCiAgICAgSlNDOjpKU09i
amVjdCogY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpT
Qzo6SlNPYmplY3QqPihjb250cm9sc0hvc3RKU1dyYXBwZXIpOwogICAgIGlmICghY29udHJvbHNI
b3N0SlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKIAotICAg
IEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMudm0oKSwgImNvbnRyb2xsZXIiKTsKKyAgICBKU0M6OklkZW50aWZpZXIgY29udHJv
bGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xsZXIiKTsK
ICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTV3JhcHBlciA9IGNvbnRyb2xzSG9zdEpTV3Jh
cHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sbGVySUQpOwotICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwogCiAgICAgcmV0dXJuIGNvbnRyb2xsZXJKU1dyYXBwZXI7
CkBAIC00MDU3LDggKzQwNTksMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0
aW9uQ29udAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3Vt
ZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5n
bG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpl
eGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxl
ck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY29udHJvbGxlclZh
bHVlKTsKQEAgLTQwODMsNyArNDA4Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
Q2FwdGlvbkNvbnQKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbm9Bcmd1bWVudHM7
CiAgICAgSlNDOjpjYWxsKGV4ZWMsIG1ldGhvZE9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBj
b250cm9sbGVyT2JqZWN0LCBub0FyZ3VtZW50cyk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgbV9oYXZlU2V0VXBDYXB0aW9u
Q29udGFpbmVyID0gdHJ1ZTsKICNlbmRpZgpAQCAtNjYwMyw4ICs2NjA3LDEwIEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBET01XcmFwcGVyV29ybGQmIHdv
cmxkID0gZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlw
dENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0
YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZ2xv
YmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJj
cmVhdGVDb250cm9scyIpKTsKICAgICBpZiAoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpCkBA
IC02NjE3LDggKzY2MjMsOCBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29u
dHJvCiAgICAgVVJMIHNjcmlwdFVSTDsKICNlbmRpZgogICAgIHNjcmlwdENvbnRyb2xsZXIuZXZh
bHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUobWVkaWFDb250cm9sc1NjcmlwdCwgc2NyaXB0
VVJMKSwgd29ybGQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtNjY3Niw4ICs2NjgyLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2gKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRy
b2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlw
dENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIC8vIFRoZSBtZWRpYSBjb250cm9scyBzY3JpcHQgbXVzdCBwcm92
aWRlIGEgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyBkZXRhaWxzLgogICAgIC8vIE5hbWU6IGNy
ZWF0ZUNvbnRyb2xzCkBAIC02NzA0LDIxICs2NzEyLDIxIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6ZGlkQWRkVXNlckFnZW50U2gKICAgICBhcmdMaXN0LmFwcGVuZChtZWRpYUNvbnRyb2xzSG9z
dEpTV3JhcHBlcik7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFs
dWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCkt
PmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpT
Qzo6Q2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNWYWx1ZSBj
b250cm9sbGVyVmFsdWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxs
RGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJv
bGxlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY29udHJvbGxl
clZhbHVlKTsKICAgICBpZiAoIWNvbnRyb2xsZXJPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIENvbm5lY3QgdGhlIE1lZGlhLCBNZWRpYUNvbnRyb2xsZXJIb3N0LCBhbmQgQ29udHJv
bGxlciBzbyB0aGUgR0Mga25vd3MgYWJvdXQgdGhlaXIgcmVsYXRpb25zaGlwCiAgICAgSlNDOjpK
U09iamVjdCogbWVkaWFKU1dyYXBwZXJPYmplY3QgPSBtZWRpYUpTV3JhcHBlci50b09iamVjdChl
eGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLT52bSgpLCAiY29udHJvbHNIb3N0Iik7CiAg
ICAgCiAgICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywg
Y29udHJvbHNIb3N0KSk7CkBAIC02NzM4LDggKzY3NDYsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAgICAgdXBkYXRlUGFnZVNjYWxlRmFjdG9ySlNQcm9wZXJ0
eSgpOwogICAgIHVwZGF0ZVVzZXNMVFJVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uSlNQcm9w
ZXJ0eSgpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c2V0TWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wgZGVwZW5kc09u
UGFnZVNjYWxlKQpAQCAtNjc3NCwyMSArNjc4MiwyMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnVwZGF0ZU1lZGlhQ29udHJvCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGVuc3VyZUlz
b2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0g
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9s
bGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFs
dWUoKmV4ZWMsICpnbG9iYWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250
cm9sbGVyT2JqZWN0ID0gY29udHJvbGxlclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0g
Y29udHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlv
biA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24t
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCkBAIC02ODE1LDIxICs2ODI1LDIzIEBA
IFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgIFNjcmlwdENv
bnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250
cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRo
aXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVyVmFs
dWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGNvbnRyb2xsZXJPYmpl
Y3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImdldEN1cnJl
bnRDb250cm9sc1N0YXR1cyIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgfHwgZnVu
Y3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0
aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CkBAIC02ODM4LDcgKzY4NTAsNyBAQCBTdHJpbmcg
SFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAKICAgICBKU0M6OkpTVmFsdWUgb3V0
cHV0VmFsdWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Y29udHJvbGxlck9iamVjdCwgYXJnTGlzdCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gb3V0cHV0VmFsdWUuZ2V0U3RyaW5nKGV4ZWMp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsOSArMzkyLDExIEBAIHZvaWQg
SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckEKIAogICAgIFNjcmlwdENvbnRyb2xs
ZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KGlzb2xhdGVkV29ybGQpKTsK
LSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJnTGlzdDsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgcm9vdCkpOwpAQCAtNDA4LDggKzQxMCw4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6ZGlkQWRkVXNlckEKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMgZmlsZSBw
cm92aWRlcyBhIGNyZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxlKSBmdW5j
dGlvbi4KICAgICBKU0M6OkpTT2JqZWN0KiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVPdmVybGF5IikpLnRv
T2JqZWN0KGV4ZWMpOwogICAgIGlmICghb3ZlcmxheSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7
CkBAIC00MTgsNyArNDIwLDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRV
c2VyQQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OmNhbGwoZXhlYywgb3ZlcmxheSwgY2Fs
bFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogYm9vbCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjpwYXJ0T2ZTbmFwc2hvdE92ZXJsYXkoY29uc3QgTm9kZSogbm9k
ZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDEwICsxMDEsMTIgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNN
ZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fanNPYmplY3QtPmdldChl
eGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOyAg
ICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICByZXR1cm4gZ2V0Q2FsbERhdGEodmFs
dWUsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZTsKQEAgLTE0Nyw3ICsxNDksOSBAQCBib29s
IE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYm9vbCByZXN1bHQ7
CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCkBAIC0xNTUsNyArMTU5LDcgQEAg
Ym9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGVsc2UKICAgICAg
ICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllclJlcC0+
bnVtYmVyKCkpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2Nyw3ICsxNzEsMTAg
QEAgYm9vbCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhl
YykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSBq
c1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKICAgICAgICAganNS
ZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVw
KGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE3NSw3ICsxODIsNyBAQCBib29sIE5QSlNPYmpl
Y3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVj
dC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICAKICAgICBtX29iamVj
dE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCBqc1Jlc3VsdCwgKnJlc3VsdCk7
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODcsNyArMTk0LDkgQEAgYm9vbCBOUEpTT2Jq
ZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IG1f
b2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5n
bG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmco
KSkgewpAQCAtMTk1LDcgKzIwNCw3IEBAIGJvb2wgTlBKU09iamVjdDo6c2V0UHJvcGVydHkoTlBJ
ZGVudGlmaWUKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG1fanNPYmpl
Y3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlm
aWVyUmVwKSwganNWYWx1ZSwgc2xvdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fanNPYmplY3Qt
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRp
ZmllclJlcC0+bnVtYmVyKCksIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMDgsMjYgKzIxNywyOSBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3Bl
cnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewogICAgICAg
ICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhl
YywgaWRlbnRpZmllclJlcCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhh
c1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qc09iamVj
dC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkobV9qc09iamVjdC5nZXQoKSwgZXhlYywg
aWRlbnRpZmllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX2pzT2JqZWN0LT5oYXNQ
cm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpIHsKLSAgICAgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgbV9qc09i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG1fanNPYmplY3QuZ2V0
KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICB9CiAKLSAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTI1OSw3ICsyNzEsOSBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVj
dChjb25zdCBOUFZhcmlhCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29u
c3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShtX2pzT2JqZWN0Lmdl
dCgpLCBjb25zdHJ1Y3REYXRhKTsKQEAgLTI3NSwxMyArMjg5LDE2IEBAIGJvb2wgTlBKU09iamVj
dDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWEKICAgICAKICAgICAvLyBDb252ZXJ0IGFuZCByZXR1
cm4gdGhlIG5ldyBvYmplY3QuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZh
cmlhbnQoZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIE5QSlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRz
LCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5
cGU6Ok5vbmUpCkBAIC0yOTYsNyArMzEzLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoRXhl
Y1N0YXRlKiBleGVjLAogCiAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
dGhlIGZ1bmN0aW9uIGNhbGwuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZh
cmlhbnQoZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODg1LDggKzg4NSwxMSBAQCBib29sIE5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS52bSgpKTsK
LSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpLnZt
KCksIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOworICAgIFZN
JiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgU3Ryb25nPEpT
R2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3Qodm0sIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOwogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihhbGxvd1BvcHVwcyA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9j
ZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CkBAIC04OTQsNyArODk3LDcgQEAgYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdCkpOwogICAgIAogICAgIG1hcnNo
YWxWYWx1ZShleGVjLCByZXN1bHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC05MTUsOSArOTE4LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjppbnZva2UKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZp
ZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtOTMwLDcgKzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICAK
ICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05NDgsOSArOTU0LDEyIEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsgICAgCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUg
PSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpOwog
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKQEAgLTk2Miw3ICs5NzEsNyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGNhbGwoZXhlYywgb2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlz
dCk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1
bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTgwLDkgKzk4OSwxMiBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgRnJhbWUqIGZyYW1l
ID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCku
Z2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAg
Q29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRD
b25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0RGF0YSk7CkBAIC05OTUsNyArMTAwNyw3IEBA
IGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBKU1ZhbHVlIHZh
bHVlID0gSlNDOjpjb25zdHJ1Y3QoZXhlYywgb2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1
Y3REYXRhLCBhcmdMaXN0KTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJl
c3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDEz
LDEzICsxMDI1LDE2IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8K
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVl
KGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KICAgICAKQEAgLTEwMzQsMTMgKzEwNDksMTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmdldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5X
b3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAK
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAg
ICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0
aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDU4LDE1ICsxMDc2LDE4IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsgICAgCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhl
YywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTA4NCwxNCArMTEwNSwxNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0
UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZt
ID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFs
dWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsK
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMTEwLDE1ICsxMTM0LDE4IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpy
ZW1vdmUKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWTSYg
dm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+
aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAgICAgCkBAIC0xMTM2LDE2ICsxMTYzLDE5IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZp
ZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAg
ICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTYzLDExICsxMTkzLDE1IEBAIGJv
b2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm8KICAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5n
bG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAgICBib29sIHJlc3Vs
dCA9IG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwotICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTg1LDExICsxMjE5LDE1IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAgICBib29sIHJlc3VsdCA9IG9iamVj
dC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOwotICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKICAgICByZXR1cm4g
cmVzdWx0OwogfQogICAgIApAQCAtMTIwNywxMSArMTI0NSwxNCBAQCBib29sIE5ldHNjYXBlUGx1
Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVn
aW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBs
dWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CiAgICAgSlNWYWx1ZSBmdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
IHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMjI5LDkgKzEyNzAsMTIgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0o
KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgp
Lmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMo
ZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlKCkpOwpAQCAtMTI1MSw3ICsxMjk1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmVudW1lcgogCiAgICAgbWVtY3B5KHJlc3VsdERhdGEsIFtkYXRhIGJ5dGVz
XSwgcmVzdWx0TGVuZ3RoKTsKIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTM2LDYgKzY5
MzYsOSBAQCAtIChCT09MKXNob3VsZENsb3NlCiAjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBO
U0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgTlNBcHBsZUV2ZW50
RGVzY3JpcHRvciogYWVEZXNjID0gMDsKICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkKICAg
ICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVh
bjpqc1ZhbHVlLmFzQm9vbGVhbigpXTsKQEAgLTY5NzYsOCArNjk3OSw4IEBAIHN0YXRpYyBOU0Fw
cGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBKU0M6OkpTVmFsdWUgcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVj
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAg
cmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIG51bGxEZXNjcmlwdG9yXTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoZXhlYywgcHJpbWl0aXZlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287904</attachid>
            <date>2016-09-04 08:22:52 -0700</date>
            <delta_ts>2016-09-06 11:14:22 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>785888</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNjI2LDYgKzYyNiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGlt
ZS9Cb29sZWFuT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0NhbGxEYXRhLmNwcAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBy
dW50aW1lL0Nsb25lZEFyZ3VtZW50cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAg
ICBydW50aW1lL0NvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwCkBAIC02NTUsOCArNjU2LDExIEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNw
cAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24u
Y3BwCisgICAgcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNw
cAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3Ry
dWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8SW1wdXJlR2V0dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+
bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTAzMywxMSArMTAzNSwxNCBA
QCBzdGF0aWMgU3RyaW5nIHJlc29sdmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQ
cm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUg
a2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBj
b25zdCBJZGVudGlmaWVyIGtleSA9IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IH0KIApAQCAtMTA1MCw5ICsxMDU1LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVj
dDo6bW9kdWxlTAogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVu
dCB3b3JraW5nIGRpcmVjdG9yeS4iKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXIgcmVmZXJyZXIgPSByZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJy
ZXIuaXNTeW1ib2woKSkgewpAQCAtMTEzOCwxMSArMTE0MywxMyBAQCBzdGF0aWMgYm9vbCBmZXRj
aE1vZHVsZUZyb21Mb2NhbEZpbGVTeXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmpl
Y3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgU3RyaW5nIG1vZHVsZUtleSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQog
CkBAIC0xMjUzLDkgKzEyNjAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uQ3JlCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVu
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBSb290KiByb290ID0g
anNEeW5hbWljQ2FzdDxSb290Kj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghcm9vdCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY3JlYXRlIEVsZW1lbnQg
d2l0aG91dCBhIFJvb3QuIikpKSk7CkBAIC0xNDQzLDcgKzE0NTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE0
NzcsNyArMTQ4NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4K
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLCBHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpLCBWZWN0b3I8U3RyaW5nPigp
KTsKQEAgLTE1MDUsNyArMTUxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9j
YWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTUyNiw3ICsxNTMzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2VDb2RlID0gZXhlYy0+
YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKIApAQCAtMTU0Myw3ICsx
NTUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFt
ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxj
aGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVO
YW1lLCBzY3JpcHQpKQpAQCAtMTU1OCw3ICsxNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNoZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNj
cmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNjE4LDggKzE2
MjUsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0UmFuZG9tU2VlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBzZWVkID0gZXhlYy0+YXJndW1l
bnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT53ZWFrUmFuZG9tKCkuc2V0U2VlZChzZWVkKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtMTg3MiwxNCArMTg4MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJDb3VsZCBub3Qgb3BlbiBmaWxlLiIpKSkpOwogCiAg
ICAgSlNJbnRlcm5hbFByb21pc2UqIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZXhl
YywgZmlsZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBlcnJvcjsKQEAgLTE4OTcsMTQgKzE5MDcs
MTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlQnVpbHRpbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSB8
fCAhZXhlYy0+YXJndW1lbnQoMCkuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBmdW5jdGlvblRleHQgPSBleGVj
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UgPSBtYWtlU291cmNlKGZ1bmN0aW9uVGV4
dCk7CiAgICAgSlNGdW5jdGlvbiogZnVuYyA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5j
dGlvbih2bSwgY3JlYXRlQnVpbHRpbkV4ZWN1dGFibGUodm0sIHNvdXJjZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJmb28iKSwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBDb25zdHJ1Y3RB
YmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpLT5saW5rKHZtLCBzb3VyY2UpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogCkBAIC0xOTIzLDcgKzE5MzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RvcFdhdGNoIHN0b3BXYXRjaDsKQEAgLTE5NDksMTQg
KzE5NjEsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3Qo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxk
ZXIgc25hcHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKICAgICBTdHJpbmcganNvblN0cmlu
ZyA9IHNuYXBzaG90QnVpbGRlci5qc29uKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0g
SlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5NzksNyArMTk5
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW0KIAogICAgIFN0
cmluZyBqc29uU3RyaW5nID0gdm0uc2FtcGxpbmdQcm9maWxlcigpLT5zdGFja1RyYWNlc0FzSlNP
TigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKQEAg
LTIwODUsNiArMjA5OSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKIHN0
YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgZXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKCkgZG8geyBcCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeyBcCisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOyBcCisgICAgICAgICAgICByZXR1cm47IFwK
KyAgICAgICAgfSBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKICAgICBwcmludGYoIkV4Y2VwdGlv
bjogJXNcbiIsIGV4Y2VwdGlvbi50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBJZGVudGlmaWVyIG5hbWVJRCA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksICJuYW1lIik7CkBAIC0yMDkz
LDkgKzIxMTcsMTMgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAog
ICAgIElkZW50aWZpZXIgc3RhY2tJRCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCksICJzdGFjayIpOwogICAgIAogICAgIEpTVmFsdWUgbmFtZVZhbHVl
ID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmFtZUlEKTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGZpbGVOYW1lVmFsdWUgPSBleGNlcHRp
b24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBmaWxlTmFtZUlEKTsKKyAgICBDSEVD
S19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIGxpbmVOdW1iZXJWYWx1ZSA9IGV4Y2VwdGlvbi5n
ZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGxpbmVOdW1iZXJJRCk7CisgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAgICAgSlNWYWx1ZSBzdGFja1ZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc3RhY2tJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CiAgICAgCiAgICAgaWYgKG5hbWVWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSkgPT0gIlN5bnRheEVycm9yIgogICAgICAgICAmJiAoIWZpbGVOYW1lVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSB8fCAhbGluZU51bWJlclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
KSB7CkBAIC0yMTA3LDExICsyMTM1LDE0IEBAIHN0YXRpYyB2b2lkIGR1bXBFeGNlcHRpb24oR2xv
YmFsT2JqZWN0KiAKICAgICAKICAgICBpZiAoIXN0YWNrVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcHJpbnRmKCIlc1xuIiwgc3RhY2tWYWx1ZS50b1dURlN0cmluZyhnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSkudXRmOCgpLmRhdGEoKSk7CisKKyN1bmRlZiBDSEVDS19FWENF
UFRJT04KIH0KIAogc3RhdGljIGJvb2wgY2hlY2tVbmNhdWdodEV4Y2VwdGlvbihWTSYgdm0sIEds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgY29uc3QgU3RyaW5n
JiBleHBlY3RlZEV4Y2VwdGlvbk5hbWUsIGJvb2wgYWx3YXlzRHVtcEV4Y2VwdGlvbikKIHsKLSAg
ICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGlmICghZXhjZXB0aW9u
KSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdpdGggbmFt
ZSAnJXMnIGJ1dCBub25lIHdhcyB0aHJvd25cbiIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjExOSwxMyArMjE1MCwxMyBA
QCBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2CiAKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbkNsYXNzID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUpKTsKLSAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgdm0uZXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoIWV4Y2VwdGlvbkNsYXNz
LmlzT2JqZWN0KCkgfHwgc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBl
Y3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlv
biBjbGFzcyBpcyBub3QgZGVmaW5lZFxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5k
YXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgYm9vbCBpc0luc3Rh
bmNlT2ZFeHBlY3RlZEV4Y2VwdGlvbiA9IGpzQ2FzdDxKU09iamVjdCo+KGV4Y2VwdGlvbkNsYXNz
KS0+aGFzSW5zdGFuY2UoZXhlYywgZXhjZXB0aW9uKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
IHsKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3Rl
ZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IGdpdmVuIGV4Y2VwdGlvbiBj
bGFzcyBmYWlscyBwZXJmb3JtaW5nIGhhc0luc3RhbmNlXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5h
bWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yMTQ5
LDYgKzIxODAsNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEdlbmVyYXRlZEJ5dGVjb2RlcygpID0gdHJ1ZTsKIAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKIAogICAgIGF1dG8g
Y2hlY2tFeGNlcHRpb24gPSBbJl0gKGJvb2wgaXNMYXN0RmlsZSwgYm9vbCBoYXNFeGNlcHRpb24s
IEpTVmFsdWUgdmFsdWUpIHsKQEAgLTIxOTEsNyArMjIyMyw3IEBAIHN0YXRpYyBib29sIHJ1bldp
dGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgaWYgKGlzTW9kdWxlKSB7CiAgICAgICAg
ICAgICBpZiAoIXByb21pc2UpCiAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IGxvYWRBbmRFdmFs
dWF0ZU1vZHVsZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291cmNlKHNjcmlwdEJ1
ZmZlciwgZmlsZU5hbWUpKTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdWxmaWxsSGFuZGxlciA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCAxLCBTdHJpbmcoKSwgWyYsIGlzTGFzdEZpbGVdKEV4ZWNTdGF0ZSogZXhlYykgewog
ICAgICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGZhbHNlLCBleGVjLT5h
cmd1bWVudCgwKSk7CkBAIC0yMjA4LDEzICsyMjQwLDE0IEBAIHN0YXRpYyBib29sIHJ1bldpdGhT
Y3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE5ha2Vk
UHRyPEV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICAgICAgICAgIEpTVmFsdWUg
cmV0dXJuVmFsdWUgPSBldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwganNjU291
cmNlKHNjcmlwdEJ1ZmZlciwgZmlsZU5hbWUpLCBKU1ZhbHVlKCksIGV2YWx1YXRpb25FeGNlcHRp
b24pOworICAgICAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAg
ICBpZiAoZXZhbHVhdGlvbkV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IGV2YWx1YXRpb25FeGNlcHRpb24tPnZhbHVlKCk7CiAgICAgICAgICAgICBjaGVja0V4Y2VwdGlv
bihpc0xhc3RGaWxlLCBldmFsdWF0aW9uRXhjZXB0aW9uLCByZXR1cm5WYWx1ZSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzY3JpcHRCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgdm0uY2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICNpZiBF
TkFCTEUoUkVHRVhQX1RSQUNJTkcpCkBAIC0yMjI3LDYgKzIyNjAsOSBAQCBzdGF0aWMgYm9vbCBy
dW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAKIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZl
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBTdHJpbmcgaW50ZXJwcmV0ZXJOYW1lKEFTQ0lJTGl0ZXJhbCgiSW50ZXJwcmV0ZXIiKSk7CiAg
ICAgCiAgICAgYm9vbCBzaG91bGRRdWl0ID0gZmFsc2U7CkBAIC0yMjc3LDcgKzIzMTMsNyBAQCBz
dGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHByaW50ZigiJXNcbiIsIHJldHVyblZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT52bSgpLmRyYWluTWljcm90YXNrcygp
OwogICAgIH0KICAgICBwcmludGYoIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9B
UElVdGlscy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0FQSVV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMyBAQCBlbnVtIGNsYXNz
IEV4Y2VwdGlvblN0YXR1cyB7CiAKIGlubGluZSBFeGNlcHRpb25TdGF0dXMgaGFuZGxlRXhjZXB0
aW9uSWZOZWVkZWQoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVSZWYqIHJldHVybmVkRXhj
ZXB0aW9uUmVmKQogewotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgaWYg
KHJldHVybmVkRXhjZXB0aW9uUmVmKQogICAgICAgICAgICAgKnJldHVybmVkRXhjZXB0aW9uUmVm
ID0gdG9SZWYoZXhlYywgZXhjZXB0aW9uLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5p
bnNwZWN0b3JDb250cm9sbGVyKCkucmVwb3J0QVBJRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEyOCwxMiArMjEyOCwxOSBAQAogCQlG
RTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTA2ODY2MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovOyB9OwogCQlGRTU5MzJBNzE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDRE
IC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUx
RTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM3MUQ3OEYwMUQwMEE2OTRE
NCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkx
MzkxRDc4RjNBRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAv
KiBFeGNlcHRpb25TY29wZS5jcHAgKi87IH07CisJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAv
KiBFeGNlcHRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2NDkxM0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkxM0Qx
RDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBF
eGNlcHRpb25FdmVudC5jcHAgKi87IH07CiAJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclBy
aW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRTY4QzYzODFCOTBERTBCMDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjhDNjM1MUI5
MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwICovOyB9OwogCQlGRTdC
QTYwRjFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuY3BwICovOyB9OwogCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyog
SGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTdCQTYwRTFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QzQxOTYxQjk3RkM0
QjAwRjRENTk4IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEQTUwRDQxQjk3RjQ0MjAwOUEzQjRG
IC8qIFBpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwICovOyB9OworCQlGRTgwQzE5NzFENzc1
Q0REMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTgw
QzE5OTFENzc1RkJFMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi87IH07CisJCUZFODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNl
cHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFODBDMTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmNwcCAqLzsgfTsKIAkJRkU5OUIyNDkxQzI0QzNEMzAwQzgyMTU5IC8qIEpJVE5lZ0dl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU5OUIyNDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovOyB9OwogCQlG
RTk5QjI0QTFDMjRDM0Q3MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRUEwODYyMDE4MkI3QTA0MDBG
NkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkVBMDg2MUUxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQzNSwxMSAr
NDQ0MiwxOCBAQAogCQlGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VE
dW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkU291
cmNlRHVtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE1MTgzQzVB
MjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVk1FbnRyeVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBWTUVudHJ5U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJvd1Njb3BlTG9jYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDRE
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvblNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxM0ExRDc4RjQ2MTAw
QTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5
MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFNjhDNjM1MUI5MERERDkwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwVmVyaWZp
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTdCQTYwRTFBMUE3Q0VDMDBG
MUY3QjQgLyogSGVhcFZlcmlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhlYXBWZXJpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5NjFE
Nzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXRjaFNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBD
MTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhdGNoU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25FdmVu
dExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5MEJCM0ExQjdD
RjY0RTAwNkIzRjAzIC8qIFZNSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWTUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU5OEI1QjYx
QkI5QUUxMTAwNzNFN0E2IC8qIEpJVFN1YkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRTdWJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVROZWdHZW5lcmF0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njk4LDggQEAKIAkJCQkwRkI3
RjM4QzE1RUQ4RTM4MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oICovLAogCQkJCUJDQTYy
REZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi8sCiAJCQkJMTQ1QzUwN0YwRDlE
RjYzQjAwODhGNkI5IC8qIENhbGxEYXRhLmggKi8sCisJCQkJRkU4MEMxOTgxRDc3NUZCNDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuY3BwICovLAorCQkJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmggKi8sCiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNz
SW5mby5oICovLAogCQkJCTBGRTA1MDFDMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuY3BwICovLAogCQkJCTBGRTA1MDFEMUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVu
dHMuaCAqLywKQEAgLTU3NDgsMTAgKzU3NjQsMTYgQEAKIAkJCQlCQzAyRTkwNzBFMTgzOURCMDAw
RjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlGRTFDMEZGRTFCMTk0RkQxMDBCNTNG
Q0EgLyogRXhjZXB0aW9uLmNwcCAqLywKIAkJCQlGRTFDMEZGQzFCMTkzRTk4MDBCNTNGQ0EgLyog
RXhjZXB0aW9uLmggKi8sCisJCQkJRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8qIEV4Y2VwdGlv
bkV2ZW50LmNwcCAqLywKKwkJCQlGRTY0OTEzQTFENzhGNDYxMDBBNjk0RDQgLyogRXhjZXB0aW9u
RXZlbnQuaCAqLywKKwkJCQlGRTgwQzE5QTFENzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAgKi8sCisJCQkJRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uaCAqLywKIAkJCQkwRjEyREUwRDE5NzlENUZEMDAwNkZGNEUgLyog
RXhjZXB0aW9uRnV6ei5jcHAgKi8sCiAJCQkJMEYxMkRFMEUxOTc5RDVGRDAwMDZGRjRFIC8qIEV4
Y2VwdGlvbkZ1enouaCAqLywKIAkJCQkxNDI5RDg3NzBFRDIxQUNEMDBCODk2MTkgLyogRXhjZXB0
aW9uSGVscGVycy5jcHAgKi8sCiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2Vw
dGlvbkhlbHBlcnMuaCAqLywKKwkJCQlGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0
aW9uU2NvcGUuY3BwICovLAorCQkJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRp
b25TY29wZS5oICovLAogCQkJCTg2Q0EwMzJEMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxl
LmNwcCAqLywKIAkJCQk4NkNBRkVFMjEwMzVEREU2MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5oICov
LAogCQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKQEAg
LTYxNDMsNyArNjE2NSw2IEBACiAJCQkJMEZBMkMxN0ExN0Q3Q0Y4NDAwOUQwMTVGIC8qIFRlc3RS
dW5uZXJVdGlscy5oICovLAogCQkJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Nj
b3BlLmNwcCAqLywKIAkJCQlGRTM0MjIxMTFENkI4MThDMDAzMkJFODggLyogVGhyb3dTY29wZS5o
ICovLAotCQkJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24u
aCAqLywKIAkJCQkwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUu
aCAqLywKIAkJCQkwRjJCNjZEODE3QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUFkYXB0b3Jz
LmggKi8sCiAJCQkJMEYyQjY2RDkxN0I2QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlDb250cm9s
bGVyLmNwcCAqLywKQEAgLTc2OTIsNyArNzcxMyw3IEBACiAJCQkJMEZFMDUwMUExQUE5MDkxMTAw
RDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQgLyogVGhy
b3dTY29wZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTYwMjlEOTFENkUxRTRGMDAz
MDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMUIxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlw
ZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTgyMDgsNiArODIyOSw3IEBA
CiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFp
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2Vw
dGlvblNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzZFNTQ1MzFDNDY4RTc0
MDBCNUFGNzMgLyogQjNMZWdhbGl6ZU1lbW9yeU9mZnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBRjczODJEMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMDEsNiArODMyMyw3IEBACiAJCQkJNzA5RkI4NkMxQUUzMzVDNjAwMzlEMDY5
IC8qIFdlYWtTZXRQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDdBMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBXZWJLaXRBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RENCOTczMTJFNTE5M0YwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQTRFQzkwQzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkI2RDc1MzE4QTMzNzkzMDA0QTkzMDEgLyogV3JpdGVCYXJy
aWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLApAQCAtODMxMCw2ICs4MzMz
LDcgQEAKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBp
biBIZWFkZXJzICovLAorCQkJCUZFNjQ5MTNCMUQ3OEY0NkMwMEE2OTRENCAvKiBFeGNlcHRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlh
cnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYyRDg1QjcxQzBENjUwRjAwNkFD
QjYxIC8qIEFpckZpeFBhcnRpYWxSZWdpc3RlclN0YWxscy5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODMzLDYgKzg4NTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBFeGNlcHRpb25T
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyog
QWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQyMkE2NjFD
MTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtOTMwNyw2ICs5MzMyLDcgQEAKIAkJCQkwRjJCNjZFNjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFODE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8qIENhdGNoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1
RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzM5
LDYgKzkzNjUsNyBAQAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9i
amVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBC
Mzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEzRDFENzhGQzJGMDBBNjk0RDQg
LyogRXhjZXB0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1
OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxOSw2ICs5NDQ2LDcgQEAK
IAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2Vw
dGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3
QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVBQjQ5REMxQkVDODA4MjAwNzAyMEZCIC8qIFBlckdsb2JhbE9iamVjdFdyYXBwZXJXb3JsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGlu
ZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTAgKzEwNSwxMiBAQCBKU1ZhbHVlIFNj
cmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbChib29sJiBoCiB7CiAgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBtX3RoaXNPYmplY3QuanNPYmplY3QoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKG1f
ZXhlYyk7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhtX2V4ZWMsIG1fbmFtZSkpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDEwICsxMjIsMTMgQEAgYm9vbCBTY3JpcHRWYWx1ZTo6
Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogcwogCiBTdHJpbmcgU2NyaXB0VmFsdWU6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gc2NyaXB0U3RhdGUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlc3VsdCA9IG1fdmFsdWUuZ2V0KCkudG9TdHJpbmcoc2NyaXB0U3RhdGUpLT52YWx1
ZShzY3JpcHRTdGF0ZSk7CiAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlv
biBpcyB0aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0Lgot
ICAgIGlmIChzY3JpcHRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHNjcmlwdFN0YXRl
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjMsNiArNjIzLDkgQEAgdm9pZCBEZWJ1Z2dlcjo6
dXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZgogCiB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVk
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAobV9p
c1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NjIsNyArNjY1LDcgQEAgdm9pZCBEZWJ1
Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogICAgIHsKICAgICAgICAgUGF1c2VSZWFz
b25EZWNsYXJhdGlvbiByZWFzb24oKnRoaXMsIGRpZEhpdEJyZWFrcG9pbnQgPyBQYXVzZWRGb3JC
cmVha3BvaW50IDogbV9yZWFzb25Gb3JQYXVzZSk7CiAgICAgICAgIGhhbmRsZVBhdXNlKHZtRW50
cnlHbG9iYWxPYmplY3QsIG1fcmVhc29uRm9yUGF1c2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgbV9wYXVzaW5nQnJlYWtwb2ludElEID0g
bm9CcmVha3BvaW50SUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXJDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNyw3ICsyMTcsOSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFs
dWF0ZVdpdGhTCiAgICAgaWYgKCFjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soY2FsbEZyYW1lKTsKKyAgICBWTSYgdm0gPSBj
YWxsRnJhbWUtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gY2F0
Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBudWxscHRyOwogICAgIGlmIChpc1RhaWxEZWxldGVkKCkpCkBAIC0yMjgsNyArMjMw
LDYgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBEZWJ1Z2dlckV2YWxFbmFibGVyIGV2YWxF
bmFibGVyKGNhbGxGcmFtZSk7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogCiAgICAg
RXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTI0Myw5ICsyNDQsOSBA
QCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgSlNTY29wZTo6
Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlKCktPmpzU2NvcGUoKSwgdmFyaWFibGVzVW5k
ZXJURFopOwogCiAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKGNhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3JpcHQpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmRlcml2ZWRDb250ZXh0VHlwZSgp
LCBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFs
Q29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVh
ckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkg
eworICAgICAgICBleGNlcHRpb24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBj
YXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIH0KIApAQCAtMjU3LDkgKzI1OCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6
OmV2YWx1YXRlV2l0aFMKIAogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gdGhpcy0+dGhpc1ZhbHVl
KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB2bS5pbnRlcnByZXRlci0+ZXhlY3V0ZShldmFsLCBj
YWxsRnJhbWUsIHRoaXNWYWx1ZSwgc2NvcGUoKS0+anNTY29wZSgpKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAg
IHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7Cisg
ICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZiAoc2Nv
cGVFeHRlbnNpb25PYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMiwxNCArMTEyLDE1IEBAIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBpZiAoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCkK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5jYWxsRnJhbWVGb3JDYXRjaCA9PSBl
eGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworCisgICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodm0tPmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOwogICAg
IAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7Ci0KLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICAKICAgICAvLyBJ
dCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFu
eXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CiAgICAgLy8gcmVhbGx5IGJlIHByb2ZpdGFibGUuCkBA
IC0xMzEsNyArMTMyLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgaWYgKHZtLT5jYWxsRnJhbWVGb3JDYXRjaCkKICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5k
ID09IEdlbmVyaWNVbndpbmQpOwogICAgIGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKQot
ICAgICAgICBBU1NFUlQoISF2bS0+ZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCAhIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgCiAgICAgCiAgICAgcHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCB0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9vbCBk
aXJlY3Q+CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZEJhc2UpOwpAQCAtMTE5LDcgKzEyMCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgSklUX09QRVJBVElPTiAKIAogICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9T
dHJpbmcgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3Bl
cnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHN0cmljdCk7CkBAIC0xNzksMTEgKzE4MCwx
MiBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChjb25zdHJ1Y3Rvci0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4g
Y29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3Rv
ciktPnJhcmVEYXRhKGV4ZWMsIGlubGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKS0+c3RydWN0dXJlKCkpOwogCiAgICAgSlNWYWx1ZSBwcm90byA9IGNvbnN0cnVjdG9yLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmIChwcm90by5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgYXNPYmplY3QocHJvdG8pKTsKQEAgLTIwNywx
MiArMjA5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsK
ICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0p
OwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAg
SlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90
IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIo
ZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhICYgYikpOwpAQCAt
MjIyLDEyICsyMjUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25W
YQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsK
ICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGlu
dDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9J
bnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgfCBiKSk7
CkBAIC0yMzcsMTIgKzI0MSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAg
ICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9w
Mi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSBe
IGIpKTsKQEAgLTI1MiwxMiArMjU3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7
CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IG9wMi50b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGEgPDwgKGIgJiAweDFmKSkpOwpAQCAtMjY3LDEyICsyNzMsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoYSA+PiAoYiAmIDB4MWYpKSk7CkBAIC0yODIsMTIgKzI4OSwx
MyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUg
b3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgdWludDMyX3QgYSA9IG9w
MS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50b1VJbnQzMihleGVj
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KGEgPj4gKGIgJiAweDFmKSkpKTsKQEAgLTMxMywxMiArMzIxLDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIC8gYikpOwpAQCAtMzI4LDEwICszMzcsMTEgQEAgZG91Ymxl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhBYnMoRQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9w
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051
bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGZhYnMoYSk7CiB9CkBAIC0zNDAsMTAgKzM1MCwx
MSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENvcyhFCiB7CiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAg
IEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBh
ID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gY29zKGEpOwogfQpAQCAtMzUy
LDEwICszNjMsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bgog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihhKTsKIH0KQEAgLTM2NCwxMCArMzc2LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyaXRoTG9nKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHJldHVybiBsb2coYSk7CiB9CkBAIC0zNzYsMTAgKzM4OSwxMSBAQCBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFNpbihFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVt
YmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gc2luKGEpOwogfQpAQCAtMzg4LDEwICs0MDIsMTEg
QEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTcXJ0KAogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9
IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CkBAIC00MTcs
NyArNDMyLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9w
ZXJ0eSk7CiAKQEAgLTQ0MywxMCArNDU5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJj
aWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXko
ZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpOwogfQpAQCAtNDU1LDcgKzQ3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKICAgICBpZiAocHJvcGVydHkuaXNVSW50
MzIoKSkKQEAgLTQ3Niw3ICs0OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC04NDUsNiArODYyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWwg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFRoaXMpOwpAQCAtODcwLDExICs4ODgsMTEgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGJhc2VW
YWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5n
ZXQoZXhlYywgcHJvcGVydHksIHNsb3QpKTsKIH0KQEAgLTg5OSw5ICs5MTcsMTAgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIg
cHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4
ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9
CkBAIC05MTAsOSArOTI5LDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBwdXRXaXRoVGhpczxmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlz
LCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0KQEAgLTE0MjQsOSArMTQ0NCw5IEBAIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRl
Y29kZShhKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8g
SW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVz
dCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFs
dWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxv
d3M8aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpKSkgewogICAgICAgICB0
aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpAQCAtMTQ0MywxMSArMTQ2MywxMSBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1Zh
bHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNl
IHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIg
PSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNTdHJpbmcq
IHN0cjMgPSBKU1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2
bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgpLCBzdHIyLT5sZW5ndGgoKSwg
c3RyMy0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBz
Y29wZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc5Nyw2ICs3OTcsNyBAQCB2b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhl
YXBSb290CiB2b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBHQ1BIQVNFKE1hcmtpbmdFeGNlcHRpb24pOworCiAgICAgaWYgKCFtX3ZtLT5l
eGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzLDcgKzEzMyw5IEBAIFN0cmluZyBJbmplY3RlZFNjcmlwdE1hbmFnZXI6Omlu
amVjdGVkU2MKIAogSlNDOjpKU09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcmVhdGVJ
bmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRXhlY1N0YXRlKiBzY3JpcHRTdGF0
ZSwgaW50IGlkKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdFN0YXRlKTsKKyAgICBW
TSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgU291cmNlQ29k
ZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzY3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwpAQCAtMTU2
LDcgKzE1OCw3IEBAIEpTQzo6SlNPYmplY3QqIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3IKICAg
ICBhcmdzLmFwcGVuZChqc051bWJlcihpZCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6
OmNhbGwoc2NyaXB0U3RhdGUsIGZ1bmN0aW9uVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xv
YmFsVGhpc1ZhbHVlLCBhcmdzKTsKLSAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQuZ2V0T2JqZWN0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIw
LDcgKzIyMCw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjoKICAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9y
U2NvcGUodm0pOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENh
bGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgaWYgKGluY2x1ZGVzTmF0
aXZlQ2FsbFN0YWNrV2hlblJlcG9ydGluZ0V4Y2VwdGlvbnMoKSkKQEAgLTIyOCw4ICsyMjksMTIg
QEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogCiAgICAgLy8gRklY
TUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogU2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7CisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi0+dmFsdWUoKS50
b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgfQogCiAgICAgaWYgKEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6bG9nVG9T
eXN0ZW1Db25zb2xlKCkpIHsKICAgICAgICAgaWYgKGNhbGxTdGFjay0+c2l6ZSgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMyw3ICsxMDMsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJJbmplY3RlZFNjcmlwdEhvc3QuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgcHJvZ3JhbSA9IHNjcmlw
dFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4Y2VwdGlv
bjsKQEAgLTI1OSwxMiArMjU5LDEzIEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Omdl
dEludGVybmEKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAKICAgICBpZiAo
SlNQcm9taXNlKiBwcm9taXNlID0ganNEeW5hbWljQ2FzdDxKU1Byb21pc2UqPih2YWx1ZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgc3dpdGNoIChwcm9t
aXNlLT5zdGF0dXMoZXhlYy0+dm0oKSkpIHsKICAgICAgICAgY2FzZSBKU1Byb21pc2U6OlN0YXR1
czo6UGVuZGluZzoKQEAgLTI4Niw3ICsyODcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTQm91bmRGdW5jdGlvbiogYm91bmRGdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8SlNCb3VuZEZ1bmN0aW9uKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJ0YXJnZXRGdW5jdGlv
biIsIGJvdW5kRnVuY3Rpb24tPnRhcmdldEZ1bmN0aW9uKCkpKTsKICAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhl
YywgImJvdW5kVGhpcyIsIGJvdW5kRnVuY3Rpb24tPmJvdW5kVGhpcygpKSk7CkBAIC0yOTgsNyAr
Mjk5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChQcm94eU9iamVjdCogcHJveHkgPSBqc0R5bmFtaWNDYXN0PFByb3h5T2JqZWN0Kj4odmFsdWUp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgidGFyZ2V0IiksIHByb3h5LT50YXJnZXQoKSkpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoImhhbmRsZXIiKSwgcHJveHktPmhhbmRsZXIoKSkp
OwpAQCAtMzEyLDcgKzMxMyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKIAogICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgr
KywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYXJyYXkiLCBpdGVyYXRlZFZhbHVl
KSk7CiAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29u
c3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGtpbmQpKTsKQEAgLTMzNSw3ICsz
MzYsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAg
IH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgIm1hcCIsIG1hcEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsKQEAgLTM1
Nyw3ICszNTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAg
ICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgInNldCIsIHNldEl0ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFs
UHJvcGVydHkoZXhlYywgImtpbmQiLCBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywga2luZCkpKTsK
QEAgLTM2Nyw3ICszNjgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRl
cm5hCiAgICAgaWYgKEpTU3RyaW5nSXRlcmF0b3IqIHN0cmluZ0l0ZXJhdG9yID0ganNEeW5hbWlj
Q2FzdDxKU1N0cmluZ0l0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzdHJpbmciLCBzdHJpbmdJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZShleGVjKSkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0z
NzYsNyArMzc3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQog
ICAgIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpz
RHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAib2JqZWN0
IiwgcHJvcGVydHlOYW1lSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICByZXR1
cm4gYXJyYXk7CkBAIC00MDQsNiArNDA1LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9z
dDo6d2Vha01hcEVudAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBK
U1dlYWtNYXAqIHdlYWtNYXAgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha01hcCo+KHZhbHVlKTsKICAg
ICBpZiAoIXdlYWtNYXApCkBAIC00MTgsNyArNDIwLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha01hcEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHdlYWtNYXAtPndlYWtNYXBEYXRh
KCktPmJlZ2luKCk7IGl0ICE9IHdlYWtNYXAtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7
CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpA
QCAtNDUxLDYgKzQ1Myw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtTZXRF
bnQKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrU2V0KiB3
ZWFrU2V0ID0ganNEeW5hbWljQ2FzdDxKU1dlYWtTZXQqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFr
U2V0KQpAQCAtNDY1LDcgKzQ2OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Ondl
YWtTZXRFbnQKICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihm
ZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5iZWdpbigp
OyBpdCAhPSB3ZWFrU2V0LT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBK
U09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ5NSw2ICs0
OTgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
cjsKICAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAg
aWYgKEpTTWFwSXRlcmF0b3IqIG1hcEl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJh
dG9yKj4odmFsdWUpKQpAQCAtNTA1LDcgKzUwOSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgaXRlcmF0b3IgPSBzdHJpbmdJdGVyYXRvci0+Y2xv
bmUoZXhlYyk7CiAgICAgZWxzZSBpZiAoSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogcHJvcGVydHlO
YW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPih2YWx1
ZSkpIHsKICAgICAgICAgaXRlcmF0b3IgPSBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+Y2xvbmUoZXhl
Yyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChKU09iamVjdCogaXRlcmF0b3JPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odmFsdWUpKSB7CkBAIC01MjUsMTggKzUyOSwxOCBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAgICAgIG51bWJlclRv
RmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtYmVyVG9GZXRjaDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9
IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4
ZWMsIG5leHQpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgSlNWYWx1ZSBKU0phdmFTY3JpcHRDYWxsRnJhbWU6OmV2YWx1
YXRlVwogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZp
cnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcuIikpOwogCiAgICAgU3RyaW5nIHNjcmlwdCA9
IHNjcmlwdFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV4
Y2VwdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2Fs
bFN0YWNrRmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIFJlZjxTY3JpcHRDYWxsU3RhY2s+
IGNyZWF0ZVNjcmlwdENhbGxTdGEKIAogc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0
aW9uRnJvbUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGV4Y2VwdGlv
bk9iamVjdCwgaW50KiBsaW5lTnVtYmVyLCBpbnQqIGNvbHVtbk51bWJlciwgU3RyaW5nKiBzb3Vy
Y2VVUkwpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IG5lZWQgdG8gZXZhbHVhdGUgSmF2
YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCiAgICAgSlNWYWx1ZSBsaW5lVmFsdWUgPSBleGNl
cHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJsaW5lIikpOwogICAgICpsaW5lTnVtYmVyID0gbGluZVZhbHVlICYmIGxpbmVWYWx1
ZS5pc051bWJlcigpID8gaW50KGxpbmVWYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwpAQCAtMTI2
LDcgKzEyOSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb20KICAg
ICAqY29sdW1uTnVtYmVyID0gY29sdW1uVmFsdWUgJiYgY29sdW1uVmFsdWUuaXNOdW1iZXIoKSA/
IGludChjb2x1bW5WYWx1ZS50b051bWJlcihleGVjKSkgOiAwOwogICAgIEpTVmFsdWUgc291cmNl
VVJMVmFsdWUgPSBleGNlcHRpb25PYmplY3QtPmdldERpcmVjdChleGVjLT52bSgpLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzb3VyY2VVUkwiKSk7CiAgICAgKnNvdXJjZVVSTCA9IHNv
dXJjZVVSTFZhbHVlICYmIHNvdXJjZVVSTFZhbHVlLmlzU3RyaW5nKCkgPyBzb3VyY2VVUkxWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykgOiBBU0NJSUxpdGVyYWwoInVuZGVmaW5lZCIp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKIH0KIAogUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwg
c2l6ZV90IG1heFN0YWNrU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWNoZWRDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0NhY2hlZENhbGwuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX2Nsb3N1cmUgPSBt
X2ludGVycHJldGVyLT5wcmVwYXJlRm9yUmVwZWF0Q2FsbChmdW5jdGlvbi0+anNFeGVjdXRhYmxl
KCksIGNhbGxGcmFtZSwgJm1fcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBhcmd1bWVudENvdW50
ICsgMSwgZnVuY3Rpb24tPnNjb3BlKCksIG1fYXJndW1lbnRzLmRhdGEoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihjYWxsRnJh
bWUsIHNjb3BlKTsKLSAgICAgICAgICAgIG1fdmFsaWQgPSAhY2FsbEZyYW1lLT5oYWRFeGNlcHRp
b24oKTsKKyAgICAgICAgICAgIG1fdmFsaWQgPSAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUgY2FsbCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiwxNCArMTE2LDYgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICAvLyBw
b2ludGVyLCBzbyB0aGVzZSBhcmUgaW5lZmZpY2llbnQsIGFuZCBzaG91bGQgYmUgdXNlZCBzcGFy
aW5nbHkgaW4gbmV3IGNvZGUuCiAgICAgICAgIC8vIEJ1dCB0aGV5J3JlIHVzZWQgaW4gbWFueSBw
bGFjZXMgaW4gbGVnYWN5IGNvZGUsIHNvIHRoZXkncmUgbm90IGdvaW5nIGF3YXkgYW55IHRpbWUg
c29vbi4KIAotICAgICAgICB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyRXhjZXB0
aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHZtKCkuZXhjZXB0aW9uKCk7IH0KLSAgICAgICAgYm9vbCBoYWRFeGNlcHRpb24oKSBjb25zdCB7
IHJldHVybiAhIXZtKCkuZXhjZXB0aW9uKCk7IH0KLQotICAgICAgICBFeGNlcHRpb24qIGxhc3RF
eGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmxhc3RFeGNlcHRpb24oKTsgfQotICAgICAg
ICB2b2lkIGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckxhc3RFeGNlcHRpb24oKTsg
fQotCiAgICAgICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHZtKCkuYXRvbWljU3RyaW5nVGFibGUoKTsgfQogICAgICAgICBjb25zdCBDb21t
b25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICp2bSgpLnByb3Bl
cnR5TmFtZXM7IH0KICAgICAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuICp2bSgpLmVtcHR5TGlzdDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAg
ICAgU3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZy
YW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAog
ICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CkBA
IC0xODQsNyArMTg0LDcgQEAgSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgbGl0ZXJhbCBwYXJzZXIgYmFpbGVk
LCBpdCBzaG91bGQgbm90IGhhdmUgdGhyb3duIGV4Y2VwdGlvbnMuCi0gICAgICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hlKCkuZ2V0U2xvdyhj
YWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywgY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIHByb2dyYW1Tb3VyY2UsIGNhbGxlclNjb3BlQ2hhaW4pOwogCkBAIC0yMjcsNyArMjI3
LDcgQEAgdW5zaWduZWQgc2l6ZU9mVmFyYXJncyhDYWxsRnJhbWUqIGNhbGxGcgogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50cy5pc09iamVjdCgpKTsKICAgICAg
ICAgbGVuZ3RoID0gZ2V0TGVuZ3RoKGNhbGxGcmFtZSwganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCkp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjY2LDEzICs2NjYsMTUgQEAgcHJpdmF0ZToK
IAogQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBub3RpZnlEZWJ1Z2dlck9mVW53aW5kaW5nKENh
bGxGcmFtZSogY2FsbEZyYW1lKQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoRGVi
dWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVn
Z2VyKCkpIHsKLSAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZjYWxsRnJhbWUt
PnZtKCkpOworICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJnZtKTsKICAgICAg
ICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxGcmFtZS0+Y2FsbGVlKCkpKQog
ICAgICAgICAgICAgZGVidWdnZXItPnJldHVybkV2ZW50KGNhbGxGcmFtZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShjYWxsRnJhbWUpOwot
ICAgICAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiB9
CiAKQEAgLTc2MCw2ICs3NjIsOCBAQCBwcml2YXRlOgogCiBORVZFUl9JTkxJTkUgSGFuZGxlcklu
Zm8qIEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodW53aW5kU3RhcnQg
PT0gVW53aW5kRnJvbUNhbGxlckZyYW1lKSB7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmNhbGxl
ckZyYW1lT3JWTUVudHJ5RnJhbWUoKSA9PSB2bS50b3BWTUVudHJ5RnJhbWUpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTc3OCw3ICs3ODIsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxl
ckluZm8qIEludGVycHJldGVyOjp1CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzRW1wdHkoKSB8
fCAoZXhjZXB0aW9uVmFsdWUuaXNDZWxsKCkgJiYgIWV4Y2VwdGlvblZhbHVlLmFzQ2VsbCgpKSkK
ICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBqc051bGwoKTsKIAotICAgIEFTU0VSVCh2bS5leGNl
cHRpb24oKSAmJiB2bS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpICYmIHNjb3BlLmV4Y2VwdGlvbigpLT5zdGFj
aygpLnNpemUoKSk7CiAKICAgICAvLyBDYWxjdWxhdGUgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdlBD
LCB1bndpbmRpbmcgY2FsbCBmcmFtZXMgYXMgbmVjZXNzYXJ5LgogICAgIEhhbmRsZXJJbmZvKiBo
YW5kbGVyID0gbnVsbHB0cjsKQEAgLTk3Nyw3ICs5ODEsNyBAQCBmYWlsZWRKU09OUDoKIAogICAg
IC8vIEV4ZWN1dGUgdGhlIGNvZGU6CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwcm9ncmFtLT5nZW5l
cmF0ZWRKSVRDb2RlKCktPmV4ZWN1dGUoJnZtLCAmcHJvdG9DYWxsRnJhbWUpOwotCisgICAgdGhy
b3dTY29wZS5yZWxlYXNlKCk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKIH0K
IApAQCAtOTg2LDcgKzk5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmEKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAg
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVz
eSgpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CkBAIC0xMDQ5LDcgKzEwNTMsNyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0
dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52
YWxpZCBzdGF0ZS4KQEAgLTExMDAsMTIgKzExMDQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwog
Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoTElLRUxZKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7
CkBAIC0xMTE1LDcgKzExMTksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiB7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpA
QCAtMTE2NCw3ICsxMTY4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9y
QnVzeSgpKQpAQCAtMTI3MCw3ICsxMjc0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShNb2R1bGVQcm9ncgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQpAQCAtMTMxMSwxMiArMTMxNSwxNCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVi
dWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBz
d2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBA
IC0xMzM4LDcgKzEzNDQsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKLX0gICAgCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwxMiArMzEsMTQgQEAKICNkZWZpbmUgSW50ZXJwcmV0ZXJfaAogCiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25t
ZW50LmgiCisjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xMDUsOCArMTA3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0p
CiAgICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEV4Y2Vw
dGlvbiA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAg
ICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2Vw
dGlvblNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFBy
aW50U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIEpJVENv
ZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0
ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSkKIHsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZvaWQqIGVudHJ5QWRkcmVzczsK
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHBy
b3RvQ2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgSlNWYWx1ZSBKSVRD
b2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxzZQogICAgICAgICBlbnRyeUFk
ZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2Ny
aXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7Ci0gICAgcmV0dXJuIHZtLT5l
eGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJldHVybiBzY29wZS5leGNlcHRp
b24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6
OmRmZ0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0
aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZy
YW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2lu
ZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0tPnNoYWRvd0NoaWNrZW4oKS5s
b2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGhy
b3dQYWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0
aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0g
dm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgdW53aW5k
U3RhcnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3NCw3ICsyNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9wdGltaXplLCBiYXNlLT5j
bGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0
ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0g
ICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vzc1R5cGUp
OwpAQCAtNDk5LDYgKzQ5OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdP
clN5bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyog
YnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQu
aXNVSW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwog
ICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC01MjAsNyArNTIx
LDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogCiAgICAgYXV0
byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CiAgICAgLy8g
RG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0g
ICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KSkKQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgdm9pZCBwdXRC
eVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3Jp
cHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogeworICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAg
ICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0
cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJl
IHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC01NjMsNyArNTY2LDcgQEAgc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1
YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+dm0o
KS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleChwcm9wZXJ0eSkpIHsKQEAgLTc4NiwxNCArNzg5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAKKyAg
ICBWTSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAg
IAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpLCBn
bG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1
ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTgxNyw3
ICs4MjIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAg
ICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRh
Lm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04NDYsNyArODUxLDcgQEAgc3Rh
dGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+
c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5W
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVj
Q2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ3
Miw4ICsxNDc3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBlIHsKIAogc3RhdGljIHZvaWQg
cHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1ZhbHVl
IHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0KiBhY2Nlc3NvciwgQWNjZXNz
b3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHByb3BlcnR5S2V5
ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCkBA
IC0xNjE4LDggKzE2MjUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1
aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNh
blVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVm
UHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vi
c2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkgewpAQCAtMTY2MSwxMCArMTY3
MCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQog
CiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJz
Y3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0x
ODU1LDYgKzE4NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2Ny
aXB0KTsKICAgICAKQEAgLTE4NzIsMTAgKzE4ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFz
ZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7
CiAgICAgfQpAQCAtMTkyNCwxMCArMTkzNCwxMCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQogICAgICAgICBj
b3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRl
bGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CkBAIC0yMTMyLDcg
KzIxNDIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQo
c2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8sIHNsb3QsIGlkZW50KTsK
QEAgLTIzODMsMTEgKzIzOTMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVk
TXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3Ay
LnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAq
IGIpKTsKQEAgLTIzOTUsNiArMjQwNiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmls
ZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBi
b29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDIpOwogCkBAIC0yNDAyLDEwICsyNDE0LDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5k
UkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ4MCwxMSArMjQ5MiwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFMV0FZU19JTkxJTkUgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ5Miw2ICsyNTA1LDcgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVz
ID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1
ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKQEAgLTI0OTksMTAgKzI1MTMs
MTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBh
cml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC0y
NTkyLDEzICsyNjA2LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lm
RXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXZtLmV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhl
Y3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGdlbmVyaWNV
bndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBleHRlcm4gIkMiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDggQEAgSW5zdHJ1Y3Rp
b24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVOVVNFRF9QQVJBTShleGVjKTsK
ICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCksICIgKHJl
dHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9u
KCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICByZXR1cm4gTExJbnQ6OmV4
Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTUsNyArNTYsOCBAQCB2b2lkKiBjYWxsVG9U
aHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIExMSU5U
X1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgZGF0YUxv
ZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIiAoY2FsbFRvVGhyb3cp
LlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBk
YXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKGNhbGxU
b1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50
X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0
aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmICh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChP
cHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsMTUgKzc4LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBCeXRlY29kZVNlcXVlbmNlOjpm
b3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hl
YWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIp
OwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2UtPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGls
YXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJv
ZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyOCAr
MTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIEpTVmFs
dWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVy
KG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJv
bVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRC
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHByb2ZpbGVkQnl0
ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRv
SlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0Fy
cmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlw
dGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVz
Y3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fY291bnRlcnMuYmVnaW4o
KSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpT
T2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTE0
NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUK
ICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJz
LCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXpl
KCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29z
ckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBK
U0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCArMTAwLDI1IEBAIHZvaWQg
RGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpTVmFsdWUgRGF0YWJhc2U6OnRv
SlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICBKU0FycmF5KiBi
eXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBieXRlY29kZXMtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMp
OwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxh
dGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV2ZW50cy0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3Bw
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFk
ZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJv
ZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9yaWdpblN0YWNrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6
ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsx
OTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQgewogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBz
cGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVj
dCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRUNNQSA5LjQuMi4z
OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUK
ICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoTElLRUxZ
KGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUsNyArMjA4LDcgQEAgc3RhdGlj
IEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsK
IAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9u
LCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rv
ci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihT
cGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogICAgICAgICAgICAg
aWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB9IGVsc2Ug
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAKICAg
ICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIyOCw3ICsyMzEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBKU09i
amVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3Bl
Y2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3Bl
Y2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0KTsKIH0KQEAgLTI4
NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgK
ICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2ln
bmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlz
T2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVj
LCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtMzMwLDMxICszMzMsMzIg
QEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgICAgICB1bnNp
Z25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0g
ayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4
SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8v
IDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRo
aXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgLy8gMi4g
TGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9u
ID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpv
aW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRo
ZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4NywxOCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlH
ZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAg
ZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMsMTQgKzQwNywxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNr
ZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1MiArNDI0LDUyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0cmlu
Z0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAg
QXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24g
PSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcp
OwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNp
b25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxU
eXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNP
YmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxl
bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
Y29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBD
YWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVy
c2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlz
dCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBzdHJp
bmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAj
ZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQsMTYgQEAgc3RhdGljIGlubGlu
ZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihF
eGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1N0cmluZyogc2VwYXJhdG9y
LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDUuIElmIGxlbiBpcyB6
ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAg
cmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwot
CiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxl
bWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRlZmluZWQgb3Ig
bnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgUiBiZSA/IFRv
U3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93
Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsK
ICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgpAQCAtNTI0
LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAg
ICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4g
TGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUg
ZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
ZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVm
aW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxl
dCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUsNyArNTQyLDcgQEAgc3RhdGlj
IEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9IGpz
RW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBl
bGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHBy
b2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAtNTYxLDYgKzU2OCw5IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAKIAogc3RhdGljIGlubGluZSBK
U1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBT
dHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4o
RXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRl
LCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGln
dW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CkBA
IC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0
ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJh
dG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3Vi
bGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAt
NjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUK
ICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBqc0RvdWJsZU51bWJlcih2YWx1
ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3du
VG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
c3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZShzdGF0ZS52bSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVz
dEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdl
bmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9p
bmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5k
ZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYzMCw2ICs2NDAsOSBAQCBnZW5l
cmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pv
aW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUg
PyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMt
PnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAg
ICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3Ro
KD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMs
IHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQg
c2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtNjUzLDcgKzY2
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3Ro
KTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1Nl
cGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJp
bmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1
ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmpl
Y3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywg
dGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTcwMSw3ICs3MTQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIXRoaXNP
YmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMs
IGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTcxNCw2ICs3
MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1Zh
bHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpAQCAtNzI2LDcgKzc0MSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNP
YmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKQEAgLTczOCw3
ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8
aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1l
dGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0K
ICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHN3
aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc5OCw0MSArODEzLDQxIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2ln
bmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWdu
ZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMg
PSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAg
ICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhp
c3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlz
dHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBw
ZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElu
bGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7Ci0gICAgICAgICAgICBpZiAo
IXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb3dlckV4aXN0
cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCB1cHBl
ciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
ICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRl
IHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1v
ZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtODU2LDcgKzg3
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9IGVs
c2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAg
ICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAx
LCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhp
c09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAgLTg2NywxMSArODg0LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIHsKICAgICAvLyBodHRw
Oi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2Fy
cmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAgLTg5MiwxNCArOTEwLDE0IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0
ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVk
IGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CkBA
IC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtOTMyLDcgKzk1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAg
ICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKQEAgLTk2NywxMiArOTg1LDEy
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2sp
IHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywg
aywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgyLDcgKzEwMDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJl
Z2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVj
LT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxl
dGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVs
ZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNl
PihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsg
ayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElu
bGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTAxMywyNCArMTAzMSwyNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNVblNoaWZ0KEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyAxNS40LjQuMTMKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0g
ZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMp
OwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIHVuc2lnbmVkIG5yQXJncyA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBp
ZiAobnJBcmdzKSB7CiAgICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0
PihleGVjLCB0aGlzT2JqLCAwLCAwLCBuckFyZ3MsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBuckFyZ3M7ICsraykgewogICAgICAg
ICB0aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIGssIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGspLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc051bWJlcihsZW5ndGggKyBuckFyZ3MpOwpAQCAtMTA0MCwyNiArMTA2MCwyOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhl
Yy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ2V0
TGVuZ3RoKGV4ZWMsIHRoaXNPYmopOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwogICAgIEpT
VmFsdWUgc2VhcmNoRWxlbWVudCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGZvciAoOyBpbmRl
eCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShl
eGVjLCB0aGlzT2JqLCBpbmRleCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIWUp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFs
KGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTEw
NjgsNiArMTA5MCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9m
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDE1LjQuNC4xNQogICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKQEAgLTEwODksMTggKzEx
MTQsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAg
ICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQog
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBkbyB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKTsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
aiwgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFy
Y2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSB3aGlsZSAoaW5kZXgtLSk7CiAK
QEAgLTExMDksMjMgKzExMzMsMjUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogCiBzdGF0aWMgYm9vbCBtb3ZlRWxlbWVudHMoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIEpTQXJyYXkqIHRhcmdldCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBKU0FycmF5KiBzb3Vy
Y2UsIHVuc2lnbmVkIHNvdXJjZUxlbmd0aCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoTElLRUxZKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc291
cmNlLT5pbmRleGluZ1R5cGUoKSkgJiYgIXNvdXJjZS0+c3RydWN0dXJlKCktPmhvbGVzTXVzdEZv
cndhcmRUb1Byb3RvdHlwZSh2bSkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzb3VyY2VMZW5ndGg7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNvdXJj
ZS0+dHJ5R2V0SW5kZXhRdWlja2x5KGkpOwogICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgdGFyZ2V0LT5wdXREaXJlY3RJbmRleChleGVjLCB0YXJnZXRPZmZzZXQgKyBp
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkgewog
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHNvdXJjZSwgaSk7
Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTExNTMsNyArMTE3OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBjb25jYXRBcHBlbmRPbmUoRXgKIAogICAgIGlmICghcmVzdWx0LT5hcHBlbmRNZW1jcHkoZXhl
Yywgdm0sIDAsIGZpcnN0KSkgewogICAgICAgICBpZiAoIW1vdmVFbGVtZW50cyhleGVjLCB2bSwg
cmVzdWx0LCAwLCBmaXJzdCwgZmlyc3RBcnJheVNpemUpKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
dm0uZXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTExOTcsMTIgKzEyMjMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvUAogICAgIEluZGV4aW5nVHlwZSB0eXBlID0gZmlyc3RBcnJheS0+bWVy
Z2VJbmRleGluZ1R5cGVGb3JDb3B5aW5nKHNlY29uZEFycmF5LT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgaWYgKHR5cGUgPT0gTm9uQXJyYXkgfHwgIWZpcnN0QXJyYXktPmNhbkZhc3RDb3B5KHZtLCBz
ZWNvbmRBcnJheSkgfHwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUgPj0gTUlOX1NQ
QVJTRV9BUlJBWV9JTkRFWCkgewogICAgICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGZpcnN0QXJyYXlTaXplICsgc2Vjb25kQXJyYXlTaXpl
KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogCiAgICAgICAgIGlmICghbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIDAs
IGZpcnN0QXJyYXksIGZpcnN0QXJyYXlTaXplKQogICAgICAgICAgICAgfHwgIW1vdmVFbGVtZW50
cyhleGVjLCB2bSwgcmVzdWx0LCBmaXJzdEFycmF5U2l6ZSwgc2Vjb25kQXJyYXksIHNlY29uZEFy
cmF5U2l6ZSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCh2bS5leGNlcHRpb24oKSk7CisgICAgICAg
ICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE0IEBAIHZvaWQgQm9vbGVh
bkNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbigKIC8vIEVDTUEgMTUuNi4yCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoQm9vbGVhbkNvbnN0cnVjdG9y
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGJvb2xlYW4gPSBq
c0Jvb2xlYW4oZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpKTsKICAgICBTdHJ1Y3R1
cmUqIGJvb2xlYW5TdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmJvb2xlYW5PYmplY3RTdHJ1Y3R1cmUoKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAg
ICBCb29sZWFuT2JqZWN0KiBvYmogPSBCb29sZWFuT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwg
Ym9vbGVhblN0cnVjdHVyZSk7Ci0gICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKGV4ZWMtPnZtKCks
IGJvb2xlYW4pOworICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0
ZSh2bSwgYm9vbGVhblN0cnVjdHVyZSk7CisgICAgb2JqLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBi
b29sZWFuKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDIsMTAgKzQyLDEyIEBAIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnUKIAogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYXRjaFNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9DYXRjaFNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitD
YXRjaFNjb3BlOjpDYXRjaFNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29w
ZUVudHJ5LCBsb2NhdGlvbikKK3sKK30KKworQ2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUoKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisKKyAgICBtX3Zt
LnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpDYXRj
aFNjb3BlRXhpdCwgbV9kZXB0aCwgbV9sb2NhdGlvbik7CisgICAgCisgICAgaWYgKG1fdm0ubV90
cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25F
dmVudDo6Q2F0Y2hTY29wZUV4aXQsIG1fbG9jYXRpb24pOworICAgICAgICBpZiAobV92bS5tX25l
ZWRFeGNlcHRpb25DaGVjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsK
KyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLm1fdHJh
Y2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCisgICAgICAgICAgICBXVEZSZXBvcnRC
YWNrdHJhY2UoKTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5leGNlcHRpb24o
KSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2F0Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhdGNoU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYXRjaFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2F0
Y2hTY29wZV9oCisjZGVmaW5lIENhdGNoU2NvcGVfaAorCisjaW5jbHVkZSAiRXhjZXB0aW9uU2Nv
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlv
blNjb3BlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDYXRjaFNjb3BlKFZNJiwg
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgQ2F0Y2hTY29wZShjb25zdCBDYXRjaFNjb3Bl
JikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRjaFNjb3BlJiYpID0gZGVmYXVsdDsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5DYXRjaFNjb3BlKCk7CisKKyAgICB2b2lkIGNsZWFyRXhj
ZXB0aW9uKCkKKyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxz
ZTsKKyAgICAgICAgbV92bS5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KK307CisKKyNkZWZpbmUg
REVDTEFSRV9DQVRDSF9TQ09QRSh2bV9fKSBcCisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSwg
SlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElO
RV9fKSkKKworI2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9O
KQorCitjbGFzcyBDYXRjaFNjb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoK
KyAgICBBTFdBWVNfSU5MSU5FIENhdGNoU2NvcGUoVk0mIHZtKQorICAgICAgICA6IEV4Y2VwdGlv
blNjb3BlKHZtKQorICAgIHsgfQorICAgIENhdGNoU2NvcGUoY29uc3QgQ2F0Y2hTY29wZSYpID0g
ZGVsZXRlOworICAgIENhdGNoU2NvcGUoQ2F0Y2hTY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fdm0uY2xlYXJFeGNlcHRpb24o
KTsgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwKKyAgICBKU0M6
OkNhdGNoU2NvcGUoKHZtX18pKQorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ2F0Y2hTY29w
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICNkZWZpbmUgQkVHSU5fTk9fU0VUX1BDKCkgXAogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7ICAgICAgXAotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKQorICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsgXAorICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyBcCisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpCiAKICNpZm5kZWYgTkRFQlVHCiAjZGVmaW5lIFNF
VF9QQ19GT1JfU1RVQlMoKSBkbyB7IFwKQEAgLTk5LDEwICsxMDEsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKCkgZG8geyAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBkb0V4Y2VwdGlvbkZ1enppbmdJZkVuYWJsZWQoZXhlYywgIkNvbW1vblNsb3dQ
YXRocyIsIHBjKTsgICBcCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpIHsg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYyk7ICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
IHsgICBcCisgICAgICAgICAgICBSRVRVUk5fVE9fVEhST1coZXhlYywgcGMpOyAgICAgICAgICAg
IFwKICAgICAgICAgICAgIEVORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBFTkQoKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXApAQCAtMTQ0LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2RlZmluZSBDQUxM
X0NIRUNLX0VYQ0VQVElPTihleGVjLCBwYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBFeGVjU3RhdGUqIGNjZUV4ZWMgPSAoZXhlYyk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBJbnN0cnVjdGlvbiogY2NlUEMgPSAocGMpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgQ0FMTF9FTkRfSU1QTChjY2VFeGVjLCBMTEludDo6Y2FsbFRvVGhy
b3coY2NlRXhlYykpOyAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCkBAIC00MjcsNyArNDI5
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX211bCkKICAgICBKU1ZhbHVlIGxlZnQgPSBP
UF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7
CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVt
YmVyKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtNDQy
LDcgKzQ0NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdWIpCiAgICAgSlNWYWx1ZSBs
ZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9QX0MoMykuanNW
YWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSByaWdo
dC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgLSBiKTsK
QEAgLTQ1NywxMCArNDU5LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kaXYpCiAgICAg
SlNWYWx1ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9Q
X0MoMykuanNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91Ymxl
IGIgPSByaWdodC50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
UkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC8gYik7
CiAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgewpAQCAtNDcyLDcgKzQ3NCw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3Vi
bGUgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihqc01vZChhLCBi
KSkpOwpAQCAtNDgyLDEwICs0ODQsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3BvdykK
IHsKICAgICBCRUdJTigpOwogICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGRvdWJsZSBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIFJFVFVSTihq
c051bWJlcihvcGVyYXRpb25NYXRoUG93KGEsIGIpKSk7CiB9CkBAIC00OTQsNyArNDk2LDcgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGlu
dDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9D
KDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA8PCAo
YiAmIDMxKSkpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9y
c2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgPj4gKGIgJiAzMSkpKTsKQEAgLTUxNCw3ICs1MTYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJTigpOwog
ICAgIHVpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJl
cihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMzEpKSkpOwpAQCAtNTMxLDcgKzUzMyw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRhbmQpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBP
UF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhICYg
YikpOwpAQCAtNTQxLDcgKzU0Myw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRvcikK
IHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAg
UkVUVVJOKGpzTnVtYmVyKGEgfCBiKSk7CkBAIC01NTEsNyArNTUzLDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9Q
X0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgp
LnRvSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgXiBiKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgaW5saW5lIGJvb2wgb3BJbihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVy
dHkoZXhlYywgaSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gcHJvcE5hbWUudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1Byb3Bl
cnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lk
IGludGVycHJldGVyVGhyb3dJbkNhbGxlcihFeGVjU3RhdGUqCiAKICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgZXJyb3IpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCi0gICAg
ZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIi5cbiIpOwor
ICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCBzY29wZS5leGNlcHRpb24oKSwgIi5c
biIpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTYgKzg3LDE5
IEBAIGJvb2wgY2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKiBleGVjLCAKIAogSlNWYWx1ZSBl
dmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1
ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
CiAgICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7CiAKICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogcHJvZ3JhbSA9IFByb2dyYW1FeGVjdXRhYmxlOjpjcmVhdGUoZXhlYywgc291cmNlKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcHJvZ3JhbSk7CiAgICAgaWYgKCFwcm9n
cmFtKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24o
KTsKLSAgICAgICAgZXhlYy0+dm0oKS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm5l
ZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTEwNSw5
ICsxMDgsOSBAQCBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgCiAgICAg
SlNPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4
ZWMsIE5vdFN0cmljdE1vZGUpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGV4ZWMtPmludGVycHJl
dGVyKCktPmV4ZWN1dGUocHJvZ3JhbSwgZXhlYywgdGhpc09iaik7CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRp
b24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0xNDcsOSArMTUwLDExIEBAIHN0YXRpYyBTeW1ib2wq
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnQKIAogc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBy
ZWplY3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmpl
Y3QpOwogICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICByZXR1cm4g
ZGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTE3NiwxNyArMTgxLDE5IEBAIEpTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
SlNWYWx1ZSBpbml0aWF0b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVh
ZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+
dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3Rm
VGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2
bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZv
ckVudHJ5UG9pbnRNb2R1bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVT
eW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJbnNlcnQg
dGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhl
IGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2FkZXIo
KS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBzb3Vy
Y2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVqZWN0
UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJuIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZShsb2NrLCBleGVjLCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5p
dGlhdG9yKTsKQEAgLTIxMywxOCArMjIwLDIwIEBAIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9k
dWxlKEV4ZWNTdGF0ZSoKIAogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJp
bmdUYWJsZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwog
Ci0gICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMt
PnZtKCkpOworICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVs
ZSh2bSk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRy
eUdsb2JhbE9iamVjdCgpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0
byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lzdHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5
LgogICAgIC8vIEZJWE1FOiBJbnRyb2R1Y2UgSlNTb3VyY2VDb2RlIG9iamVjdCB0byB3cmFwIGFy
b3VuZCB0aGlzIHNvdXJjZS4KICAgICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92
aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3
KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNl
KGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gbG9hZE1vZHVsZShsb2NrLCBleGVj
LCBnbG9iYWxPYmplY3QsIGtleSwganNVbmRlZmluZWQoKSwgaW5pdGlhdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDEyICsxOTYsMTQgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jQXNzZXJ0KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGJvb2wgY29uZGl0aW9u
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKGNvbmRp
dGlvbikKQEAgLTIyNSw2ICsyMjcsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQ
cm90b0Z1bmNQcm9maWxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25z
b2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVD
bGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTIzNiw3ICsyNDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2
YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50
KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGUoZXhlYywgdGl0bGUpOwpAQCAtMjQ1LDYg
KzI0OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGVF
bmQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNs
aWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAg
IGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtMjU2LDcgKzI2Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGNsaWVudC0+cHJvZmlsZUVuZChleGVjLCB0aXRsZSk7CkBAIC0yNjUsNiArMjcxLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGFrZUhlYXBTbmFwc2hvdChF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0yNzYsNyArMjg0LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhV
bmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Y2xpZW50LT50YWtlSGVhcFNuYXBzaG90KGV4ZWMsIHRpdGxlKTsKQEAgLTI5Miw2ICszMDAsOCBA
QCBzdGF0aWMgU3RyaW5nIHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoCiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTMwMSw3
ICszMTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHRpdGxlID0gQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAgICAg
IHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0zMTEsNiArMzIxLDggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0zMjAsNyArMzMyLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICB0aXRs
ZSA9ICBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUg
PSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0YXRpYyBkb3VibGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMKIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBuZXdUYXJnZXQsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaW50IG51bUFyZ3MgPSBhcmdzLnNpemUoKTsKIAogICAg
IGRvdWJsZSB2YWx1ZTsKQEAgLTE2Nyw3ICsxNjgsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0
ZShFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHZhbHVlID0gbWlsbGlzZWNvbmRzRnJvbUNvbXBv
bmVudHMoZXhlYywgYXJncywgV1RGOjpMb2NhbFRpbWUpOwogCiAgICAgU3RydWN0dXJlKiBkYXRl
U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmRhdGVTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3Jl
YXRlKHZtLCBkYXRlU3RydWN0dXJlLCB2YWx1ZSk7CkBAIC0yMDIsMTAgKzIwMywxMiBAQCBDYWxs
VHlwZSBEYXRlQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKEpTCiAKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVBhcnNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBTdHJpbmcgZGF0ZVN0ciA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0
ZShleGVjLT52bSgpLCBkYXRlU3RyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIocGFyc2VEYXRlKHZtLCBkYXRlU3RyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVOb3coRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDMsNyArNjAzLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBkYXRlUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBpZiAoIXRoaXNWYWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkRh
dGUucHJvdG90eXBlW1N5bWJvbC50b1ByaW1pdGl2ZV0gZXhwZWN0ZWQgfHRoaXN8IHRvIGJlIGFu
IG9iamVjdC4iKTsKQEAgLTYxNCw3ICs2MTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAKICAgICBKU1ZhbHVlIGhpbnRWYWx1ZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApOwogICAgIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgdHlwZSA9IHRvUHJlZmVy
cmVkUHJpbWl0aXZlVHlwZShleGVjLCBoaW50VmFsdWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAodHlwZSA9PSBOb1By
ZWZlcmVuY2UpCkBAIC0xMTIzLDIwICsxMTI0LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJv
dG9GdW5jVG9KU09OKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGV4ZWMsIE5vdFN0cmljdE1vZGUpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBK
U1ZhbHVlIHRpbWVWYWx1ZSA9IG9iamVjdC0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyTnVtYmVy
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7
CiAgICAgaWYgKHRpbWVWYWx1ZS5pc051bWJlcigpICYmICEodGltZVZhbHVlLmlzSW50MzIoKSB8
fCBzdGQ6OmlzZmluaXRlKHRpbWVWYWx1ZS5hc0RvdWJsZSgpKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCi0gICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIEpTVmFsdWUgdG9JU09WYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMTE0NSw3ICsxMTQ3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0
cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChl
eGVjLCBhc09iamVjdCh0b0lTT1ZhbHVlKSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGV4
ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJ0b0lTT1N0cmlu
ZyBkaWQgbm90IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOSArNTAsMTEgQEAgdm9pZCBFcnJvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWTQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IEludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRD
b3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVy
ZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUs
IG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgdm9pZCBFcnJvckluc3RhbmNl
OjpmaW5pc2hDcmVhdGlvbihFeGVjUwogU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmFt
ZVZhbHVlOwogICAgIGF1dG8gbmFtZVByb3BlcnROYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+bmFt
ZTsKQEAgLTE3NiwxNCArMTc3LDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNlOjpzYW5pdGl6ZWRU
b1N0cmluZygKICAgICAgICAgfQogICAgICAgICBjdXJyZW50T2JqID0gb2JqLT5nZXRQcm90b3R5
cGVEaXJlY3QoKTsKICAgICB9Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbmFtZVN0cmluZzsKICAgICBp
ZiAoIW5hbWVWYWx1ZSkKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiRXJyb3Ii
KTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWVWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKICAgICB9CiAKQEAgLTE5MiwxNCArMTkzLDE0IEBAIFN0cmluZyBFcnJvckluc3RhbmNl
OjpzYW5pdGl6ZWRUb1N0cmluZygKICAgICBQcm9wZXJ0eVNsb3QgbWVzc2FnZVNsb3QodGhpcywg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSk7CiAgICAgaWYgKEpT
T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpcywgZXhlYywgbWVzc2FnZVByb3BlcnROYW1l
LCBtZXNzYWdlU2xvdCkgJiYgbWVzc2FnZVNsb3QuaXNWYWx1ZSgpKQogICAgICAgICBtZXNzYWdl
VmFsdWUgPSBtZXNzYWdlU2xvdC5nZXRWYWx1ZShleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmc7CiAgICAgaWYgKCFtZXNzYWdlVmFsdWUp
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vy
cm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAKICAgICAvLyAzLiBMZXQgbmFtZSBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBhcmd1bWVudCAibmFtZSIuCiAgICAgSlNWYWx1ZSBuYW1lID0gdGhpc09iai0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDQuIElmIG5hbWUg
aXMgdW5kZWZpbmVkLCB0aGVuIGxldCBuYW1lIGJlICJFcnJvciI7IGVsc2UgbGV0IG5hbWUgYmUg
VG9TdHJpbmcobmFtZSkuCkBAIC05NCwxMyArOTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBlcnJvclByb3RvRgogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJF
cnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgLy8gNS4gTGV0
IG1zZyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mIE8gd2l0aCBhcmd1bWVudCAibWVzc2FnZSIuCiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gdGhp
c09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IC8vIChzaWMpCkBAIC0xMTEsNyArMTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBlcnJvclByb3RvRgogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZl
bnQuaCIKKworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworICAgIAordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6RXhjZXB0aW9uRXZlbnQgZXZlbnQp
Cit7CisgICAgY29uc3QgY2hhciogZXZlbnROYW1lOworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAg
ICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFbnRyeToKKyAgICAgICAgZXZl
bnROYW1lID0gIkNhdGNoU2NvcGUgRW50cnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpT
Qzo6RXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0OgorICAgICAgICBldmVudE5hbWUgPSAi
Q2F0Y2hTY29wZSBFeGl0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlv
bkV2ZW50OjpOZWVkRXhjZXB0aW9uQ2hlY2s6CisgICAgICAgIGV2ZW50TmFtZSA9ICJOZWVkIGV4
Y2VwdGlvbiBjaGVjayI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25F
dmVudDo6VGhyb3dTY29wZUVudHJ5OgorICAgICAgICBldmVudE5hbWUgPSAiVGhyb3dTY29wZSBF
bnRyeSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6VGhy
b3dTY29wZUV4aXQ6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvd1Njb3BlIEV4aXQiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6OlRocm93OgorICAgICAg
ICBldmVudE5hbWUgPSAiVGhyb3ciOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBvdXQu
cHJpbnQoZXZlbnROYW1lKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKworbmFtZXNwYWNlIEpTQyB7CisgICAgCitlbnVtIGNsYXNzIEV4Y2Vw
dGlvbkV2ZW50IHsKKyAgICBDYXRjaFNjb3BlRW50cnksCisgICAgQ2F0Y2hTY29wZUV4aXQsCisg
ICAgTmVlZEV4Y2VwdGlvbkNoZWNrLAorICAgIFRocm93U2NvcGVFbnRyeSwKKyAgICBUaHJvd1Nj
b3BlRXhpdCwKKyAgICBUaHJvdworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFj
ZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudExvY2F0aW9uLmgiCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAgCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpFeGNlcHRpb25FdmVudExv
Y2F0aW9uIGxvY2F0aW9uKQoreworICAgIG91dC5wcmludChsb2NhdGlvbi5mdW5jdGlvbk5hbWUs
ICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5KQkoZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaDoyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKCkg
eyB9CisgICAgVGhyb3dTY29wZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkKKyAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVu
Y3Rpb25OYW1lKQorICAgICAgICAsIGZpbGUoZmlsZSkKKyAgICAgICAgLCBsaW5lKGxpbmUpCisg
ICAgeyB9CisgICAgCisgICAgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9Owor
ICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbGluZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRp
b24oKSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorc3RydWN0IEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24geworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oKSB7IH0KKyAgICBFeGNlcHRp
b25FdmVudExvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmls
ZSwgdW5zaWduZWQgbGluZSkKICAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQog
ICAgICAgICAsIGZpbGUoZmlsZSkKICAgICAgICAgLCBsaW5lKGxpbmUpCkBAIC00MSwzICs0MSwx
MSBAQCBzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QworCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZm5kZWYgRXhjZXB0aW9uSGVscGVyc19oCiAjZGVmaW5l
IEV4Y2VwdGlvbkhlbHBlcnNfaAogCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUg
IkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlRocm93
U2NvcGUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25TY29wZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKKworI2luY2x1ZGUgIkV4Y2Vw
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1ND
T1BFX1ZFUklGSUNBVElPTikKKyAgICAKK0V4Y2VwdGlvblNjb3BlOjpFeGNlcHRpb25TY29wZShW
TSYgdm0sIEV4Y2VwdGlvbkV2ZW50IGVudHJ5RXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24g
bG9jYXRpb24pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV9wcmV2aW91c1Njb3BlKHZtLm1fdG9w
RXhjZXB0aW9uU2NvcGUpCisgICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQorICAgICwgbV9kZXB0
aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK3sK
KyAgICBtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUgPSB0aGlzOworICAgIAorICAgIGlmIChtX3Zt
Lm1fdHJhY2VFeGNlcHRpb25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnRIZWFkZXIoZW50cnlF
dmVudCwgbV9sb2NhdGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
KQorICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOworICAgICAgICBkYXRhTG9n
KCJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50
c1dpdGhTdGFja1RyYWNlcykKKyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAg
IH0KK30KKworRXhjZXB0aW9uU2NvcGU6On5FeGNlcHRpb25TY29wZSgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQobV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlKTsKKyAgICBtX3ZtLm1fdG9wRXhjZXB0
aW9uU2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7Cit9CisKK3ZvaWQgRXhjZXB0aW9uU2NvcGU6Omxv
Z0V2ZW50KEV4Y2VwdGlvbkV2ZW50IGV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0
aW9uKQoreworICAgIGxvZ0V2ZW50SGVhZGVyKGV2ZW50LCBsb2NhdGlvbik7CisgICAgZGF0YUxv
ZygiXG4iKTsKK30KKwordm9pZCBFeGNlcHRpb25TY29wZTo6bG9nRXZlbnRIZWFkZXIoRXhjZXB0
aW9uRXZlbnQgZXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAg
ZGF0YUxvZygiPCIsIG1fdm0ubV9leGNlcHRpb25FdmVudENvdW50KyssICI+IFsiLCBtX2RlcHRo
LCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24pOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEVY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25T
Y29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2VwdGlvblNjb3BlX2gKKyNk
ZWZpbmUgRXhjZXB0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpT
QyB7CisgICAgCitjbGFzcyBFeGNlcHRpb247CisgICAgCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9T
Q09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6
CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIHVuc2lnbmVkIGRlcHRo
KCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aDsgfQorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkK
KyAgICB7CisgICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAg
IEV4Y2VwdGlvblNjb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnQgZW50cnlFdmVudCwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2NvcGUm
KSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRlZmF1
bHQ7CisgICAgfkV4Y2VwdGlvblNjb3BlKCk7CisKKyAgICB2b2lkIGxvZ0V2ZW50KEV4Y2VwdGlv
bkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICB2b2lkIGxvZ0V2ZW50SGVhZGVy
KEV4Y2VwdGlvbkV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKworICAgIFZNJiBtX3Zt
OworICAgIEV4Y2VwdGlvblNjb3BlKiBtX3ByZXZpb3VzU2NvcGU7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBtX2xvY2F0aW9uOworICAgIHVuc2lnbmVkIG1fZGVwdGg7Cit9OworICAgIAor
I2Vsc2UgLy8gbm90IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
Y2xhc3MgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgVk0mIHZt
KCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uKiBl
eGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvblNjb3BlKFZNJiB2bSkKKyAgICAgICAgOiBtX3ZtKHZt
KQorICAgIHsgfQorICAgIEV4Y2VwdGlvblNjb3BlKGNvbnN0IEV4Y2VwdGlvblNjb3BlJikgPSBk
ZWxldGU7CisgICAgRXhjZXB0aW9uU2NvcGUoRXhjZXB0aW9uU2NvcGUmJikgPSBkZWZhdWx0Owor
CisgICAgVk0mIG1fdm07Cit9OworICAgIAorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NP
UEVfVkVSSUZJQ0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBF
eGNlcHRpb25TY29wZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBKU09iamVjdCogY29uc3RydWN0RnVuY3Rpb25T
a2lwcGluZ0V2YWxFCiAgICAgfQogCiAgICAgU3RydWN0dXJlKiBzdWJjbGFzc1N0cnVjdHVyZSA9
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIG5ld1Rhcmdl
dCwgZ2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBm
dW5jdGlvbiwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBzdWJjbGFzc1N0cnVjdHVyZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsx
NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiAgICAgLy8g
RWxzZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgaWYgKHRhcmdldE9iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkpIHsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAg
ICAvLyBhLiBMZXQgTCBiZSB0aGUgbGVuZ3RoIHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUg
bGVuZ3RoIG9mIEEuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmlj
QXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxOSwxMyArMjE5LDE2IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6ZGVmaW5lT3duUHIKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CiB2b2lkIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMsIFZpcnR1YWxS
ZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxU
eXBlKj4odGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaSArIG9mZnNl
dCkpCiAgICAgICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4UXVpY2tseShpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IGdldChleGVjLCBpICsgb2Zmc2V0
KTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT52bSgpLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MywxNSArNzMsMTcgQEAgR2V0dGVyU2V0dGVyKiBHZXR0ZXJTZXR0ZXI6OndpdGhTZXR0
ZXIoVgogCiBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2Us
IEpTVmFsdWUgZ2V0dGVyU2V0dGVyKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIEZJWE1FOiBTb21l
IGNhbGxlcnMgbWF5IGludm9rZSBnZXQoKSB3aXRob3V0IGNoZWNraW5nIGZvciBhbiBleGNlcHRp
b24gZmlyc3QuCiAgICAgLy8gV2Ugd29yayBhcm91bmQgdGhhdCBieSBjaGVja2luZyBoZXJlLgot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKIAogICAgIEpTT2JqZWN0
KiBnZXR0ZXIgPSBqc0Nhc3Q8R2V0dGVyU2V0dGVyKj4oZ2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCk7
CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRl
ci0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEp
OworICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZSh2bSktPmdldENh
bGxEYXRhKGdldHRlciwgY2FsbERhdGEpOwogICAgIHJldHVybiBjYWxsKGV4ZWMsIGdldHRlciwg
Y2FsbFR5cGUsIGNhbGxEYXRhLCBiYXNlLCBBcmdMaXN0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDkgKzgzLDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0OjpkaXMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBpbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25PYmplY3RMb2coRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGFyZ2V0ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RyaW5nIHZhbHVl
ID0gdGFyZ2V0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBkYXRhTG9nKHZh
bHVlLCAiXG4iKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBA
IFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKIHsKIAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIC8vIFdlIGFsbG93IG5ld1RhcmdldCA9PSBKU1ZhbHVlKCkgYmVjYXVzZSB0aGUgQVBJ
IG5lZWRzIHRvIGJlIGFibGUgdG8gY3JlYXRlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgYSByZWFs
IEpTIGZyYW1lLgogICAgIC8vIFNpbmNlIHdlIGRvbid0IGFsbG93IHN1YmNsYXNzaW5nIGluIHRo
ZSBBUEkgd2UganVzdCB0cmVhdCBuZXdUYXJnZXQgPT0gSlNWYWx1ZSgpIGFzIG5ld1RhcmdldCA9
PSBleGVjLT5jYWxsZWUoKQogICAgIEFTU0VSVCghbmV3VGFyZ2V0IHx8IG5ld1RhcmdldC5pc0Nv
bnN0cnVjdG9yKCkpOwpAQCAtMTEwLDEzICsxMTEsMTMgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbAogCiAgICAgICAgICAgICAvLyBOb3RlLCBSZWZsZWN0LmNvbnN0
cnVjdCBtaWdodCBjYXVzZSB0aGUgcHJvZmlsZSB0byBjaHVybiBidXQgd2UgZG9uJ3QgY2FyZS4K
ICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5
cGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZ1bmN0aW9uLT5yYXJlRGF0
YSh2bSktPmNyZWF0ZUludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2Uo
dm0sIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBuZXdUYXJnZXQuZ2V0KGV4ZWMsIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICBpZiAoSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihwcm90b3R5cGVWYWx1ZSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3Qu
Y29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBj
b25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyLDYgKzE2Miw5IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBzZWFyY2hMb2NhbGVE
YXRhKGMKIAogdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIGxvY2FsZXMsIEpTVmFsdWUgb3B0aW9uc1ZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgLy8gMTAuMS4xIEluaXRpYWxpemVDb2xsYXRvciAoY29sbGF0b3IsIGxvY2Fs
ZXMsIG9wdGlvbnMpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgY29sbGF0b3IgaGFzIGFu
IFtbaW5pdGlhbGl6ZWRJbnRsT2JqZWN0XV0gaW50ZXJuYWwgc2xvdCB3aXRoIHZhbHVlIHRydWUs
IHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgICAvLyAyLiBTZXQgY29sbGF0b3IuW1tp
bml0aWFsaXplZEludGxPYmplY3RdXSB0byB0cnVlLgpAQCAtMTY5LDcgKzE3Miw3IEBAIHZvaWQg
SW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICAvLyAzLiBMZXQgcmVxdWVz
dGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8g
cmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMp
OwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwg
dGhlbgpAQCAtMTgxLDE0ICsxODQsMTQgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVD
b2xsYXRvcihFeAogICAgICAgICAvLyBhLiBMZXQgb3B0aW9ucyBiZSBUb09iamVjdChvcHRpb25z
KS4KICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNWYWx1ZS50b09iamVjdCgmc3RhdGUpOwogICAg
ICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIDcuIExldCB1IGJlIEdldE9wdGlv
bihvcHRpb25zLCAidXNhZ2UiLCAic3RyaW5nIiwgwqsic29ydCIsICJzZWFyY2giwrssICJzb3J0
IikuCi0gICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2gi
IH0sICJ1c2FnZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQi
KTsKKyAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwgeyAic29ydCIsICJzZWFyY2giIH0sICJ1c2Fn
ZSBtdXN0IGJlIGVpdGhlciBcInNvcnRcIiBvciBcInNlYXJjaFwiIiwgInNvcnQiKTsKICAgICAv
LyA4LiBSZXR1cm5JZkFicnVwdCh1KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIDkuIFNldCBjb2xsYXRvci5bW3VzYWdlXV0gdG8gdS4KICAgICBpZiAodXNhZ2VTdHJpbmcg
PT0gInNvcnQiKQpAQCAtMjEyLDkgKzIxNSw5IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFs
aXplQ29sbGF0b3IoRXgKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBvcHQ7CiAKICAgICAv
LyAxMy4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRjaGVyIiwg
InN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCi0gICAgU3Ry
aW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgp
LnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIgfSwg
ImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0XCIi
LCAiYmVzdCBmaXQiKTsKKyAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIs
ICJiZXN0IGZpdCIgfSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBv
ciBcImJlc3QgZml0XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyAxNC4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxNS4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjMzLDE2ICsyMzYsMTYgQEAgdm9pZCBJ
bnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIHsKICAgICAgICAgU3RyaW5n
IG51bWVyaWNTdHJpbmc7CiAgICAgICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgICAgICBib29s
IG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5w
cm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2spOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5udW1lcmljLCB1c2VzRmFsbGJhY2sp
OworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIXVzZXNGYWxsYmFjaykKICAgICAgICAgICAgIG51bWVyaWNT
dHJpbmcgPSBBU0NJSUxpdGVyYWwobnVtZXJpYyA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAg
ICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgia24iKSwgbnVtZXJpY1N0cmluZyk7CiAgICAgfQogICAg
IHsKLSAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9w
dGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCB7ICJ1cHBlciIsICJs
b3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJzdCBtdXN0IGJlIGVpdGhlciBcInVwcGVyXCIsIFwi
bG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgU3RyaW5nIGNhc2VGaXJzdCA9IGludGxTdHJpbmdPcHRpb24o
c3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAi
bG93ZXIiLCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBc
Imxvd2VyXCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBvcHQuYWRk
KEFTQ0lJTGl0ZXJhbCgia2YiKSwgY2FzZUZpcnN0KTsKICAgICB9CkBAIC0yNzcsOSArMjgwLDkg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIG1fbnVtZXJp
YyA9IChyZXN1bHQuZ2V0KEFTQ0lJTGl0ZXJhbCgia24iKSkgPT0gInRydWUiKTsKIAogICAgIC8v
IDI0LiBMZXQgcyBiZSBHZXRPcHRpb24ob3B0aW9ucywgInNlbnNpdGl2aXR5IiwgInN0cmluZyIs
IMKrImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCLCuywgdW5kZWZpbmVkKS4KLSAg
ICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRp
b25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFj
Y2VudCIsICJjYXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBc
ImJhc2VcIiwgXCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7
CisgICAgU3RyaW5nIHNlbnNpdGl2aXR5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIHsgImJhc2UiLCAiYWNjZW50
IiwgImNhc2UiLCAidmFyaWFudCIgfSwgInNlbnNpdGl2aXR5IG11c3QgYmUgZWl0aGVyIFwiYmFz
ZVwiLCBcImFjY2VudFwiLCBcImNhc2VcIiwgb3IgXCJ2YXJpYW50XCIiLCBudWxscHRyKTsKICAg
ICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICAvLyAyNi4gSWYgcyBpcyB1bmRlZmluZWQsIHRoZW4KICAgICAvLyBhLiBJZiB1IGlzICJz
b3J0IiwgdGhlbiBsZXQgcyBiZSAidmFyaWFudCIuCkBAIC0zMDAsMTEgKzMwMywxMSBAQCB2b2lk
IEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKICAgICAvLyAyOC4gTGV0IGlw
IGJlIEdldE9wdGlvbihvcHRpb25zLCAiaWdub3JlUHVuY3R1YXRpb24iLCAiYm9vbGVhbiIsIHVu
ZGVmaW5lZCwgZmFsc2UpLgogICAgIGJvb2wgdXNlc0ZhbGxiYWNrOwotICAgIGJvb2wgaWdub3Jl
UHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0o
KS5wcm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKKyAgICBi
b29sIGlnbm9yZVB1bmN0dWF0aW9uID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2spOwogICAg
IGlmICh1c2VzRmFsbGJhY2spCiAgICAgICAgIGlnbm9yZVB1bmN0dWF0aW9uID0gZmFsc2U7CiAg
ICAgLy8gMjkuIFJldHVybklmQWJydXB0KGlwKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIC8vIDMwLiBTZXQgY29sbGF0b3IuW1tpZ25vcmVQdW5jdHVhdGlvbl1dIHRvIGlwLgog
ICAgIG1faWdub3JlUHVuY3R1YXRpb24gPSBpZ25vcmVQdW5jdHVhdGlvbjsKQEAgLTMxOCwxMSAr
MzIxLDEzIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKIAogdm9p
ZCBJbnRsQ29sbGF0b3I6OmNyZWF0ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAgICAgQVNTRVJUKCFtX2NvbGxhdG9yKTsKIAogICAgIGlmICghbV9pbml0aWFsaXpl
ZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0ZSwganNVbmRlZmlu
ZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIH0KIAogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwpAQCAtNDE2LDYg
KzQyMSw5IEBAIGNvbnN0IGNoYXIqIEludGxDb2xsYXRvcjo6c2Vuc2l0aXZpdHlTdHIKIAogSlNP
YmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4zLjUgSW50bC5Db2xsYXRvci5wcm90b3R5cGUucmVz
b2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJu
cyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFz
IGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNzaWduaW5nIHRv
IGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAtNDI3LDEwICs0MzUsOSBA
QCBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoCiAKICAgICBpZiAoIW1f
aW5pdGlhbGl6ZWRDb2xsYXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUs
IGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBt
X2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
dXNhZ2UsIGpzTm9udHJpdmlhbFN0cmluZygmc3RhdGUsIEFTQ0lJTGl0ZXJhbCh1c2FnZVN0cmlu
ZyhtX3VzYWdlKSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxD
b2xsYXRvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTQgKzg2LDE2IEBAIHZvaWQgSW50bENvbGxhdG9y
Q29uc3RydWN0b3I6OmZpbmlzaENyZWEKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SW50bENvbGxhdG9yKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIC8vIDEwLjEuMiBJbnRsLkNvbGxhdG9yIChbbG9jYWxlcyBbLCBvcHRpb25zXV0p
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0
IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFy
Z2V0IGJlIE5ld1RhcmdldC4KICAgICAvLyAyLiBMZXQgY29sbGF0b3IgYmUgT3JkaW5hcnlDcmVh
dGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlQ29sbGF0b3JQcm90b3R5cGUlKS4KICAgICAv
LyAzLiBSZXR1cm5JZkFicnVwdChjb2xsYXRvcikuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUt
Pm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bENvbGxhdG9yQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2Fs
bGVlKCkpLT5jb2xsYXRvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSW50bENvbGxhdG9yKiBjb2xs
YXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAg
IEludGxDb2xsYXRvciogY29sbGF0b3IgPSBJbnRsQ29sbGF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKICAgICBBU1NFUlQoY29sbGF0b3IpOwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxp
emVDb2xsYXRvcihjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzcsMTMgKzEzOSwx
NSBAQCBDYWxsVHlwZSBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6Z2V0Q2FsCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yQ29uc3RydWN0b3JGdW5jU3VwcG9ydGVk
TG9jYWxlc09mKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjIu
MiBJbnRsLkNvbGxhdG9yLnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAo
RUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgw
KSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBp
ZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyglQ29sbGF0b3IlLltbYXZhaWxhYmxl
TG9jYWxlc11dLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
bENvbGxhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsOCBAQCB2
b2lkIEludGxDb2xsYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpCiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckZ1bmNDb21wYXJlKEV4ZWNTdGF0ZSog
c3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEwLjMuNCBDb2xsYXRvciBDb21wYXJlIEZ1
bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBjb2xsYXRvciBiZSB0aGUgdGhp
cyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoY29sbGF0b3IpIGlzIE9iamVjdCBhbmQg
Y29sbGF0b3IgaGFzIGFuIFtbaW5pdGlhbGl6ZWRDb2xsYXRvcl1dIGludGVybmFsIHNsb3Qgd2hv
c2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTkxLDEzICs5MywxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNS4gTGV0IFggYmUgVG9TdHJpbmcoeCkuCiAg
ICAgSlNTdHJpbmcqIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpOwogICAg
IC8vIDYuIFJldHVybklmQWJydXB0KFgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDcuIExldCBZIGJlIFRvU3Ry
aW5nKHkpLgogICAgIEpTU3RyaW5nKiB5ID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKHN0
YXRlKTsKICAgICAvLyA4LiBSZXR1cm5JZkFicnVwdChZKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA5LiBSZXR1
cm4gQ29tcGFyZVN0cmluZ3MoY29sbGF0b3IsIFgsIFkpLgpAQCAtMTI1LDcgKzEyNyw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG8KIAogICAgICAgICAvLyBjLiBM
ZXQgYmMgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAg
IGJvdW5kQ29tcGFyZSA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB0YXJnZXRPYmplY3QsIGNvbGxhdG9yLCBudWxscHRyLCAyLCBBU0NJSUxpdGVyYWwo
ImNvbXBhcmUiKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgLy8gZC4gU2V0IGNvbGxhdG9yLltbYm91bmRDb21w
YXJlXV0gdG8gYmMuCiAgICAgICAgIGNvbGxhdG9yLT5zZXRCb3VuZENvbXBhcmUodm0sIGJvdW5k
Q29tcGFyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRp
bWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55
RGF0CiB7CiAgICAgLy8gMTIuMS4xIFRvRGF0ZVRpbWVPcHRpb25zIGFic3RyYWN0IG9wZXJhdGlv
biAoRUNNQS00MDIgMi4wKQogICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAxLiBJZiBvcHRpb25zIGlzIHVu
ZGVmaW5lZCwgdGhlbiBsZXQgb3B0aW9ucyBiZSBudWxsLCBlbHNlIGxldCBvcHRpb25zIGJlIFRv
T2JqZWN0KG9wdGlvbnMpLgogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgpAQCAt
MjI0LDcgKzIyNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQK
ICAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBleGVjLmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKICAgICBl
bHNlIHsKICAgICAgICAgSlNPYmplY3QqIG9yaWdpbmFsVG9PYmplY3QgPSBvcmlnaW5hbE9wdGlv
bnMudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMs
IG9yaWdpbmFsVG9PYmplY3QpOwogICAgIH0KQEAgLTI0MSwyNSArMjQyLDI1IEBAIHN0YXRpYyBK
U09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJy
dXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBs
ZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgogICAgIEpTVmFsdWUgd2Vla2RheSA9IG9wdGlvbnMt
PmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCF3ZWVrZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAg
ICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSB5ZWFyID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXllYXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVl
ZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIG1vbnRoID0gb3B0aW9ucy0+Z2V0KCZl
eGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFtb250aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVm
YXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5kYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGlmICghZGF5LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZh
bHNlOwpAQCAtMjczLDE5ICsyNzQsMTkgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0
aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2
LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFs
c2UuCiAgICAgSlNWYWx1ZSBob3VyID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5ob3VyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IWhvdXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAg
ICBKU1ZhbHVlIG1pbnV0ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bWludXRlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1p
bnV0ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAg
IEpTVmFsdWUgc2Vjb25kID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZWNvbmQpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghc2Vj
b25kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwpAQCAtMjk5
LDE1ICszMDAsMTUgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAog
ICAgICAgICBKU1N0cmluZyogbnVtZXJpYyA9IGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgQVND
SUlMaXRlcmFsKCJudW1lcmljIikpOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+eWVhciwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgbnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5kYXksIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApAQCAtNDI4LDEzICs0MjksMTMg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDMuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoZXhlYywgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9j
YWxlcyksCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gTGV0IG9wdGlv
bnMgYmUgVG9EYXRlVGltZU9wdGlvbnMob3B0aW9ucywgImFueSIsICJkYXRlIikuCiAgICAgSlNP
YmplY3QqIG9wdGlvbnMgPSB0b0RhdGVUaW1lT3B0aW9uc0FueURhdGUoZXhlYywgb3JpZ2luYWxP
cHRpb25zKTsKICAgICAvLyA2LiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyA3LiBMZXQgb3B0IGJlIGEgbmV3IFJlY29yZC4KQEAg
LTQ0Myw3ICs0NDQsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
CiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJsb2NhbGVNYXRj
aGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAg
ICAgU3RyaW5nIGxvY2FsZU1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMs
IHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZU1hdGNoZXIsIHsgImxvb2t1cCIsICJiZXN0IGZpdCIg
fSwgImxvY2FsZU1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJsb29rdXBcIiBvciBcImJlc3QgZml0
XCIiLCAiYmVzdCBmaXQiKTsKICAgICAvLyA5LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRj
aGVyXV0gdG8gbWF0Y2hlci4KICAgICBsb2NhbGVPcHQuYWRkKHZtLnByb3BlcnR5TmFtZXMtPmxv
Y2FsZU1hdGNoZXIuc3RyaW5nKCksIGxvY2FsZU1hdGNoZXIpOwpAQCAtNDcyLDcgKzQ3Myw3IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAxNy4gTGV0
IHR6IGJlIEdldChvcHRpb25zLCAidGltZVpvbmUiKS4KICAgICBKU1ZhbHVlIHR6VmFsdWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lKTsKICAgICAvLyAx
OC4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIDE5LiBJZiB0eiBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC00ODEsNyArNDgyLDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgICAgICAvLyBhLiBM
ZXQgdHogYmUgVG9TdHJpbmcodHopLgogICAgICAgICBTdHJpbmcgb3JpZ2luYWxUeiA9IHR6VmFs
dWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh0eiku
Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBjLiBJ
ZiB0aGUgcmVzdWx0IG9mIElzVmFsaWRUaW1lWm9uZU5hbWUodHopIGlzIGZhbHNlLCB0aGVuIGku
IFRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIC8vIGQuIExldCB0eiBiZSBD
YW5vbmljYWxpemVUaW1lWm9uZU5hbWUodHopLgpAQCAtNTE0LDcgKzUxNSw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICBhdXRvIHNob3J0TG9uZyA9IHsg
InNob3J0IiwgImxvbmciIH07CiAKICAgICBTdHJpbmcgd2Vla2RheSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+d2Vla2RheSwgbmFycm93U2hvcnRM
b25nLCAid2Vla2RheSBtdXN0IGJlIFwibmFycm93XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIi
LCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF3ZWVrZGF5
LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh3ZWVrZGF5ID09ICJuYXJyb3ciKQpAQCAtNTI2LDcg
KzUyNyw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9
CiAKICAgICBTdHJpbmcgZXJhID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5lcmEsIG5hcnJvd1Nob3J0TG9uZywgImVyYSBtdXN0IGJlIFwibmFycm93
XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFlcmEuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGVyYSA9PSAi
bmFycm93IikKQEAgLTUzOCw3ICs1MzksNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHllYXIgPSBpbnRsU3RyaW5nT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIsIHR3b0RpZ2l0TnVtZXJpYywg
InllYXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXllYXIuaXNOdWxsKCkpIHsKICAgICAg
ICAgaWYgKHllYXIgPT0gIjItZGlnaXQiKQpAQCAtNTQ4LDcgKzU0OSw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgbW9udGgg
PSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRo
LCB0d29EaWdpdE51bWVyaWNOYXJyb3dTaG9ydExvbmcsICJtb250aCBtdXN0IGJlIFwiMi1kaWdp
dFwiLCBcIm51bWVyaWNcIiwgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51
bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1vbnRoLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmIChtb250aCA9PSAiMi1kaWdpdCIpCkBAIC01NjQsNyArNTY1LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPmRheSwgdHdvRGlnaXROdW1lcmljLCAiZGF5IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKGRheSA9PSAiMi1kaWdpdCIpCkBAIC01
NzQsNyArNTc1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAog
ICAgIH0KIAogICAgIFN0cmluZyBob3VyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25z
LCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyLCB0d29EaWdpdE51bWVyaWMsICJob3VyIG11c3QgYmUg
XCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVkIGhvdXIxMiB0byBtYWtlIHRoZSBob3VyIHNrZWxl
dG9uIHBhdHRlcm4gZGVjaXNpb24sIHNvIGRvIHRoaXMgZWFybHkuCkBAIC01ODIsNyArNTgzLDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIGJvb2wgaXNI
b3VyMTJVbmRlZmluZWQ7CiAgICAgYm9vbCBocjEyID0gaW50bEJvb2xlYW5PcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aG91cjEyLCBpc0hvdXIxMlVuZGVmaW5lZCk7CiAg
ICAgLy8gMzMuIFJldHVybklmQWJydXB0KGhyMTIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghaG91ci5pc051bGwoKSkgewpAQCAtNjA1LDcgKzYwNiw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcg
bWludXRlID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5taW51dGUsIHR3b0RpZ2l0TnVtZXJpYywgIm1pbnV0ZSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9y
IFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICghbWludXRlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChtaW51dGUgPT0gIjItZGlnaXQi
KQpAQCAtNjE1LDcgKzYxNiw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXpl
RGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgc2Vjb25kID0gaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZWNvbmQsIHR3b0RpZ2l0TnVtZXJpYywgInNl
Y29uZCBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghc2Vjb25kLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChzZWNvbmQgPT0gIjItZGlnaXQiKQpAQCAtNjI1LDcgKzYyNiw3IEBAIHZvaWQgSW50
bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgdGlt
ZVpvbmVOYW1lID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5h
bWVzLT50aW1lWm9uZU5hbWUsIHNob3J0TG9uZywgInRpbWVab25lTmFtZSBtdXN0IGJlIFwic2hv
cnRcIiBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAoIXRpbWVab25lTmFtZS5pc051bGwoKSkgewogICAgICAgICBpZiAodGltZVpvbmVO
YW1lID09ICJzaG9ydCIpCkBAIC02MzksNyArNjQwLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3Jt
YXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8vIDI2LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24o
b3B0aW9ucywgImZvcm1hdE1hdGNoZXIiLCAic3RyaW5nIiwgwqsiYmFzaWMiLCAiYmVzdCBmaXQi
wrssICJiZXN0IGZpdCIpLgogICAgIGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+Zm9ybWF0TWF0Y2hlciwgeyAiYmFzaWMiLCAiYmVzdCBmaXQiIH0sICJm
b3JtYXRNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwiYmFzaWNcIiBvciBcImJlc3QgZml0XCIiLCAi
YmVzdCBmaXQiKTsKICAgICAvLyAyNy4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWx3YXlzIHVzZSBJQ1UgZGF0ZSBmb3JtYXQg
Z2VuZXJhdG9yLCByYXRoZXIgdGhhbiBvdXIgb3duIHBhdHRlcm4gbGlzdCBhbmQgbWF0Y2hlci4K
QEAgLTgzNCwxNSArODM1LDE3IEBAIGNvbnN0IGNoYXIqIEludGxEYXRlVGltZUZvcm1hdDo6dGlt
ZVpvbmUKIAogSlNPYmplY3QqIEludGxEYXRlVGltZUZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4
ZWNTdGF0ZSYgZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMTIuMy41IEludGwuRGF0ZVRp
bWVGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5k
IGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZiBjb25zdHJ1Y3RlZCBieSBhbiBvYmplY3QgbGl0ZXJh
bCBhc3NpZ25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgdGhlIHZhbHVl
IG9mIHRoZSBjb3JyZXNwb25kaW5nIGludGVybmFsIHNsb3Qgb2YgdGhpcyBEYXRlVGltZUZvcm1h
dCBvYmplY3QgKHNlZSAxMi40KTogbG9jYWxlLCBjYWxlbmRhciwgbnVtYmVyaW5nU3lzdGVtLCB0
aW1lWm9uZSwgaG91cjEyLCB3ZWVrZGF5LCBlcmEsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1p
bnV0ZSwgc2Vjb25kLCBhbmQgdGltZVpvbmVOYW1lLiBQcm9wZXJ0aWVzIHdob3NlIGNvcnJlc3Bv
bmRpbmcgaW50ZXJuYWwgc2xvdHMgYXJlIG5vdCBwcmVzZW50IGFyZSBub3QgYXNzaWduZWQuCiAg
ICAgLy8gTm90ZTogSW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBFQ01BU2NyaXB0IDIwMTUgSW50ZXJu
YXRpb25hbGl6YXRpb24gQVBJLCB0aGUgdGltZVpvbmUgcHJvcGVydHkgd2lsbCBiZSB0aGUgbmFt
ZSBvZiB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgaWYgbm8gdGltZVpvbmUgcHJvcGVydHkgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zIG9iamVjdCBwcm92aWRlZCB0byB0aGUgSW50bC5EYXRlVGlt
ZUZvcm1hdCBjb25zdHJ1Y3Rvci4gVGhlIHByZXZpb3VzIHZlcnNpb24gbGVmdCB0aGUgdGltZVpv
bmUgcHJvcGVydHkgdW5kZWZpbmVkIGluIHRoaXMgY2FzZS4KICAgICBpZiAoIW1faW5pdGlhbGl6
ZWREYXRlVGltZUZvcm1hdCkgewogICAgICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhl
YywganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgfQogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMpOwogICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc05vbnRyaXZpYWxTdHJpbmco
JmV4ZWMsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5jYWxlbmRhciwganNOb250cml2aWFsU3RyaW5nKCZleGVjLCBtX2NhbGVuZGFyKSk7
CkBAIC04ODksNyArODkyLDcgQEAgSlNWYWx1ZSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmZvcm1hdChF
eGVjUwogICAgIC8vIDEyLjMuNCBGb3JtYXREYXRlVGltZSBhYnN0cmFjdCBvcGVyYXRpb24gKEVD
TUEtNDAyIDIuMCkKICAgICBpZiAoIW1faW5pdGlhbGl6ZWREYXRlVGltZUZvcm1hdCkgewogICAg
ICAgICBpbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZXhlYywganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIC8vIDEuIElmIHggaXMg
bm90IGEgZmluaXRlIE51bWJlciwgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTYgQEAgdm9pZCBJbnRsRGF0ZVRp
bWVGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMS4yIEludGwuRGF0ZVRpbWVGb3JtYXQgKFtsb2NhbGVz
IFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMg
dW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBl
bHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIuIExldCBkYXRlVGltZUZv
cm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRhdGVUaW1lRm9y
bWF0KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmRhdGVUaW1lRm9y
bWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9y
bWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVyZSk7
CisgICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9IEludGxEYXRlVGltZUZv
cm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkYXRlVGltZUZvcm1hdCk7
CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGRhdGVUaW1lRm9y
bWF0LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvcjo6CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKEV4
ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjIuMiBJbnRsLkRhdGVU
aW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00
MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJURhdGVUaW1lRm9y
bWF0JS5bW2F2YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEludGxEYXRlVGltCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVk
TG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxT
dHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9j
YWxlcyhhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERh
dGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZTo6ZmluaXNoCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxE
YXRlVGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZShFeGVjU3RhdGUqIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAvLyAxMi4zLjQgRGF0ZVRpbWUgRm9ybWF0IEZ1bmN0aW9ucyAoRUNNQS00
MDIgMi4wKQogICAgIC8vIDEuIExldCBkdGYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4g
QXNzZXJ0OiBUeXBlKGR0ZikgaXMgT2JqZWN0IGFuZCBkdGYgaGFzIGFuIFtbaW5pdGlhbGl6ZWRE
YXRlVGltZUZvcm1hdF1dIGludGVybmFsIHNsb3Qgd2hvc2UgdmFsdWUgaXMgdHJ1ZS4KQEAgLTEw
MSw3ICsxMDMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAg
ICAgICAgIC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9IGRh
dGUudG9OdW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4KLSAg
ICAgICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xNDAsNyArMTQyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3Vu
ZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQg
PSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0
T2JqZWN0LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0
Zi0+c2V0Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSW50bE51bWJlckZv
cm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVzdGVkTG9j
YWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAgIC8vIDQu
IFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgpAQCAtMTc3
LDcgKzE3Nyw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9w
dGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0
dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9w
dGlvbnMsICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLC
uywgImJlc3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAi
LCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIg
b3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQo
bWF0Y2hlcikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9w
dC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFs
KCJsb2NhbGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxNi4gTGV0IHMgYmUgR2V0
T3B0aW9uKG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAiZGVjaW1hbCIsICJwZXJjZW50
IiwgImN1cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmluZyBzdHlsZVN0cmluZyA9IGlu
dGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAic3R5bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IiB9LCAic3R5bGUg
bXVzdCBiZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBcImN1cnJlbmN5XCIi
LCAiZGVjaW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0
byBzLgogICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCkBAIC0yMjMsNyArMjIzLDcg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE5LiBM
ZXQgYyBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVuZGVmaW5l
ZCwgdW5kZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMjQuIExl
dCBjZCBiZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5RGlzcGxheSIsICJzdHJpbmciLCDC
qyJjb2RlIiwgInN5bWJvbCIsICJuYW1lIsK7LCAic3ltYm9sIikuCiAgICAgU3RyaW5nIGN1cnJl
bmN5RGlzcGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3lt
Ym9sIiwgIm5hbWUiIH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIs
IFwic3ltYm9sXCIsIG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIC8vIDI1LiBSZXR1cm5J
ZkFicnVwdChjZCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAyNi4gSWYg
cyBpcyAiY3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3VycmVuY3lEaXNwbGF5XV0gdG8g
Y2QuCiAgICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4
LiBSZXR1cm5JZkFicnVwdChtbmlkKS4KICAgICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21p
bmltdW1JbnRlZ2VyRGlnaXRzXV0gdG8gbW5pZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdl
ckRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmlt
dW1JbnRlZ2VyRGlnaXRzOwogCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9y
bWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDMyLiBSZXR1cm5JZkFicnVwdChtbmZkKS4K
ICAgICAvLyAzMy4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1GcmFjdGlvbkRpZ2l0c11dIHRv
IG1uZmQuCiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVt
RnJhY3Rpb25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMg
PSBtaW5pbXVtRnJhY3Rpb25EaWdpdHM7CiAKQEAgLTMwMCwyMCArMzAwLDIwIEBAIHZvaWQgSW50
bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzNi4gUmV0dXJuSWZBYnJ1
cHQobXhmZCkuCiAgICAgLy8gMzcuIFNldCBudW1iZXJGb3JtYXQuW1ttYXhpbXVtRnJhY3Rpb25E
aWdpdHNdXSB0byBteGZkLgogICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGlu
dGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAibWF4aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1h
eGltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAK
ICAgICAvLyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMiKS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0
aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2ln
bmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9w
dGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1T
aWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEu
IFJldHVybklmQWJydXB0KG14c2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyA0Mi4gSWYgbW5zZCBpcyBub3QgdW5kZWZpbmVkIG9yIG14c2QgaXMgbm90IHVuZGVmaW5l
ZCwgdGhlbgpAQCAtMzIxLDEyICszMjEsMTIgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgbW5zZCBiZSBHZXROdW1iZXJPcHRpb24o
b3B0aW9ucywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIsIDEsIDIxLCAxKS4KICAgICAgICAg
dW5zaWduZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSwgMSwgMjEsIDEpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtbnNk
KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBj
LiBMZXQgbXhzZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2Fu
dERpZ2l0cyIsIG1uc2QsIDIxLCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZp
Y2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhz
ZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8g
ZS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERpZ2l0c11dIHRvIG1uc2Qu
CiAgICAgICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25pZmljYW50
RGlnaXRzOwpAQCAtMzQwLDcgKzM0MCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlh
bGl6ZU51bWJlckYKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1c2VHcm91cGluZyA9
IHRydWU7CiAgICAgLy8gNDQuIFJldHVybklmQWJydXB0KGcpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1c2VHcm91cGluZ11dIHRv
IGcuCiAgICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwpAQCAtMzYyLDExICszNjIsMTQg
QEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogCiB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmNyZWF0ZU51bWJlckZvcm1hdChFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgQVNTRVJUKCFtX251bWJlckZvcm1hdCk7CiAKICAgICBpZiAoIW1faW5p
dGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChz
dGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAg
LTQ4MCw2ICs0ODMsOSBAQCBjb25zdCBjaGFyKiBJbnRsTnVtYmVyRm9ybWF0OjpjdXJyZW5jeURp
CiAKIEpTT2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRl
JiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1h
dC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUg
ZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmli
dXRlcyBhcmUgc2V0IGFzIGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVy
YWwgYXNzaWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAt
NDkxLDEwICs0OTcsOSBAQCBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRp
CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlh
bGl6ZU51bWJlckZvcm1hdChzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9j
YWxlLCBqc1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0
KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bWJlcmluZ1N5c3RlbSIpLCBqc1N0
cmluZygmc3RhdGUsIG1fbnVtYmVyaW5nU3lzdGVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDE0ICs4NiwxNiBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaXNoCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJG
b3JtYXQoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMS4yIElu
dGwuTnVtYmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAg
ICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUg
YWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4K
ICAgICAvLyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVj
dG9yKG5ld1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVy
bklmQWJydXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1Rh
cmdldCgpLCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxl
ZSgpKS0+bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0
KiBudW1iZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0
cnVjdHVyZSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJl
ckZvcm1hdDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQp
OwogCiAgICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0
LCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNyw2ICsxMzksOCBAQCBDYWxsVHlwZSBJbnRsTnVt
YmVyRm9ybWF0Q29uc3RydWN0b3I6OmdlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3Rh
dGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3Jt
YXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjAp
CiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2
YWlsYWJsZUxvY2FsZXNdXS4KQEAgLTE0NSw3ICsxNDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEludGxOdW1iZXJGCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFp
bGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNiArODIsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5j
Rm9ybWF0TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEx
LjMuNCBGb3JtYXQgTnVtYmVyIEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExl
dCBuZiBiZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUobmYpIGlzIE9i
amVjdCBhbmQgbmYgaGFzIGFuIFtbaW5pdGlhbGl6ZWROdW1iZXJGb3JtYXRdXSBpbnRlcm5hbCBz
bG90IHdob3NlIHZhbHVlICB0cnVlLgpAQCAtOTEsNyArOTMsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFs
dWUpLgogICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3Rh
dGUpOwogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDYuIFJldHVy
biBGb3JtYXROdW1iZXIobmYsIHgpLgpAQCAtMTI4LDcgKzEzMCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSW50bE51bWJlckYKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91
bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0
ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdl
dE9iamVjdCwgbmYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAg
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYt
PnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw2ICsxMjMsOSBAQCB2b2lkIGNvbnZlcnRJQ1VMb2NhbGVUb0JDUDQ3TGFuZ3VhZ2VU
YWcoCiAKIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBv
cHRpb25zLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJvb2wmIHVzZXNGYWxsYmFjaykKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5
cGUsIHZhbHVlcywgZmFsbGJhY2spCiAgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLiB2YWx1ZXMg
aXMgYWx3YXlzIHVuZGVmaW5lZC4KIApAQCAtMTMwLDE0ICsxMzMsMTQgQEAgYm9vbCBpbnRsQm9v
bGVhbk9wdGlvbihFeGVjU3RhdGUmIHN0YXRlLAogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9u
cy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBi
ZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0
YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5v
dCB1bmRlZmluZWQsIHRoZW4KQEAgLTE3MiwxNCArMTc1LDE0IEBAIFN0cmluZyBpbnRsU3RyaW5n
T3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9P
YmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChv
cHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHBy
b3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTE5Miw3ICsxOTUsNyBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVj
U3RhdGUmIHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAvLyBk
LiBJZiB2YWx1ZXMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjIwLDE0ICsyMjMsMTQgQEAg
dW5zaWduZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgIEpTT2JqZWN0KiBv
cHRzID0gb3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1
cHQob3B0cykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gMy4gTGV0
IHZhbHVlIGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMt
PmdldCgmc3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVl
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBp
cyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0yMzUsNyArMjM4LDcgQEAgdW5zaWduZWQgaW50bE51
bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9O
dW1iZXIodmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyAxLiBJZiB2YWx1
ZSBpcyBOYU4gb3IgbGVzcyB0aGFuIG1pbmltdW0gb3IgZ3JlYXRlciB0aGFuIG1heGltdW0sIHRo
cm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIGlmICghKGRvdWJsZVZhbHVlID49
IG1pbmltdW0gJiYgZG91YmxlVmFsdWUgPD0gbWF4aW11bSkpIHsKQEAgLTU1NiwxNiArNTU5LDE2
IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9CiAKICAg
ICAvLyA1LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAi
bGVuZ3RoIikpLgogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5n
ZXQoJnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQ
cm9wZXJ0eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUg
YmVlbiBhZGRlZCB0byB0aGUgbGlzdC4KQEAgLTU4MSw3ICs1ODQsNyBAQCBWZWN0b3I8U3RyaW5n
PiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2Nh
bGVzT2JqZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVy
bklmQWJydXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1
ZSwgdGhlbgpAQCAtNTkwLDcgKzU5Myw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QoRXgKICAgICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+
Z2V0KCZzdGF0ZSwgayk7CiAKICAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFs
dWUpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkg
aXMgbm90IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KQEAg
LTYwMyw3ICs2MDYsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4
CiAgICAgICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAK
ICAgICAgICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAg
ICAgICAgICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKHRhZykg
aXMgZmFsc2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkBAIC05MzMsNiArOTM2LDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogewogICAgIC8vIDku
Mi44IFN1cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICAvLyAxLiBJ
ZiBvcHRpb25zIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTk0MCw3ICs5NDQsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBt
YXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDC
qyAibG9va3VwIiwgImJlc3QgZml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIg
PSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2Nh
bGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3Qg
YmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyAyLiBFbHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgpAQCAtOTYwLDcgKzk2NCw3IEBA
IEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9y
dGVkTG9jYWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2Fs
ZXMsIHJlcXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlG
cm9tTGlzdChzdXBwb3J0ZWRMb2NhbGVzKS4KQEAgLTk2OSw3ICs5NzMsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vi
c2V0LltbT3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZz
dGF0ZSwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+
Z2V0T3duUHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKQEAgLTk4Niw3ICs5OTAsNyBAQCBKU1Zh
bHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExv
Y2FsZXMtPmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tp
XSwgZGVzYywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFi
cnVwdCBjb21wbGV0aW9uLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsMTUgKzQwLDE3IEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0
aFdvcmthcm8KICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxp
dHkgd2l0aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBpZiAoIWpzRHluYW1pY0Nhc3Q8SW50bEluc3RhbmNlKj4odGhpc1ZhbHVlKSkgewogICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5wcm90b3R5cGUpOwogICAgICAgICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5j
ZSgmc3RhdGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIEludGxJbnN0YW5jZSogaW5zdGFuY2UgPSBmYWN0b3J5KHZtKTsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3Rh
bmNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQ2FsbERh
dGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUgaXRlcmF0
b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAg
ICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5l
eHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXJlc3Vs
dC5pc09iamVjdCgpKQpAQCAtODAsMTEgKzgwLDE0IEBAIGJvb2wgaXRlcmF0b3JDb21wbGV0ZShF
eGVjU3RhdGUqIGV4ZWMsIEoKIAogSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGl0ZXJhdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMs
IHJlc3VsdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGlmIChkb25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKQEAgLTk3LDEyICsx
MDAsMTMgQEAgdm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0
b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkgewpAQCAtMTI5LDcgKzEzMyw3IEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKQEAgLTE2Nyw3ICsx
NzEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIAogICAgIEpTVmFsdWUgaXRl
cmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChzdGF0ZSwgc3RhdGUtPnByb3BlcnR5TmFtZXMo
KS5pdGVyYXRvclN5bWJvbCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIAogICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTE3OSw3
ICsxODMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yRm9ySXRlcmFibGUoRXhlY1N0YXRlKiBzCiAKICAg
ICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CiAgICAgSlNWYWx1ZSBpdGVyYXRv
ciA9IGNhbGwoc3RhdGUsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlw
ZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFy
Z3VtZW50cyk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAg
aWYgKCFpdGVyYXRvci5pc09iamVjdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
ICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQ3LDIwICs0OCwyMiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2FsbEJh
Y2tUeXBlPgogdm9pZCBmb3JFYWNoSW5JdGVyYWJsZShFeGVjU3RhdGUqIHN0YXRlLCBKU1ZhbHVl
IGl0ZXJhYmxlLCBjb25zdCBDYWxsQmFja1R5cGUmIGNhbGxiYWNrKQogewogICAgIGF1dG8mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBpdGVyYXRvciA9IGl0ZXJhdG9yRm9ySXRlcmFibGUoc3RhdGUsIGl0
ZXJhYmxlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChzdGF0ZSwgaXRlcmF0b3IpOwotICAgICAg
ICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgdm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChuZXh0
LmlzRmFsc2UoKSB8fCBVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKHN0YXRl
LCBuZXh0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGNh
bGxiYWNrKHZtLCBzdGF0ZSwgbmV4dFZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUsIGl0ZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTEsNyArNTkxLDcgQEAgSlNWYWx1ZSBKU0Fy
cmF5Ojpwb3AoRXhlY1N0YXRlKiBleGVjKQogICAgIHVuc2lnbmVkIGluZGV4ID0gZ2V0QXJyYXlM
ZW5ndGgoKSAtIDE7CiAgICAgLy8gTGV0IGVsZW1lbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgaW5keC4KICAg
ICBKU1ZhbHVlIGVsZW1lbnQgPSBnZXQoZXhlYywgaW5kZXgpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAvLyBDYWxsIHRoZSBbW0RlbGV0ZV1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnRzIGluZHggYW5kIHRydWUuCiAgICAgaWYgKCFk
ZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgpKSB7CkBAIC02NDMsNyArNjQz
LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAK
ICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0
aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUp
OwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
ICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFy
cmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY2Myw3
ICs2NjMsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAg
ICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAg
ICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwg
dHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFs
aWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
Njk1LDcgKzY5NSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKICAgICAgICAgYm9v
bCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgaWYgKGF0dGVtcHRUb0ludGVyY2VwdFB1dEJ5
SW5kZXhPbkhvbGUoZXhlYywgb2xkTGVuZ3RoLCB2YWx1ZSwgdHJ1ZSwgcHV0UmVzdWx0KSkgewot
ICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiBvbGRMZW5ndGggPCAweEZG
RkZGRkZGdSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3Ro
IDwgMHhGRkZGRkZGRnUpCiAgICAgICAgICAgICAgICAgc2V0TGVuZ3RoKGV4ZWMsIG9sZExlbmd0
aCArIDEsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MzEsNyAr
NzMxLDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAg
ICBpZiAoc3RvcmFnZS0+bGVuZ3RoKCkgPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAgICAg
IG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBzdG9yYWdlLT5sZW5ndGgo
KSwgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgLy8gUGVyIEVTNS4xIDE1LjQuNC43IHN0ZXAg
NiAmIDE1LjQuNS4xIHN0ZXAgMy5kLgotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTExOTAsNiArMTE5MCw5IEBAIHZvaWQgSlNBcnJheTo6ZmlsbEFyZ0xp
c3QoRXhlY1N0YXRlKiBleGUKIAogdm9pZCBKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0
YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB1bnNpZ25lZCBpID0g
b2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yOwogICAgIHVuc2lnbmVk
IHZlY3RvckVuZDsKQEAgLTEyNTUsNyArMTI1OCw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKEV4ZWNTdGF0ZSoKICAgICAKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gZ2V0KGV4ZWMs
IGkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB1bnNpZ25lZCBsZW5ndGg7CiAgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSkgewogICAgICAgICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBBbHRob3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHNheSBzbywgaXQgaXMg
aW4gZmFjdCBjb3JyZWN0IHRvIHNheQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIFN0cnVjdHVyZSog
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgY29uc3RydWN0b3ItPmdsb2JhbE9iamVj
dCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTQXJyYXlCdWZmZXIqIHJlc3VsdCA9
IEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSh2bSwgYXJyYXlCdWZmZXJTdHJ1Y3R1cmUsIFdURk1vdmUo
YnVmZmVyKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5QnVmZmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJhCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNsaWNlIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1
bWVudC4iKSk7CiAgICAgCiAgICAgaW50MzJfdCBiZWdpbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgaW50MzJfdCBlbmQ7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA+PSAyKSB7CiAgICAgICAgIGVuZCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGVuZCA9IHRoaXNPYmplY3QtPmltcGwoKS0+Ynl0ZUxlbmd0aCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwyNCArNzAsMjYgQEAgaW5saW5lIGJvb2wgSlNBcnJheTo6Y2Fu
RmFzdENvcHkoVk0mIHZtLAogCiBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldExlbmd0aChFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNB
cnJheShvYmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgo
KTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iai0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gVUlOVF9NQVg7CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvVUlu
dDMyKGV4ZWMpOwogfQogCiBBTFdBWVNfSU5MSU5FIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGlzSlNBcnJheShv
YmopKQogICAgICAgICByZXR1cm4ganNDYXN0PEpTQXJyYXkqPihvYmopLT5sZW5ndGgoKTsKIAot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iai0+
Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gUE5hTjsKICAgICByZXR1cm4gbGVuZ3RoVmFsdWUudG9MZW5ndGgoZXhlYyk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw4ICsxMjYs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGhhc0luc3RhbmNlCiAKIGlubGluZSBT
dHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3R1cmUoVk0mIHZtLCBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0YXJnZXRGdW5jdGlv
bikKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSB0YXJnZXRGdW5jdGlvbi0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTRnVuY3Rpb24q
IHRhcmdldEpTRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih0YXJnZXRGdW5j
dGlvbik7CiAKQEAgLTE1OCw2ICsxNTksNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0CiAKIEpTQm91bmRGdW5jdGlvbiogSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUo
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0YXJnZXRGdW5jdGlvbiwgSlNWYWx1ZSBib3VuZFRoaXMsIEpTQXJyYXkqIGJvdW5k
QXJncywgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lKQogeworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERh
dGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gSlNDOjpnZXRDb25zdHJ1Y3RE
YXRhKHRhcmdldEZ1bmN0aW9uLCBjb25zdHJ1Y3REYXRhKTsKICAgICBib29sIGNhbkNvbnN0cnVj
dCA9IGNvbnN0cnVjdFR5cGUgIT0gQ29uc3RydWN0VHlwZTo6Tm9uZTsKQEAgLTE3MCw3ICsxNzIs
NyBAQCBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlCiAgICAgICAgIGNh
bkNvbnN0cnVjdCA/IChzbG93Q2FzZSA/IGJvdW5kRnVuY3Rpb25Db25zdHJ1Y3QgOiBib3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNvbnN0cnVjdCkgOiBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
ciwKICAgICAgICAgbmFtZSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRCb3VuZEZ1
bmN0aW9uU3RydWN0dXJlKHZtLCBleGVjLCBnbG9iYWxPYmplY3QsIHRhcmdldEZ1bmN0aW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQm91bmRGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0JvdW5kRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0JvdW5kRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJl
LCB0YXJnZXRGdW5jdGlvbiwgYm91bmRUaGlzLCBib3VuZEFyZ3MpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZl
KEV4ZWNTdGF0ZSogCiAgICAgICAgIH0KIAogICAgICAgICBwcm90b3R5cGUgPSBvYmotPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjE2LDcgKzIxNiw3IEBAIGJvb2wgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4
ZWMKICAgICAKICAgICBKU09iamVjdCogcHJvdG90eXBlID0gc3ludGhlc2l6ZVByb3RvdHlwZShl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNl
OwpAQCAtMzc4LDExICszNzgsMTEgQEAgSlNTdHJpbmcqIEpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nh
c2UoRXhlYwogCiAgICAgQVNTRVJUKGlzQ2VsbCgpKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gYXND
ZWxsKCktPnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlclN0cmluZyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc09iamVjdCgpKTsKICAgICBK
U1N0cmluZyogcmVzdWx0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlcnJvclZhbHVlKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQyLDcgKzY0Miw3IEBAIGlubGluZSBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlIHRvUHJlZmVycmUKICAgICB9CiAKICAgICBTdHJpbmdJbXBsKiBoaW50
U3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUpLT52YWx1ZShleGVjKS5pbXBsKCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOb1ByZWZlcmVuY2U7CiAKICAgICBpZiAoV1RGOjpl
cXVhbChoaW50U3RyaW5nLCAiZGVmYXVsdCIpKQpAQCAtNzg0LDggKzc4NCw5IEBAIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxi
YWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9v
ZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNW
YWx1ZTo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90LCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbiBjYWxs
YmFjaykgY29uc3QKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVj
LT52bSgpKTsKICAgICBib29sIGZvdW5kID0gZ2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4geyB9Owog
ICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC04OTcsNiArODk4LDcgQEAg
aW5saW5lIGJvb2wgSlNWYWx1ZTo6ZXF1YWwoRXhlY1N0YXRlKiBleAogQUxXQVlTX0lOTElORSBi
b29sIEpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGRvIHsKICAgICAgICAgaWYgKHYx
LmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiB2MS5hc051
bWJlcigpID09IHYyLmFzTnVtYmVyKCk7CkBAIC05MjQsNyArOTI2LDcgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogICAgICAgICAgICAgaWYgKHYyLmlzT2JqZWN0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogICAgICAgICAgICAgSlNWYWx1
ZSBwMSA9IHYxLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MSA9IHAxOwogICAg
ICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkBAIC05MzQsNyArOTM2
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTVmFsdWU6OmVxdWFsU2xvd0NhcwogCiAgICAgICAg
IGlmICh2Mi5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHAyID0gdjIudG9Qcmlt
aXRpdmUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHYyID0gcDI7CiAgICAgICAgICAgICBpZiAodjEu
aXNJbnQzMigpICYmIHYyLmlzSW50MzIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0YVZpZXdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDE0ICsxMzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUg
Z2V0RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk5lZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50ICh0
aGUgYnl0ZU9mZnNldCkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wg
bGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVj
LT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0
YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IHR3byBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQg
YW5kIHZhbHVlKSIpKTsKICAgICAKICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0ID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjb25zdCB1bnNpZ25l
ZCBkYXRhU2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKTsKQEAgLTE5MSwxNCAr
MTkxLDE0IEBAIEVuY29kZWRKU1ZhbHVlIHNldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgIH0g
dTsKIAogICAgIHUudmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgYm9vbCBsaXR0bGVFbmRpYW4g
PSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbGVtZW50U2l6ZSA9IHNpemVvZih0eXBlbmFtZSBBZGFw
dG9yOjpUeXBlKTsKICAgICBpZiAoZWxlbWVudFNpemUgPiAxICYmIGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSA+PSAzKSB7CiAgICAgICAgIGxpdHRsZUVuZGlhbiA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLnRvQm9vbGVhbihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5MCw2ICs1OTAsOSBAQCBTdHJpbmcgZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKFZNJiB2bSwgCiAKIHZvaWQgSlNGdW5jdGlvbjo6c2V0RnVuY3Rpb25OYW1l
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8v
IFRoZSAibmFtZSIgcHJvcGVydHkgbWF5IGhhdmUgYmVlbiBhbHJlYWR5IGJlZW4gZGVmaW5lZCBh
cyBwYXJ0IG9mIGEgcHJvcGVydHkgbGlzdCBpbiBhbgogICAgIC8vIG9iamVjdCBsaXRlcmFsIChh
bmQgdGhlcmVmb3JlIHJlaWZpZWQpLgogICAgIGlmIChoYXNSZWlmaWVkTmFtZSgpKQpAQCAtNjA1
LDEyICs2MDgsMTEgQEAgdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygm
dWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4
ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5
TmFtZShleGVjLCBuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIHR5cGVuYW1lIEFk
YXB0b3I6OlR5cGUgdmFsdWUgPSB0b05hdGl2ZUZyb21WYWx1ZTxBZGFwdG9yPihleGVjLCBqc1Zh
bHVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIGlmIChpc05ldXRlcmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODksMTQgKzg5LDE0IEBAIGlubGluZSBKU09iamVj
dCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBzdG9y
YWdlOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9y
U3RlcChleGVjLCBpdGVyYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dEl0ZW0gPSBpdGVyYXRvclZhbHVlKGV4ZWMs
IG5leHQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBzdG9yYWdlLmFwcGVuZChuZXh0SXRlbSk7CkBAIC0xMDQsMTMgKzEwNCwxMyBA
QCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIHN0b3JhZ2Uuc2l6ZSgpKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RvcmFnZS5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIXJlc3VsdC0+c2V0
SW5kZXgoZXhlYywgaSwgc3RvcmFnZS5hdChpKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIs
NyArMTYyLDcgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogICAg
ICAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoLCBsZW5ndGhTbG90KTsKIAogICAgICAgICAgICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmMg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgICAgICAgICAvLyBXZSB3b3VsZCBsaWtlIG5vdCB1c2UgdGhlIGl0ZXJhdG9yIGFz
IGl0IGlzIHBhaW5mdWxseSBzbG93LiBGb3J0dW5hdGVseSwgdW5sZXNzCkBAIC0xODMsMjEgKzE4
MywyMSBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAKICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmd1bWVudHM7CiAgICAgICAgICAgICAgICAgICAgIEpT
VmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuYywgY2FsbFR5cGUsIGNhbGxE
YXRhLCBvYmplY3QsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXdG
cm9tSXRlcmF0b3I8Vmlld0NsYXNzPihleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdG9yKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoU2xvdC5pc1Vuc2V0KCkgPyAw
IDogbGVuZ3RoU2xvdC5nZXRWYWx1ZShleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIAogICAgICAgICBWaWV3Q2xh
c3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtMjM1LDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
R2UKICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbihl
eGVjLT5jYWxsZWUoKSk7CiAgICAgU3RydWN0dXJlKiBwYXJlbnRTdHJ1Y3R1cmUgPSBmdW5jdGlv
bi0+Z2xvYmFsT2JqZWN0KCktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoVmlld0NsYXNzOjpUeXBlZEFy
cmF5U3RvcmFnZVR5cGUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIHBh
cmVudFN0cnVjdHVyZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHNpemVfdCBhcmdDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291
bnQoKTsKQEAgLTI1MiwxMiArMjUyLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0R2UKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbGVuZ3RoID0gTnVsbG9wdDsKICAg
ICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4oZmlyc3RWYWx1ZSkgJiYgYXJnQ291
bnQgPiAxKSB7CiAgICAgICAgIG9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
VUludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChhcmdDb3VudCA+IDIp
IHsKICAgICAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvVUlu
dDMyKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQCBpbmxpbmUgSlNBcnJheUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1
Y3RvciA9IGV4ZW1wbGFyLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoY29u
c3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTYyLDE0ICs2MiwxNCBAQCBpbmxpbmUgSlNBcnJh
eUJ1ZmZlclZpZXcqIHNwZWNpZXNDb25zdHJ1CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzcGVjaWVz
ID0gY29uc3RydWN0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zcGVjaWVzU3lt
Ym9sKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoc3Bl
Y2llcy5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdENvbnN0cnVj
dG9yKCk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBh
cmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPihyZXN1bHQpKSB7CkBAIC0xNDcsNyArMTQ3
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8
dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmlj
VHlwZWRBcnJheVZpZXdQcm90b0Z1bmNDb3B5V2l0aGluKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuNQpAQCAtMTU3LDEzICsxNTYsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgbG9uZyBs
ZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKICAgICBsb25nIHRvID0gYXJndW1lbnRDbGFt
cGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAwLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZyb20gPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIGxvbmcgZmluYWwgPSBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKGV4ZWMsIDIsIGxlbmd0aCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAoZmluYWwgPCBmcm9tKQpAQCAtMTgz
LDcgKzE4Miw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRl
bXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5jbHVkZXMoVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpz
Q2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7CkBAIC0xOTgsNyArMTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEpTVmFsdWUgdmFs
dWVUb0ZpbmQgPSBleGVjLT5hcmd1bWVudCgwKTsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJn
dW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYg
KHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTIwOSw3ICsyMDcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBB
U1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKTsKIAogICAgIGlm
IChzdGQ6OmlzbmFuKHN0YXRpY19jYXN0PGRvdWJsZT4oKnRhcmdldE9wdGlvbikpKSB7CkBAIC0y
MzAsNyArMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
dGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNJbmRleE9mKFZNJiB2bSwgRXhlY1N0YXRl
KiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMTMKQEAgLTI0NSw3ICsy
NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAKICAgICBK
U1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIGxlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTI1NSw3ICsyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXV0byB0YXJnZXRPcHRpb24gPSBWaWV3Q2xh
c3M6OnRvQWRhcHRvck5hdGl2ZUZyb21WYWx1ZVdpdGhvdXRDb2VyY2lvbih2YWx1ZVRvRmluZCk7
CiAgICAgaWYgKCF0YXJnZXRPcHRpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoLTEpKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdGhpc09iamVjdC0+aXNO
ZXV0ZXJlZCgpKTsKIAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewpAQCAt
MjY5LDcgKzI2Niw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
IHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSm9pbihWTSYgdm0sIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgVmlld0NsYXNzKiB0aGlzT2JqZWN0ID0ganND
YXN0PFZpZXdDbGFzcyo+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKQEAgLTI4MiwxMSArMjc4LDExIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICAgICAgSlNTdHJpbmdKb2lu
ZXIgam9pbmVyKCpleGVjLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICAg
am9pbmVyLmFwcGVuZCgqZXhlYywgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CkBAIC0yOTksNyArMjk1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIH0KIAogICAgIEpTU3RyaW5n
KiBzZXBhcmF0b3JTdHJpbmcgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0zMTAsNyArMzA2LDYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogdGVtcGxhdGU8dHlwZW5hbWUg
Vmlld0NsYXNzPgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8v
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjE2CkBAIC0zMzgsNyArMzMzLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICAgICAgaW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbURvdWJsZSk7CiAgICAgfQogCi0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0
LT5pc05ldXRlcmVkKCkpCkBAIC0zNDksNyArMzQ0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBnZW5lcmljVHlwZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CiAKICAgICB0eXBlbmFtZSBWaWV3Q2xhc3M6OkVsZW1lbnRUeXBlKiBhcnJheSA9
IHRoaXNPYmplY3QtPnR5cGVkVmVjdG9yKCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRo
aXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPj0gMDsgLS1pbmRl
eCkgewpAQCAtNDMyLDcgKzQyNyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jU2xpY2UoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4yNgpAQCAt
NDQ1LDEwICs0MzksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlw
ZQogICAgIHVuc2lnbmVkIHRoaXNMZW5ndGggPSB0aGlzT2JqZWN0LT5sZW5ndGgoKTsKIAogICAg
IHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVj
LCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChl
eGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVu
Y29kZWRKU1ZhbHVlKCk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAt
NDY3LDcgKzQ2MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT50
eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAg
ICAgICAgcmV0dXJuIFZpZXdDbGFzczo6Y3JlYXRlVW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7CiAgICAgfSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEFTU0VSVCghcmVzdWx0LT5pc05ldXRlcmVkKCkp
OwpAQCAtNTE4LDcgKzUxMiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZShW
TSZ2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMu
MjMKQEAgLTUzNyw5ICs1MzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50KDApLmlzTnVtYmVyKCkpOwogICAgIEFT
U0VSVChleGVjLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpIHx8IGV4ZWMtPmFyZ3VtZW50KDEp
LmlzTnVtYmVyKCkpOwogICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhG
cm9tU3RhcnRPckVuZChleGVjLCAwLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB1bnNpZ25lZCBl
bmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGV4ZWMsIDEsIHRoaXNMZW5n
dGgsIHRoaXNMZW5ndGgpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSk7CiAKQEAgLTU3Miw3ICs1NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobGVuZ3RoKSk7
CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0KGV4ZWMsIHNwZWNpZXMsIGFyZ3Ms
ICJzcGVjaWVzIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAy
MDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNy0yMDA5LCAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTgxNSwxMiArODE1LDE0IEBAIGlubGluZSBKU0dsb2Jh
bE9iamVjdCogYXNHbG9iYWxPYmplY3QoSlMKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVt
cHR5QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoID0g
MCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBpZiAoaW5pdGlhbExlbmd0aCA+PSBNSU5f
QVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKQogICAgICAgICBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlv
bihleGVjLCBBcnJheVdpdGhBcnJheVN0b3JhZ2UsIG5ld1RhcmdldCk7CiAgICAgZWxzZQogICAg
ICAgICBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1
cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgSlNBcnJheTo6Y3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCkpOwpAQCAtODMzLDggKzgzNSwxMCBAQCBp
bmxpbmUgSlNBcnJheSogY29uc3RydWN0RW1wdHlBcnJheShFeGVjCiAgCiBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxl
KiBwcm9maWxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiB2
YWx1ZXMsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0
dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzKSk7CiB9CkBAIC04NDYsOCArODUwLDEwIEBA
IGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJy
YXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSog
dmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQog
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJv
ZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9y
KHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgp
KTsKIH0KQEAgLTg1OSw4ICs4NjUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5
KEV4ZWNTdGF0ZQogCiBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4
ZWQoRXhlY1N0YXRlKiBleGVjLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBwcm9maWxlLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIHVuc2lnbmVk
IGxlbmd0aCwgSlNWYWx1ZSBuZXdUYXJnZXQgPSBKU1ZhbHVlKCkpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1
Y3R1cmVGb3JQcm9maWxlRHVyaW5nQWxsb2NhdGlvbihleGVjLCBwcm9maWxlLCBuZXdUYXJnZXQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlTGFzdEFsbG9jYXRpb25Gb3IocHJvZmlsZSwgY29uc3Ry
dWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgc3RydWN0dXJlLCB2YWx1ZXMsIGxlbmd0aCkp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RG
dW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NjAsNyArNjYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnbG9iYWxGdW5jRQogICAgIH0KIAogICAgIFN0cmluZyBzID0geC50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAocy5pczhCaXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNKb2IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2
ICs2NCw5IEBAIFJlZjxNaWNyb3Rhc2s+IGNyZWF0ZUpTSm9iKFZNJiB2bSwgSlNWYWwKIAogdm9p
ZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIENhbGxEYXRhIGhhbmRsZXJDYWxsRGF0YTsKICAgICBDYWxsVHlwZSBoYW5kbGVyQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxEYXRhKTsKICAgICBBU1NF
UlQoaGFuZGxlckNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKQEAgLTcyLDcgKzc1LDcgQEAg
dm9pZCBKU0pvYk1pY3JvdGFzazo6cnVuKEV4ZWNTdGF0ZSogZXhlYwogICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwLCBsZW5ndGggPSBtX2FyZ3VtZW50cy0+bGVuZ3RoKCk7IGluZGV4IDwgbGVu
Z3RoOyArK2luZGV4KQogICAgICAgICBoYW5kbGVyQXJndW1lbnRzLmFwcGVuZChtX2FyZ3VtZW50
cy0+SlNBcnJheTo6Z2V0KGV4ZWMsIGluZGV4KSk7CiAgICAgcHJvZmlsZWRDYWxsKGV4ZWMsIFBy
b2ZpbGluZ1JlYXNvbjo6TWljcm90YXNrLCBtX2pvYi5nZXQoKSwgaGFuZGxlckNhbGxUeXBlLCBo
YW5kbGVyQ2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGhhbmRsZXJBcmd1bWVudHMpOwotICAgIGV4
ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTcgKzc4LDE5IEBAIHZvaWQgSlNNb2R1bGVFbnZpcm9u
bWVudDo6dmlzaXRDaGlsZHJlbigKIAogYm9vbCBKU01vZHVsZUVudmlyb25tZW50OjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
TW9kdWxlRW52aXJvbm1lbnQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVu
dCo+KGNlbGwpOwogICAgIEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9uIHJlc29sdXRpb24gPSB0
aGlzT2JqZWN0LT5tb2R1bGVSZWNvcmQoKS0+cmVzb2x2ZUltcG9ydChleGVjLCBJZGVudGlmaWVy
Ojpmcm9tVWlkKGV4ZWMsIHByb3BlcnR5TmFtZS51aWQoKSkpOwogICAgIGlmIChyZXNvbHV0aW9u
LnR5cGUgPT0gSlNNb2R1bGVSZWNvcmQ6OlJlc29sdXRpb246OlR5cGU6OlJlc29sdmVkKSB7CiAg
ICAgICAgIC8vIFdoZW4gcmVzb2x2ZUltcG9ydCByZXNvbHZlcyB0aGUgcmVzb2x1dGlvbiwgdGhl
IGltcG9ydGVkIG1vZHVsZSBlbnZpcm9ubWVudCBtdXN0IGhhdmUgdGhlIGJpbmRpbmcuCiAgICAg
ICAgIEpTTW9kdWxlRW52aXJvbm1lbnQqIGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQgPSByZXNv
bHV0aW9uLm1vZHVsZVJlY29yZC0+bW9kdWxlRW52aXJvbm1lbnQoKTsKICAgICAgICAgUHJvcGVy
dHlTbG90IHJlZGlyZWN0U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJv
cGVydHlTbG90KGltcG9ydGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9j
YWxOYW1lLCByZWRpcmVjdFNsb3QpOworICAgICAgICBib29sIHJlc3VsdCA9IGltcG9ydGVkTW9k
dWxlRW52aXJvbm1lbnQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlTbG90KGltcG9y
dGVkTW9kdWxlRW52aXJvbm1lbnQsIGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lLCByZWRpcmVj
dFNsb3QpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAg
QVNTRVJUKHJlZGlyZWN0U2xvdC5pc1ZhbHVlKCkpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
cmVkaXJlY3RTbG90LmdldFZhbHVlKGV4ZWMsIHJlc29sdXRpb24ubG9jYWxOYW1lKTsKLSAgICAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgcmVkaXJlY3RTbG90LmF0dHJpYnV0ZXMoKSwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVs
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwx
MyArMTQ5LDE1IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBKU01vZHVsZUxvYWRlcjo6ZmV0Y2gKICAg
ICAgICAgZGF0YUxvZygiTG9hZGVyIFtmZXRjaF0gIiwgcHJpbnRhYmxlTW9kdWxlS2V5KGV4ZWMs
IGtleSksICJcbiIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGlmIChnbG9i
YWxPYmplY3QtPmdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKCktPm1vZHVsZUxvYWRlckZldGNoKQog
ICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgpLT5t
b2R1bGVMb2FkZXJGZXRjaChnbG9iYWxPYmplY3QsIGV4ZWMsIHRoaXMsIGtleSwgaW5pdGlhdG9y
KTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIFN0cmluZyBt
b2R1bGVLZXkgPSBrZXkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwog
ICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYg
KzUyLDcgQEAgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OkpTTW9kdWxlTmFtZXNwYQogdm9pZCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3Jk
LCBjb25zdCBJZGVudGlmaWVyU2V0JiBleHBvcnRzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAKQEAg
LTgxLDcgKzgyLDcgQEAgdm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZmluaXNoQ3JlYQog
ICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl
Yy1tb2R1bGUtbmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLWlzZXh0ZW5zaWJsZQogICAgIC8vIGh0
dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1tb2R1bGUt
bmFtZXNwYWNlLWV4b3RpYy1vYmplY3RzLXByZXZlbnRleHRlbnNpb25zCiAgICAgbWV0aG9kVGFi
bGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzLCBleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogfQogCiB2b2lkIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKQEAgLTEzNiw3ICsxMzcsNyBAQCBib29sIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpnZXRPd25Qcm9wCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKIAogICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdHJhbXBvbGluZVNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBp
cyBmaWxsZWQgd2l0aCBURFogdmFsdWUsIHRocm93IGEgcmVmZXJlbmNlIGVycm9yLgogICAgICAg
ICBpZiAoIXZhbHVlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
OSw3ICs3NzksNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0CiAg
ICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbXBvcnRlZE1vZHVsZSA9IGhvc3RSZXNvbHZlSW1wb3J0
ZWRNb2R1bGUoZXhlYywgaW1wb3J0RW50cnkubW9kdWxlUmVxdWVzdCk7CiAgICAgICAgIGlmIChp
bXBvcnRFbnRyeS5pc05hbWVzcGFjZSh2bSkpIHsKICAgICAgICAgICAgIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0KiBuYW1lc3BhY2VPYmplY3QgPSBpbXBvcnRlZE1vZHVsZS0+Z2V0TW9kdWxlTmFt
ZXNwYWNlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBib29sIHB1dFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAg
ICAgc3ltYm9sVGFibGVQdXRUb3VjaFdhdGNocG9pbnRTZXQobW9kdWxlRW52aXJvbm1lbnQsIGV4
ZWMsIGltcG9ydEVudHJ5LmxvY2FsTmFtZSwgbmFtZXNwYWNlT2JqZWN0LCAvKiBzaG91bGRUaHJv
d1JlYWRPbmx5RXJyb3IgKi8gZmFsc2UsIC8qIGlnbm9yZVJlYWRPbmx5RXJyb3JzICovIHRydWUs
IHB1dFJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCwxNiArMjIwLDE4IEBA
IFN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcihFeGVjU3RhdGUqIGV4ZWMKICAgICAsIG1fcmVwbGFj
ZXJDYWxsVHlwZShDYWxsVHlwZTo6Tm9uZSkKICAgICAsIG1fZ2FwKGdhcChleGVjLCBzcGFjZS5n
ZXQoKSkpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCFtX3JlcGxhY2VyLmlzT2JqZWN0KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3JlcGxhY2VyLmFzT2JqZWN0KCktPmluaGVyaXRz
KEpTQXJyYXk6OmluZm8oKSkpIHsKICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVl
OwogICAgICAgICBIYW5kbGU8SlNPYmplY3Q+IGFycmF5ID0gbV9yZXBsYWNlci5hc09iamVjdCgp
OwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUlu
dDMyKGV4ZWMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgbmFtZSA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
ICAgICBpZiAobmFtZS5pc09iamVjdCgpKSB7CkBAIC0yNDgsMzYgKzI1MCwzOSBAQCBTdHJpbmdp
Zmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAKIExvY2FsPFVua25vd24+IFN0cmlu
Z2lmaWVyOjpzdHJpbmdpZnkoSGFuZGxlPFVua25vd24+IHZhbHVlKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KG1fZXhlYyk7Ci0g
ICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBMb2NhbDxVbmtu
b3duPihtX2V4ZWMtPnZtKCksIGpzTnVsbCgpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzTnVsbCgpKTsK
IAotICAgIFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCBlbXB0eVByb3BlcnR5TmFtZShtX2V4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKLSAgICBvYmplY3QtPnB1
dERpcmVjdChtX2V4ZWMtPnZtKCksIG1fZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5lbXB0eUlk
ZW50aWZpZXIsIHZhbHVlLmdldCgpKTsKKyAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwg
ZW1wdHlQcm9wZXJ0eU5hbWUodm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyKTsKKyAg
ICBvYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVy
LCB2YWx1ZS5nZXQoKSk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICBpZiAoYXBw
ZW5kU3RyaW5naWZpZWRWYWx1ZShyZXN1bHQsIHZhbHVlLmdldCgpLCBvYmplY3QsIGVtcHR5UHJv
cGVydHlOYW1lKSAhPSBTdHJpbmdpZnlTdWNjZWVkZWQpCi0gICAgICAgIHJldHVybiBMb2NhbDxV
bmtub3duPihtX2V4ZWMtPnZtKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgp
LCBqc051bGwoKSk7CisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNVbmRlZmlu
ZWQoKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICByZXR1cm4gTG9jYWw8VW5r
bm93bj4obV9leGVjLT52bSgpLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50b1N0cmluZygpKSk7
CisgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc1N0cmluZyhtX2V4ZWMsIHJlc3VsdC50
b1N0cmluZygpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U09OKEpTVmFsdWUgdmFsdWUsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJv
cGVydHlOYW1lKQogewotICAgIEFTU0VSVCghbV9leGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXQpOwogICAgIGlmICghb2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QobV9leGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b0pTT04sIHNsb3QpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKICAg
ICBKU1ZhbHVlIHRvSlNPTkZ1bmN0aW9uID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRvSlNPTik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBy
ZXR1cm4gdG9KU09OSW1wbCh2YWx1ZSwgdG9KU09ORnVuY3Rpb24sIHByb3BlcnR5TmFtZSk7CiB9
CkBAIC0zMDEsNyArMzA2LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogCiAgICAgLy8gQ2FsbCB0aGUgdG9KU09OIGZ1bmN0aW9uLgogICAgIHZhbHVlID0gdG9K
U09OKHZhbHVlLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5
RmFpbGVkOwogCiAgICAgLy8gQ2FsbCB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uCkBAIC0zMTAsNyAr
MzE1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAg
ICBhcmdzLmFwcGVuZChwcm9wZXJ0eU5hbWUudmFsdWUobV9leGVjKSk7CiAgICAgICAgIGFyZ3Mu
YXBwZW5kKHZhbHVlKTsKICAgICAgICAgdmFsdWUgPSBjYWxsKG1fZXhlYywgbV9yZXBsYWNlci5n
ZXQoKSwgbV9yZXBsYWNlckNhbGxUeXBlLCBtX3JlcGxhY2VyQ2FsbERhdGEsIGhvbGRlciwgYXJn
cyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAg
ICAgfQogCkBAIC0zMjQsNyArMzI5LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBT
dHJpbmdpZmllcgogCiAgICAgdmFsdWUgPSB1bndyYXBCb3hlZFByaW1pdGl2ZShtX2V4ZWMsIHZh
bHVlKTsKIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKSB7CkBAIC0zNzcsMTQgKzM4MiwxNCBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1w
dHkgPSBtX2hvbGRlclN0YWNrLmlzRW1wdHkoKTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChI
b2xkZXIodm0sIG1fZXhlYywgb2JqZWN0KSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIGlmICghaG9sZGVyU3RhY2tXYXNFbXB0eSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKIAogICAgIGRvIHsKICAgICAgICAgd2hpbGUg
KG1faG9sZGVyU3RhY2subGFzdCgpLmFwcGVuZE5leHRQcm9wZXJ0eSgqdGhpcywgYnVpbGRlcikp
IHsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lm
eUZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBtX2hvbGRlclN0YWNrLnJlbW92ZUxhc3QoKTsK
QEAgLTQzNiw2ICs0NDEsOCBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wCiAgICAgQVNTRVJUKG1faW5kZXggPD0gbV9zaXplKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHN0cmluZ2lmaWVyLm1fZXhlYzsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIEZpcnN0IHRpbWUg
dGhyb3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKQEAgLTQ0NCw3ICs0NTEs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgICAg
ICBpZiAobV9pc0pTQXJyYXkpCiAgICAgICAgICAgICAgICAgbV9zaXplID0gYXNBcnJheShtX29i
amVjdC5nZXQoKSktPmxlbmd0aCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IG1fb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG1fb2JqZWN0
LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RyaW5naWZpZXIubV91c2luZ0FycmF5UmVwbGFjZXIpCkBAIC00NTIsNyArNDU5
LDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgb2JqZWN0UHJvcGVy
dHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICAgICAgICAgICAg
ICBtX29iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhtX29iamVjdC5n
ZXQoKSwgZXhlYywgb2JqZWN0UHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9IG9i
amVjdFByb3BlcnR5TmFtZXMucmVsZWFzZURhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Niw3
ICs0OTMsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGluZGV4KTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIApAQCAtNTA0LDcgKzUxMSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6Okhv
bGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgaWYgKCFtX29iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlTbG90KG1fb2JqZWN0LmdldCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByb2xsQmFja1BvaW50ID0gYnVp
bGRlci5sZW5ndGgoKTsKQEAgLTY0MCw3ICs2NDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgICAgICBpblZhbHVlID0gc2xv
dC5nZXRWYWx1ZShtX2V4ZWMsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCkBAIC02NTgsNyArNjY1LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxr
KEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+bWV0aG9kVGFibGUoKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KGFycmF5LCBtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChtX2V4ZWMsIGluZGV4U3RhY2subGFzdCgpLCBmaWx0ZXJlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAg
ICAgICBnb3RvIGFycmF5U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTY3NSw3ICs2ODIsNyBAQCBORVZF
Ul9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgaW5k
ZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICAgICAgcHJvcGVydHlTdGFjay5hcHBlbmQo
UHJvcGVydHlOYW1lQXJyYXkobV9leGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKSk7CiAg
ICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgbV9leGVjLCBwcm9wZXJ0eVN0YWNrLmxhc3QoKSwgRW51bWVyYXRpb25Nb2RlKCkp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBvYmplY3RTdGFydFZpc2l0TWVtYmVyOgpAQCAtNjk4LDcgKzcwNSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgaW5WYWx1
ZSA9IGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgICAgICAgICAvLyBUaGUgaG9sZGVyIG1heSBi
ZSBtb2RpZmllZCBieSB0aGUgcmV2aXZlciBmdW5jdGlvbiBzbyBhbnkgbG9va3VwIG1heSB0aHJv
dwotICAgICAgICAgICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKIAogICAgICAgICAgICAgICAgIGlmIChpblZhbHVlLmlzT2Jq
ZWN0KCkpIHsKQEAgLTcxNyw3ICs3MjQsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBtX2V4ZWMsIHByb3ApOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0
LCBtX2V4ZWMsIHByb3AsIGZpbHRlcmVkVmFsdWUsIHNsb3QpOwotICAgICAgICAgICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgICAgICAgICBpbmRleFN0YWNrLmxhc3QoKSsrOwogICAgICAgICAgICAgICAgIGdv
dG8gb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjsKQEAgLTc1NCw3ICs3NjEsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTT05Qcm90b0Z1CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENv
dW50KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSlNPTi5wYXJzZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUg
cGFyYW1ldGVyIikpKTsKICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1
ZSB1bmZpbHRlcmVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDcgQEAgYm9vbCBv
cmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIC8vIDMuIEVTNiBQcm94eS4K
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBjdXJyZW50ID0gb2JqZWN0OwogICAgIFByb3Bl
cnR5RGVzY3JpcHRvciBvd25EZXNjcmlwdG9yOwogICAgIHdoaWxlICh0cnVlKSB7CkBAIC00NDcs
MTMgKzQ0OCwxMyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMsIEpTCiAK
ICAgICAgICAgLy8gOS4xLjkuMS0yIExldCBvd25EZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5
XV0oUCkuCiAgICAgICAgIGJvb2wgb3duRGVzY3JpcHRvckZvdW5kID0gY3VycmVudC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgb3duRGVzY3JpcHRvcik7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFvd25EZXNjcmlwdG9yRm91bmQpIHsKICAgICAgICAgICAgIC8vIDkuMS45LjEtMy1h
IExldCBwYXJlbnQgYmUgPyBPLltbR2V0UHJvdG90eXBlT2ZdXSgpLgogICAgICAgICAgICAgSlNW
YWx1ZSBwcm90b3R5cGUgPSBjdXJyZW50LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYiBJZiBwYXJlbnQgaXMgbm90IG51bGwsIHRoZW4K
QEAgLTQ4NSw3ICs0ODYsNyBAQCBib29sIG9yZGluYXJ5U2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IEpTCiAgICAgICAgIEpTT2JqZWN0KiByZWNlaXZlck9iamVjdCA9IGFzT2JqZWN0KHJlY2VpdmVy
KTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGV4aXN0aW5nRGVzY3JpcHRvcjsKICAgICAg
ICAgYm9vbCBleGlzdGluZ0Rlc2NyaXB0b3JGb3VuZCA9IHJlY2VpdmVyT2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBleGlzdGluZ0Rlc2NyaXB0b3Ip
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgICAgIC8vIDkuMS45LjEtNC1kIElmIGV4aXN0aW5nRGVzY3JpcHRvciBpcyBub3QgdW5kZWZp
bmVkLCB0aGVuCkBAIC0xMzYxLDcgKzEzNjIsNyBAQCBib29sIEpTT2JqZWN0OjpzZXRQcm90b3R5
cGVXaXRoQ3ljbGVDaGVjCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBpc0V4dGVu
c2libGUgPSB0aGlzLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CkBAIC0xNjIxLDcgKzE2MjIsNyBAQCBz
dGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxUb1ByaW1pCiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzY29w
ZS5leGNlcHRpb24oKTsKICAgICBpZiAoZnVuY3Rpb24uaXNVbmRlZmluZWQoKSAmJiBtb2RlID09
IFR5cGVIaW50TW9kZTo6VGFrZXNIaW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwpAQCAt
MTY0OSw3ICsxNjUwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Qcmlt
aQogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPihvYmplY3QpLCBjYWxsQXJncyk7CiAgICAg
QVNTRVJUKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBzY29wZS5leGNlcHRpb24oKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBtb2RlID09IFR5cGVIaW50TW9kZTo6RG9lc05vdFRha2VIaW50ID8gSlNWYWx1ZSgp
IDogdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLnRvUHJp
bWl0aXZlIHJldHVybmVkIGFuIG9iamVjdCIpKTsKQEAgLTE2ODcsNyArMTY4OCw3IEBAIEpTVmFs
dWUgSlNPYmplY3Q6Om9yZGluYXJ5VG9QcmltaXRpdmUoRXgKICAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJObyBkZWZhdWx0IHZhbHVlIikpOwogfQpAQCAtMTc4
Nyw3ICsxNzg4LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CiAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICAgSlNWYWx1ZSBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZt
LCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKCFvYmplY3RWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTgwOSwxMiArMTgxMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG9iamVjdFByaXZhCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+
bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgbW9kZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBK
U1ZhbHVlIG5leHRQcm90byA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CkBAIC0xODI2LDEwICsxODI4LDEwIEBAIHZvaWQgSlNPYmplY3Q6Omdl
dFByb3BlcnR5TmFtZXMoSlNPYmplY3QKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHByb3RvdHlwZS0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBy
b3RvdHlwZSwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG5leHRQcm90byA9IHByb3RvdHlwZS0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTkyNywxNiArMTkyOSwyMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5TmFtCiAKIGRvdWJsZSBKU09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9Qcmlt
aXRpdmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IC8vIHNob3VsZCBiZSBwaWNrZWQgdXAgc29vbiBpbiBOb2Rlcy5jcHAKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCiAgICAgICAgIHJldHVybiAwLjA7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b051bWJl
cihleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpTT2JqZWN0Ojp0b1N0cmluZyhFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSB0b1ByaW1p
dGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNF
bXB0eVN0cmluZyhleGVjKTsKICAgICByZXR1cm4gcHJpbWl0aXZlLnRvU3RyaW5nKGV4ZWMpOwog
fQpAQCAtMzExMywxNSArMzExOSwxOCBAQCBib29sIHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURl
c2NyaXB0b3IoCiAKIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZt
ICA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICAvLyBUcmFjayBvbiB0aGUgZ2xvYmFsZGF0YSB0aGF0IHdlJ3JlIGluIGRl
ZmluZSBwcm9wZXJ0eS4KICAgICAvLyBDdXJyZW50bHkgRGVmaW5lT3duUHJvcGVydHkgdXNlcyBk
ZWxldGUgdG8gcmVtb3ZlIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBiZWluZyByZXBsYWNlZAog
ICAgIC8vIChwYXJ0aWN1bGFybHkgd2hlbiBjaGFuZ2luZyBhdHRyaWJ1dGVzKSwgaG93ZXZlciBk
ZWxldGUgd29uJ3QgYWxsb3cgbm9uLWNvbmZpZ3VyYWJsZSAoaS5lLgogICAgIC8vIERvbnREZWxl
dGUpIHByb3BlcnRpZXMgdG8gYmUgZGVsZXRlZC4gRm9yIG5vdywgd2UgY2FuIHVzZSB0aGlzIGZs
YWcgdG8gbWFrZSB0aGlzIHdvcmsuCi0gICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNj
b3BlKGV4ZWMtPnZtKCksIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJs
ZSk7CisgICAgVk06OkRlbGV0ZVByb3BlcnR5TW9kZVNjb3BlIHNjb3BlKHZtLCBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOwogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBjdXJyZW50OwogICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IGdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgIGJvb2wgaXNFeHRlbnNp
YmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHZhbGlkYXRlQW5kQXBwbHlQcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgdGhpcywgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2libGUsIGRl
c2NyaXB0b3IsIGlzQ3VycmVudERlZmluZWQsIGN1cnJlbnQsIHRocm93RXhjZXB0aW9uKTsKIH0K
QEAgLTMyMjEsMTIgKzMyMzAsMTMgQEAgdm9pZCBKU09iamVjdDo6Z2V0U3RydWN0dXJlUHJvcGVy
dHlOYW1lcwogdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSlNPYmplY3Qq
IG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUobW9kZSwgSlNPYmplY3RQcm9wZXJ0aWVzTW9kZTo6RXhjbHVk
ZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0
UHJvdG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMzIzOCwxMCArMzI0OCwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRHZW5lcmljUHJv
cGVydHlOYW1lcyhKCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90
b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4
ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVh
azsKQEAgLTMyNTcsNyArMzI2Nyw3IEBAIEpTVmFsdWUgSlNPYmplY3Q6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU1ZhbHVlIG1ldGhvZCA9IGdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFtZXRob2QuaXNDZWxsKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE2IEBAIHZvaWQgY3Jl
YXRlTGlzdEZyb21BcnJheUxpa2UoRXhlY1N0YXRlKiAKICAgICAKICAgICBWZWN0b3I8SlNWYWx1
ZT4gcmVzdWx0OwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBhcnJheUxpa2VWYWx1ZS5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRvdWJsZSBsZW5ndGhBc0RvdWJsZSA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGV4
ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoQXNE
b3VibGUgPj0gMC4wICYmIGxlbmd0aEFzRG91YmxlID09IHN0ZDo6dHJ1bmMobGVuZ3RoQXNEb3Vi
bGUpKTsKICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obGVuZ3Ro
QXNEb3VibGUpOwogICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsg
aW5kZXgrKykgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBhcnJheUxpa2VWYWx1ZS5nZXQoZXhl
YywgaW5kZXgpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgICAgICBSdW50aW1lVHlwZSB0eXBlID0gcnVudGltZVR5cGVGb3JWYWx1ZShuZXh0KTsKQEAg
LTk1LDggKzk1LDEwIEBAIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EK
IHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPgogQUxXQVlTX0lOTElO
RSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQ
cm9wZXJ0eVNsb3QmKT46OnR5cGUgSlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2Fs
bGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ym9vbCBmb3VuZCA9IGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4geyB9OwogICAgIHJldHVybiBjYWxsYmFjayhmb3VuZCwgc2xvdCk7CiB9CkBAIC0x
MDQsNiArMTA2LDcgQEAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYQog
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBhdXRvJiBzdHJ1Y3R1cmVJRFRhYmxlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRh
YmxlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6Okdl
dFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0
UHJvdG90eXBlOwpAQCAtMTExLDE0ICsxMTQsMTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1
cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKICAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCiAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFw
cm90b3R5cGUuaXNPYmplY3QoKSkKQEAgLTEzMyw2ICsxMzYsNyBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhl
YXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAg
IE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBl
ID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTE0NCw3ICsxNDgsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0
eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
OwpAQCAtMTUyLDcgKzE1Niw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9u
SW5kZXgKICAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUo
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVj
dCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDUsNyArMTA1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAg
ICBTdHJ1Y3R1cmUqIHByb21pc2VTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5w
cm9taXNlU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNQcm9taXNlKiBwcm9taXNlID0gSlNQcm9taXNlOjpj
cmVhdGUodm0sIHByb21pc2VTdHJ1Y3R1cmUpOwogICAgIHByb21pc2UtPmluaXRpYWxpemUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBleGVjLT5hcmd1bWVudCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBA
QCBwcml2YXRlOgogaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1l
RW51bWVyYXRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDMyX3QgaW5kZXhlZExlbmd0aCA9IGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0RW51bWVyYWJsZUxlbmd0aChleGVjLCBiYXNlKTsKIApAQCAtMTE5LDE4ICsxMjAsMTggQEAg
aW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydAogCiAgICAgaWYgKHN0cnVj
dHVyZS0+Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrbHlGb3JFbnVtZXJhdGlvbigpICYmIGluZGV4
ZWRMZW5ndGggPT0gYmFzZS0+Z2V0QXJyYXlMZW5ndGgoKSkgewogICAgICAgICBiYXNlLT5tZXRo
b2RUYWJsZSh2bSktPmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMoYmFzZSwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IHByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCiAg
ICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoYmFz
ZSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBuYW1lcyB2
ZWN0b3IgY29udGFpbnMgYWxsIGluZGV4ZWQgcHJvcGVydHkgbmFtZXMuCiAgICAgICAgIC8vIFNv
IGRpc2FibGUgaW5kZXhlZCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBwaGFzZSBieSBzZXR0aW5nIHxp
bmRleGVkTGVuZ3RofCB0byAwLgogICAgICAgICBpbmRleGVkTGVuZ3RoID0gMDsKICAgICAgICAg
YmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwx
MCBAQCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0CiAKIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
cHJvcGVydHlOYW1lRW51bWVyYXRvcihleGVjLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKFVO
TElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgaXRlcmF0ZWRPYmplY3QsIGVu
dW1lcmF0b3IpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsMTYgKzIwMCwxOCBAQCBKU09iamVj
dCogSlNTY29wZTo6b2JqZWN0QXRTY29wZShKU1Njb3BlCiAvLyBXaGVuIGFuIGV4Y2VwdGlvbiBv
Y2N1cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UuCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNVbnNjb3BhYmxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZNJiB2
bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBpZiAoc2NvcGUtPnR5cGUoKSAhPSBXaXRoU2NvcGVUeXBlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHVuc2NvcGFibGVzID0gb2JqZWN0LT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuc2NvcGFibGVzU3ltYm9sKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF1bnNjb3BhYmxlcy5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSBibG9ja2VkID0ganND
YXN0PEpTT2JqZWN0Kj4odW5zY29wYWJsZXMpLT5nZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBibG9ja2VkLnRvQm9v
bGVhbihleGVjKTsKQEAgLTIxNyw2ICsyMTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNVbnNj
b3BhYmxlKEV4ZWNTdGF0CiAKIEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogeworICAgIFZN
JiB2bSA9ICpzY29wZS0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gc2NvcGUtPmVuZCgpOwog
ICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBpdCA9IHNjb3BlLT5iZWdpbigpOwogICAgIHdoaWxlICgx
KSB7CkBAIC0yMzksNyArMjQzLDcgQEAgSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0
YXRlKiBleAogICAgICAgICBpZiAob2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsK
ICAgICAgICAgICAgIGlmICghaXNVbnNjb3BhYmxlKGV4ZWMsIHNjb3BlLCBvYmplY3QsIGlkZW50
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghZXhlYy0+aGFkRXhjZXB0aW9uKCksICJXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1
cnMsIHRoZSByZXN1bHQgb2YgaXNVbnNjb3BhYmxlIGJlY29tZXMgZmFsc2UiKTsKKyAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0VfVU5VU0VEKHRocm93U2NvcGUsICF0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5z
Y29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDkgKzc0LDExIEBAIHZvaWQgSlNTdHJpbmc6OmR1bXBUb1N0cmVhbShjb25z
dCBKU0NlbGwKIAogYm9vbCBKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMs
IEpTU3RyaW5nKiBvdGhlcikgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmcgc3RyMSA9
IHZhbHVlKGV4ZWMpOwogICAgIFN0cmluZyBzdHIyID0gb3RoZXItPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFdURjo6ZXF1YWwoKnN0
cjEuaW1wbCgpLCAqc3RyMi5pbXBsKCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgSlNWYWx1ZSBKU1N0cmluZ0pvaW5lcjo6am9pbihF
eGVjU3RhdGUmIAogICAgIEFTU0VSVChtX3N0cmluZ3Muc2l6ZSgpIDw9IG1fc3RyaW5ncy5jYXBh
Y2l0eSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGpvaW5lZExlbmd0aChzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFsZW5n
dGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Miw2ICs1NzIsOCBAQCBU
b2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhclR5cGU+CiBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQYXJz
ZXJTdGF0ZSBpbml0aWFsU3RhdGUpCiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQYXJzZXJTdGF0ZSBz
dGF0ZSA9IGluaXRpYWxTdGF0ZTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBvYmplY3RTdGFj
azsKICAgICBKU1ZhbHVlIGxhc3RWYWx1ZTsKQEAgLTU4Myw3ICs1ODUsNyBAQCBKU1ZhbHVlIExp
dGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICBzdGFydFBhcnNlQXJy
YXk6CiAgICAgICAgICAgICBjYXNlIFN0YXJ0UGFyc2VBcnJheTogewogICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDApOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIG9iamVjdFN0YWNrLmFwcGVu
ZChhcnJheSk7CiAgICAgICAgICAgICB9CkBAIC02ODEsNyArNjgzLDcgQEAgSlNWYWx1ZSBMaXRl
cmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmplY3RTdGFjay5sYXN0KCkpOwogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZSBpZGVudCA9IGlkZW50aWZpZXJTdGFjay5sYXN0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09IG1f
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9tb2RlICE9IFN0cmljdEpTT04gJiYgaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1l
cy0+dW5kZXJzY29yZVByb3RvKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRlZFVu
ZGVyc2NvcmVQcm90by5hZGQob2JqZWN0KS5pc05ld0VudHJ5KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3BhcnNlRXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJBdHRlbXB0ZWQgdG8g
cmVkZWZpbmUgX19wcm90b19fIHByb3BlcnR5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwpAQCAtNjkzLDcgKzY5NSw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNl
cjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoaWRlbnQpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChtX2V4ZWMsIGluZGV4LnZhbHVlKCksIGxhc3RWYWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0KG1fZXhlYy0+dm0oKSwgaWRlbnQsIGxhc3RWYWx1ZSk7ICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBpZGVudCwgbGFzdFZhbHVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWRlbnRpZmllclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICBpZiAobV9sZXhl
ci5jdXJyZW50VG9rZW4oKS0+dHlwZSA9PSBUb2tDb21tYSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJ
bnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3Ry
dWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0
cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1
cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCBtYXBTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTcxLDcgKzcx
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24g
PSBtYXAtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBm
b3JFYWNoSW5JdGVyYWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIG5leHRJdGVtKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICAgICAgaWYgKCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oMSkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjIsOCArMTYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5j
Q2x6MzIoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZShjbHozMih2YWx1ZSkpKTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsK
ICAgICBkb3VibGUgbWF4ID0gMDsKICAgICBWZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFy
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzQ291bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVu
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
ICAgICAgICBpZiAoc3RkOjppc2luZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKSkpOwpAQCAtMjkyLDggKzI5NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0lNdWwoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3Qg
bGVmdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQg
PSBleGVjLT5hcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobGVmdCAqIHJpZ2h0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRl
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcg
c291cmNlID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU291cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVs
ZUtleS5pbXBsKCkpOwpAQCAtMTQyLDEyICsxNDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlclByb3RvdHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0
PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVj
b3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVs
ZVJlY29yZC0+cmVxdWVzdGVkTW9kdWxlcygpKQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRp
b24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBt
b2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5r
XSAiLCBtb2R1bGVSZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29y
ZC0+bGluayhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6
dmlzaXRDaGlsZHIKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9y
Q29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNT
RVJUKGVycm9yU3RydWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlw
ZU5vdGhpbmcsIGZhbHNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDkgKzg1LDExIEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENy
ZWF0aW9uKFYKIC8vIEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhl
YywgZXhlYy0+bmV3VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVy
T2JqZWN0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9i
amVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9i
amVjdENvbnN0cnVjdG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVl
KCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rv
ci0+Z2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgbmV3VGFyZ2V0IGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQg
b2YgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAv
LyBTaW5jZSBpZiB3ZSBmb3VuZCB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3Qg
ZmFsbCBpbnRvIHRoZSB0eXBlIGNvbnZlcnNpb24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsx
MzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYg
KG5ld1RhcmdldCAmJiBuZXdUYXJnZXQgIT0gb2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAg
Ly8gYS4gUmV0dXJuID8gT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAi
JU9iamVjdFByb3RvdHlwZSUiKS4KICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJn
ZXQsIGdsb2JhbE9iamVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAg
ICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAg
ICB9CkBAIC0yMTEsOCArMjEzLDEwIEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90
b3R5cGVPZigKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldFByb3RvdHlwZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4
ZWMsIG9iamVjdCkpOwogfQpAQCAtMjMxLDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dFZhbHVlKTsKIAogICAgIGlmICghY2hlY2tQcm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywg
b2JqZWN0KSkgewpAQCAtMjQxLDE2ICsyNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7
CiAgICAgYm9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhl
YywgcHJvdG9WYWx1ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQo
ZGlkU2V0UHJvdG90eXBlLCB2bS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAg
IEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRT
ZXRQcm90b3R5cGUpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwog
fQogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwogICAgIGlmICghb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJl
c3VsdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3Jp
cHRvcik7CkBAIC0yNjEsMTkgKzI2NywyMSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0
T3duUHJvcGVydHlECiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3JzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmpl
Y3QqIGRlc2NyaXB0b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0
eU5hbWUgOiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBp
ZiAoIWRpZEdldERlc2NyaXB0b3IpCkBAIC0yODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGRlc2NyaXB0b3JzKTsKICAgICAgICAgZGVzY3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1h
eUJlSW5kZXgoZXhlYywgcHJvcGVydHlOYW1lLCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMs
MTkgKzMwMSwyMyBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3JzKGV4ZWMsIG9iamVjdCkpOwogfQpAQCAtMzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlv
biBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JH
ZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwog
fQpAQCAtMzIyLDggKzMzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBl
eGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xz
LCBEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0Nywy
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTog
VXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0
eUtleXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvd25Qcm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpA
QCAtMzYwLDQwICszODAsNDAgQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZQogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZW51bWVyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2Ny
aXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAg
ICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51
bWVyYWJsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bmZpZ3VyYWJsZSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVl
OwogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAg
IH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlw
dGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkg
ewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkud3JpdGFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
ZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQp
KSB7CiAgICAgICAgIEpTVmFsdWUgZ2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBpZiAoIWdldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTQwMywxMiArNDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBk
ZXNjLnNldEdldHRlcihnZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsK
ICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wg
dG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKQpAQCAtNDQ1LDcgKzQ2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiUHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikp
OwogICAgIEpTT2JqZWN0KiBvYmogPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0
b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7
CkBAIC00NTMsNyArNDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAgICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29y
KSB8fCAoIWRlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIG9iai0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVm
aW5lUHJvcGVydGllcyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0
KiBwcm9wZXJ0aWVzKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJv
cGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGll
cyktPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0
aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVy
dGllc01vZGU6OkV4Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNj
cmlwdG9yczsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUg
cHJvcCA9IHByb3BlcnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wLCBkZXNjcmlwdG9yKSkKQEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNW
YWx1ZSBkZWZpbmVQcm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVy
dHlOYW1lID0gcHJvcGVydHlOYW1lc1tpXTsKICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5pc1ByaXZhdGVOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3JzW2ldLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9i
amVjdDsKQEAgLTUzMSw2ICs1NTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0
b3JTZWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmpl
Y3QpKSB7Ci0gICAgICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0
LT5zZWFsKHZtKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0K
IAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25N
b2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFko
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2Rl
KERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAg
ICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5k
KCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHBy
b3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAv
LyBiLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1
cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwog
ICAgICAgICAvLyBjLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJv
cGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxl
XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJl
dmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTU3NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9y
RnJlZXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRp
ZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhl
Yy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9i
amVjdDsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFt
ZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShl
eGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVu
dW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAg
ICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQo
KTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJv
cGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwx
NCBAQCBKU09iamVjdCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8v
IGMuIElmIGRlc2MuW1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3Vy
YWJsZV1dIHRvIGZhbHNlLgogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAg
ICAgICAgIC8vIGQuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9w
ZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0
OwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJv
cGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkp
LT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMo
b2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2
NDYsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFvYmouaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmop
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBh
c09iamVjdChvYmopKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAg
LTYzOSw2ICs2NzAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxl
ZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJn
dW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1Nl
YWxlZChleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3QtPmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5
TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CkBAIC02NzAsMTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1d
IGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAg
Ly8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBv
YmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBvYmplY3RDb25zdHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAg
ICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVj
dCgpKQpAQCAtNjg0LDEyICs3MjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBv
YmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAg
aWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAK
ICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShE
b250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVz
LmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSAr
NzQ2LDIxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAv
LyAzLiBJZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxz
ZSwgdGhlbiByZXR1cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4K
ICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KG9iaik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5z
aWJsZSkpOwogfQpAQCAtNzM1LDEzICs3NzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBE
b250RW51bVByb3BlcnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVN
b2RlKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRp
ZXNNb2RlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTQXJyYXkqIGtleXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFt
ZU1vZGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0
cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDgg
KzEwMSw5IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGlu
ZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0
b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OSw5ICs4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9G
dW5jSGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0
TW9kZSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRv
T2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSAr
MTE1LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlm
ICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgSlNWYWx1ZSB2ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09
IHRoaXNPYmopCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CiAgICAgICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB9CiB9CkBAIC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1Zh
bHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBnZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVz
YWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7
CkBAIC0xNjAsNyArMTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1
bWVudCgxKTsKQEAgLTE2OSw3ICsxNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhp
c1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVj
LT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlL
ZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsy
NTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJh
YmxlKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmlj
dE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwogICAgIGJvb2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpOwpAQCAtMjU0LDkgKzI2OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3Ry
aW5nKCkKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2Nh
bGVTdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0
IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFs
dWUgYXMgdGhlIGFyZ3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFs
dWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAv
LyAyLiBMZXQgdG9TdHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGlu
dGVybmFsIG1ldGhvZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBA
IC0yOTIsNyArMzA5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90
bwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHRvU3RyaW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYg
dG9TdHJpbmdUYWdTbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVj
LCB0b1N0cmluZ1RhZ1N5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJp
bmdUYWcuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1
aWxkZXIgcm9wZUJ1aWxkZXIodm0pOwpAQCAtMzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0
YWcgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRo
aXNPYmplY3QsIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2Jq
ZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTQ0LDExICs0NCwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dD
YXNlKENhbGxGCiB7CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4g
ZGVmYXVsdFZhbHVlKCkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1By
aW1pdGl2ZShjYWxsRnJhbWUpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldFVuZGVmaW5lZCgpCiBH
ZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3JpcHRvcjo6c2xvd0dldHRlclNldHRlcihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciogZ2V0
dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2dldHRlciAmJiAhbV9n
ZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5zZXRHZXR0ZXIodm0s
IGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsMjMgKzU2LDIzIEBAIFByb3h5Q29u
c3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJveHkucmV2b2NhYmxl
IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSB0YXJnZXQgYW5kIHRo
ZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBBcmdMaXN0IGFy
Z3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwogICAgIEpTVmFsdWUg
aGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5ID0gUHJveHlPYmpl
Y3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHRhcmdldCwgaGFu
ZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0ZSh2bSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgpLCBwcm94eSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIEpT
T2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBOb25lKTsKICAgICBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZva2UiKSwgcmV2b2tl
LCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTIgKzU0LDEzIEBAIFBy
b3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0sIFN0cnVjdHUKIFN0cmluZyBQcm94eU9iamVj
dDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkgewogICAgICAgICBj
b25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgICAgICBpZiAoaXNB
cnJheShleGVjLCB0YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuIHRhcmdldC0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4ZWMpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8Y29u
c3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIHN0YXRpYyBKU1Zh
bHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldEhhbmRsZXIgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5nZXQs
IEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgb2JqZWN0
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFuZGxlci5pc1VuZGVmaW5lZCgpKQpAQCAtMTU1LDcg
KzE1Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0
SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwpAQCAtMTY5LDcgKzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZv
cm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiB0cmFwUmVzdWx0OwpAQCAt
MTc3LDggKzE3OCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRl
CiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXQoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhpcywgc2xvdC50aGlz
VmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0gMDsKICAgICBzbG90LnNldFZhbHVl
KHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwpAQCAtMjEyLDcgKzIxNSw3IEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldE93blByb3BlcnR5
RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2Fs
bFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiksIEFT
Q0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZC5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRPd25Qcm9wZXJ0eSgp
OwpAQCAtMjIxLDcgKzIyNCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1l
dGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVu
ZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgm
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxs
KGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJhcFJlc3VsdC5pc09i
amVjdCgpKSB7CkBAIC0yMzEsNyArMjM0LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlu
dGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldFByb3BlcnR5RGVz
Y3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCA9IHRh
cmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0
UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewpAQCAtMjQ0LDcgKzI0Nyw3IEBA
IGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICAgICAgLy8gRklY
TUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIgUHJveHkuIFdlIGRv
bid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQgZml0cyB3LyBQ
cm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8gRklYTUU6IENvbWUg
dXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBob3cgdG8gYmVjYXVz
ZQpAQCAtMjU4LDExICsyNjEsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBQcm9w
ZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcjsKICAgICB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBm
YWxzZTsKICAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwKQEAgLTI4MSw3ICsy
ODQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAKICAgICBp
ZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CiAgICAg
ICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5z
bG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlzLCB0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgZ2V0dGVyU2V0dGVyKTsKICAgICB9IGVsc2UgaWYg
KHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpICYmICF0cmFwUmVzdWx0
QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMzIwLDcgKzMyMyw3IEBAIGJvb2wg
UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGhhc01ldGhvZCA9IGhhbmRs
ZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMt
PmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBwZXJmb3Jt
RGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0zMjksMTcgKzMzMiwxNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNW
YWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAg
ICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOyAKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaXNQ
cm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
Y29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Nyw3ICszNTAsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAg
ICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlBy
b3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5zaWJsZSAndGFyZ2V0
JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSIpKTsKQEAgLTQyMCw3ICs0MjMs
NyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBzZXRNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkgb2YgYSBQcm94eSdz
IGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlm
IChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTQzMiwxMCArNDM1LDEwIEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBhcmd1bWVudHMuYXBwZW5kKHB1
dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNWYWx1ZSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NzMsOCArNDc2LDkgQEAgYm9vbCBQcm94eU9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlYwogYm9vbCBQcm94eU9iamVjdDo6cHV0QnlJbmRl
eENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIElkZW50aWZpZXIg
aWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1
dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09iamVjdCogdGFyZ2V0
ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDgsNyArNTEyLDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJn
ZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTE5LDcgKzUy
Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICB9CiAK
ICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0YXRpY19jYXN0
PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
dGFyZ2V0KTsKQEAgLTU1OCw3ICs1NjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNvbnN0cnVjdCIpLCBB
U0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94
eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBA
IC01NjksMTQgKzU3MywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBw
ZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShleGVj
LCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xpc3Qo
ZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChhcmdBcnJheSk7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlc3Vs
dCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hvdWxkIGJlIGFuIG9i
amVjdCIpKTsKQEAgLTYxOSw3ICs2MjMsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVs
ZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZGVsZXRlUHJv
cGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAg
ICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTYyOSwxMSArNjMz
LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICBhcmd1
bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9T
YWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFt
ZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGRlbGV0ZVBy
b3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFz
Qm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCkBAIC02NDcsNyArNjUx
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biB0cnVlOwpAQCAtNjkzLDcgKzY5Nyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJwcmV2ZW50
RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwoIidwcmV2ZW50RXh0ZW5zaW9ucycgcHJvcGVydHkg
b2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdl
dCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZC5pc1VuZGVmaW5lZCgpKQpAQCAt
NzAyLDE2ICs3MDYsMTYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVByZXZlbnRFeHRlbnNp
bwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBwcmV2ZW50
RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1
bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAo
dGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNpb25zJyB0cmFwIHJl
dHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNpYmxlLiBJdCBzaG91
bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKQEAgLTc0Niw3ICs3NTAsNyBAQCBib29sIFByb3h5
T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2libGVNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVuc2libGUnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMt
PnRhcmdldCgpOwpAQCAtNzU2LDE1ICs3NjAsMTUgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9y
bUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2Fs
bChleGVjLCBpc0V4dGVuc2libGVNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwg
YXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNUYXJnZXRFeHRlbnNpYmxl
ID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sICE9IGlzVGFyZ2V0RXh0ZW5zaWJs
ZSkgewpAQCAtODEzLDE0ICs4MTcsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmlu
ZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2Qo
ZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kZWZpbmVQcm9wZXJ0
eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9mIGEgUHJveHkncyBo
YW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blByb3BlcnR5KCk7CiAKICAgICBKU09iamVj
dCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0
b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTgyOCwxMSArODMyLDExIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZGVzY3Jp
cHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWZpbmVQ
cm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wg
PSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtODQwLDExICs4NDQsMTEgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAgUHJvcGVydHlEZXNj
cmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERlc2NyaXB0b3JEZWZp
bmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1l
LCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgc2V0dGluZ0NvbmZpZ3VyYWJsZVRv
RmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiAhZGVzY3JpcHRvci5j
b25maWd1cmFibGUoKTsKIApAQCAtOTAyLDcgKzkwNiw3IEBAIHZvaWQgUHJveHlPYmplY3Q6OnBl
cmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlw
ZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgIm93bktleXMi
KSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIg
c2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgSlNPYmpl
Y3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChvd25LZXlzTWV0aG9kLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTkxMyw3ICs5MTcsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0T3duUHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5TGlrZU9iamVjdCA9
IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQcm9wZXJ0eU5hbWVNb2Rl
IHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKQEAgLTk0MSw3ICs5NDUsNyBA
QCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgICAgICAgICBy
ZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gdmFsdWUu
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGRv
RXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hlY2tlZFJlc3VsdEtleXMuYWRkKGlkZW50LmltcGwo
KSk7CkBAIC05NTAsMjEgKzk1NCwyMSBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3du
UHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKGV4ZWMsIGFy
cmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVyLCBBU0NJSUxpdGVy
YWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0dXJuIGFuIGFycmF5
LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1ib2xzIiksIGFkZFBy
b3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4ZW5z
aWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogCiAgICAgUHJvcGVydHlOYW1lQXJy
YXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIHRhcmdldC0+bWV0aG9k
VGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywgdGFyZ2V0S2V5cywg
ZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3RvcjxVbmlx
dWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAgVmVjdG9yPFVuaXF1
ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAgICBmb3IgKGNvbnN0
IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVmaW5lZCA9IHRhcmdl
dC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwoKSwgZGVzY3JpcHRv
cik7IAotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChpc1By
b3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKICAgICAgICAgICAg
IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwoKSk7CkBAIC0xMDUz
LDcgKzEwNTcsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBlT2YiKSwgQVNDSUlM
aXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtMTA2NCwxMSArMTA2OCwxMSBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90eXBlKTsKICAgICBK
U1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxs
VHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKCF0
cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDc4LDEzICsxMDgyLDEzIEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICB9CiAKICAgICBib29sIHRhcmdldElzRXh0
ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghc2FtZVZh
bHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgewogICAgICAgICB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdzZXRQcm90b3R5cGVP
ZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4gaXRzIHRhcmdldCBpcyBub24tZXh0ZW5zaWJsZSBh
bmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50
IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC0x
MTE4LDcgKzExMjIsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBl
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxs
RGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90eXBlT2YiKSwgQVND
SUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
IAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTExMjgsNyArMTEz
Miw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0UHJvdG90eXBlT2ZNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5pc09iamVjdCgpICYm
ICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBAIC0xMTM3LDEzICsxMTQxLDEzIEBAIEpTVmFsdWUg
UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICB9CiAKICAgICBib29sIHRhcmdl
dElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAg
IHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJn
ZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBlLCB0cmFwUmVzdWx0
KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRlbnNpYmxlIHRhcmdl
dCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQncyBwcm90b3R5cGUi
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJnZXQsIGNvbnN0cnVj
dFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7CkBAIC0xMzksMTQg
KzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
aWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmRlZmluZVBy
b3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICghdG9Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIFJlZmxlY3QuZGVm
aW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBkZWZpbmVPd25Q
cm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJvdyA9IGZhbHNlOwpA
QCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9i
amUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1l
bnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBKU1ZhbHVlIHJl
Y2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0Iikp
KTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwga2V5KSk7CkBAIC0y
MjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBhc09i
amVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKICAg
ICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2ZW50RXh0ZW5zaW9u
cyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ocmVz
dWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBhc09iamVjdCh0YXJn
ZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTMw
Nyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAK
ICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAgYm9vbCBkaWRTZXRQ
cm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG8sIHNob3VsZFRo
cm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGRpZFNldFByb3Rv
dHlwZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUgUmVnRXhwRmxhZ3MgdG9GbGFncyhFeGVjU3RhdGUq
IGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBOb0ZsYWdz
OwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmluZyA9IGZsYWdzLnRvU3RyaW5nKGV4ZWMpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBmbGFnc1N0cmluZyk7CiAgICAgaWYgKCFmbGFn
c1N0cmluZykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIH0KIAogICAgIFJlZ0V4cEZsYWdzIHJlc3VsdCA9
IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52YWx1ZShleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAgICAgaWYgKHJlc3VsdCA9PSBJbnZhbGlkRmxhZ3Mp
CiAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikpOwpAQCAtMjM1LDcg
KzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgcGF0dGVy
biA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBwYXR0ZXJuQXJn
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IHRvRmxhZ3MoZXhlYywgZmxhZ3NB
cmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4
ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVh
dGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBS
ZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwogfQpAQCAtMjU1LDYg
KzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCAgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1
ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwYXR0ZXJuQXJnID0gYXJn
cy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0gYXJncy5hdCgxKTsKIApAQCAtMjYzLDcg
KzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKIAogICAg
IGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25zdHJ1Y3RBc1JlZ2V4cCAmJiBmbGFn
c0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBwYXR0
ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rvcik7Ci0gICAgICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoY2FsbGVlID09
IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgcGF0dGVybkFyZyBp
cyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQgYmUgZmFsc2UuCkBA
IC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChFeGVjU3RhdGUqIGV4
ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHApIHsKICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBq
c0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVybkFyZyktPnJlZ0V4cCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBnbG9iYWxPYmplY3Qs
IG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTIgKzEzMywxMyBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnJlCiAKIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1
cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhl
Y1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQYXRoID0gMTAwMDAw
OwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgpIHsKQEAgLTIzMywxNCArMjMzLDE0IEBAIEpTVmFs
dWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVjU3RhdGUKIAogSlNWYWx1ZSBSZWdFeHBPYmpl
Y3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFJlZ0V4
cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CiAKICAgICBBU1NFUlQocmVnRXhwLT5nbG9iYWwo
KSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwotCiAgICAgc2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKQEAgLTI0OSwxNCArMjQ5LDE0
IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QKICAgICBpZiAocmVn
RXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVuZ3RoID0gcy5sZW5n
dGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAgICAgKnZtLCBl
eGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgICAgICB2
bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhwLAogICAgICAgICAg
ICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgICAgIHJldHVybiBh
ZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJpbmdMZW5ndGgsIGVuZCk7CiAgICAgICAgICAgICB9
KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAgICAqdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKKyAgICAgICAgdm0s
IGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgWyZd
IChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJuIGVuZCArIDE7CiAg
ICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTks
MTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAg
ICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVudENvdW50KCkgPyBl
bXB0eVN0cmluZygpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdzOwogICAgICAgICBp
ZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3MgPSByZWdFeHBGbGFn
cyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0ZVN5bnRheEVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29u
c3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSArMTg5LDIyIEBAIHN0YXRpYyBpbmxpbmUgRmxhZ3NT
dHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBzdHJpbmdbMF0gPSAwOwogCiAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgSlNW
YWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFs
dWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgc3Rp
Y2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3RpY2t5
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0g
MDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVn
RXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVl
KTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc291cmNlID0gc291cmNlVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1ZhbHVlID0gdGhpc09i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgZmxhZ3Mg
PSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycsIHNvdXJjZSwgJy8n
LCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MgZ2V0dGVyIGNhbiBv
bmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZsYWdzID0gZmxhZ3NT
dHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkpOwpAQCAtNDcyLDEyICs0NzMs
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwpAQCAtNTg0LDcgKzU4Niw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAzLiBbaGFu
ZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmluZykuCiAgICAgSlNT
dHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAg
ICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5w
dXQuaXNOdWxsKCkpOwogCkBAIC01OTksNyArNjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJheUNyZWF0ZSgwKS4K
ICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB1bnNpZ25lZCByZXN1bHRMZW5n
dGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNTZXQqIHNldCA9IEpT
U2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQp
OwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gc2V0LT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERh
dGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5n
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcg
Kzk5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBj
b2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CkBAIC0xMjEsMTAgKzEyMSwxMSBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3Bl
cnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlv
bikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAogICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4
ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29s
IFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJy
ZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7
CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxw
dHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZp
bmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAog
ICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVl
IHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAg
ICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJl
Z0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBA
QCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2Jh
bCkgewogICAgICAgICAvLyBFUzUuMSAxNS41LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4
cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVu
Z3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpT
VmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5z
KCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1
bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQo
KSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVu
dHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcgKzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hl
ZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1
bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7
CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAg
ICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJp
bmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFy
Y2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAg
Ly8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNp
bmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVj
KSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgsMTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywg
SlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFs
dWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
U3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50
U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwxMSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNo
VmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1
ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2lu
Z1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBK
U1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNf
SU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBK
U1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShl
eGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmlu
ZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEyICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRj
aFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFj
ZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNV
bmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJl
cGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEs
MTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAg
aWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3Ry
aW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNW
YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4
ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDggKzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2go
ZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1l
bnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBh
cmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwy
MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFs
dWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAg
ICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBp
dCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5p
c051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlm
IGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMg
dGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpT
QXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4KQEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0
IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJh
dG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEw
LiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5s
ZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0
cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0xMzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0g
dGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
YTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Q29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcm
IHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4K
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcg
KzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVy
IG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsx
NTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9
CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8
L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNW
YWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAg
ICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8
Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxl
KHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4
ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxT
dHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tP
YmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRy
aXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1
OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8K
ICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7
CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAi
PC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsxNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1Zh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
IFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0
aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBh
MCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2li
bGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyAr
MTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBp
ZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1Rv
U2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhw
cmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0
byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAg
ICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0
NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxl
bmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0
aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlm
IChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihl
eGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90
IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9T
ZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMsNyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9z
aXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQ
b3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9T
ZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmluZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3Rh
cnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0g
c3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3Rh
cnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhl
YyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2Vh
cmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
SlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVz
c2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBT
dHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3Ry
aW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcg
KzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIw
MTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2Ug
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFs
aXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJn
dW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAg
Q2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgw
KS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJp
bmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
bGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEy
ICs0NiwxMyBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAg
ICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRl
bXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVj
dCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewpAQCAtNjAsMTIgKzYxLDEyIEBAIEpTQXJy
YXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVt
cGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3
T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDI2ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVk0uaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAgICAgCi0jaWYgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKLQotbmFt
ZXNwYWNlIHsKLQotLy8gTG9ncyBhbGwgVGhyb3dTY29wZSBhY3Rpdml0eSB0byBoZWxwIGRlYnVn
IHRoZSBzb3VyY2Ugb2YgYSB2ZXJpZmljYXRpb24gZmFpbHVyZS4KLWJvb2wgdHJhY2VPbiA9IGZh
bHNlOwotCi0vLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysg
c3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5nLgotYm9vbCB0
cmFjZVdpdGhTdGFja1RyYWNlcyA9IGZhbHNlOwotCi0vLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1
bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KLWJvb2wgdmVy
aWZpY2F0aW9uT24gPSBmYWxzZTsKLQotdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7Ci19OworI2lm
IEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiAvKgogICAgIFRocm93U2Nv
cGUgdmVyaWZpY2F0aW9uIHdvcmtzIHRvIHNpbXVsYXRlIGV4Y2VwdGlvbiB0aHJvd3MgYW5kIGNh
dGNoIGNhc2VzIHdoZXJlCkBAIC0yMjAsNyArMjA3LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9
IDA7CiAKICAgICBiLiBUdXJuIG9uIFRocm93U2NvcGUgdHJhY2luZwogIAotICAgICAgIEp1c3Qg
c2V0IHRyYWNlT249dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVidWls
ZC4gVGhlcmVhZnRlciwgeW91IHNob3VsZAorICAgICAgIEp1c3Qgc2V0IFZNOjptX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzPXRydWUgaW4gdGhlIFZNLCBhbmQgcmVidWlsZC4gVGhlcmVhZnRlciwgeW91
IHNob3VsZAogICAgICAgIHNlZSBhIHRyYWNlIG9mIFRocm93U2NvcGVzIGJlaW5nIGVudGVyZWQg
YW5kIGV4aXRlZCBhcyB3ZWxsIGFzIHRoZWlyIGRlcHRoIGUuZy4KIAogICAgIFRocm93U2NvcGUg
WzFdIEVudGVyOiBsbGludF9zbG93X3BhdGhfamZhbHNlIEAgL1ZvbHVtZXMvRGF0YS93czYvT3Bl
blNvdXJjZS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEw
MzIKQEAgLTIzNCw3ICsyMjEsNyBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKIAogICAgIGMu
IFR1cm4gb24gVGhyb3dTY29wZSBzdGFjayBkdW1wcwogCi0gICAgICAgSnVzdCBzZXQgdHJhY2VX
aXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCB0aGUgdG9wIG9mIFRocm93U2NvcGUuY3BwLCBhbmQgcmVi
dWlsZC4KKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcz10cnVlIGF0IGluIHRoZSBWTSwgYW5kIHJlYnVpbGQuCiAgICAgICAgVGhlcmVhZnRl
ciwgeW91IHNob3VsZCBzZWUgYSBzdGFjayB0cmFjZXMgYXQgdmFyaW91cyByZWxldmFudCBUaHJv
d1Njb3BlIGV2ZW50cy4KIAogICAgIGQuIFVzaW5nIHRocm93U2NvcGVQcmludElmTmVlZENoZWNr
KCkKQEAgLTI0OSwzMyArMjM2LDE4IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgICAg
IGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVkIHRoZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
aygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCiAqLwogCi1UaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZN
JiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxvY2F0aW9uKQotICAgIDogbV92bSh2bSkKLSAgICAs
IG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRocm93U2NvcGUpCi0gICAgLCBtX2xvY2F0aW9uKGxv
Y2F0aW9uKQotICAgICwgbV9kZXB0aChtX3ByZXZpb3VzU2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUt
Pm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2NvcGU6OlRocm93U2NvcGUoVk0mIHZtLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2Vw
dGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BU
aHJvd1Njb3BlID0gdGhpczsKLQotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2co
IjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAi
LCBsb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0
aW9uLmxpbmUpOwotICAgICAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAg
ICAgICAgIGRhdGFMb2coIiwgbmVlZHMgY2hlY2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsK
LQotICAgICAgICBpZiAodHJhY2VXaXRoU3RhY2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBv
cnRCYWNrdHJhY2UoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1Nh
dGlzZmllZChTaXRlOjpTY29wZUVudHJ5KTsKKyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnksIG1fZGVwdGgs
IG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAKICAgICBpZiAoIW1faXNSZWxlYXNlZCkKLSAgICAg
ICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsK
KyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRp
b25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBJZiB3ZSByZWxlYXNlZCB0aGUgc2NvcGUsIHRoYXQgbWVhbnMgd2UncmUg
bGV0dGluZyBvdXIgY2FsbGVycyBkbyB0aGUKICAgICAgICAgLy8gZXhjZXB0aW9uIGNoZWNrLiBI
b3dldmVyLCBiZWNhdXNlIG91ciBjYWxsZXIgbWF5IGJlIGEgTExJbnQgb3IgSklUCkBAIC0yOTcs
MjcgKzI2OSwyNSBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAgICAgIHdpbGxCZUhh
bmRsZUJ5TExJbnRPckpJVCA9IHRydWU7CiAgICAgCiAgICAgaWYgKCF3aWxsQmVIYW5kbGVCeUxM
SW50T3JKSVQpCi0gICAgICAgIHNpbXVsYXRlVGhyb3coKTsKKyAgICAgICAgc2ltdWxhdGVUaHJv
dyhFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQpOwogCi0gICAgaWYgKHRyYWNlT24pIHsK
LSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBbIiwgbV9k
ZXB0aCwgIl0gRXhpdDogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0
aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lKTsKKyAgICBpZiAobV92bS5tX3RyYWNlRXhj
ZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpU
aHJvd1Njb3BlRXhpdCwgbV9sb2NhdGlvbik7CiAgICAgICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQogICAgICAgICAgICAgZGF0YUxvZygiLCB3aXRoIHJldGhyb3ciKTsKICAgICAg
ICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCiAgICAgICAgICAgICBkYXRhTG9nKCIs
IG5lZWRzIGNoZWNrIik7CiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAKLSAgICAgICAgaWYgKHRy
YWNlV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzKQogICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiAg
ICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93U2NvcGUgPSBtX3ByZXZpb3VzU2NvcGU7CiB9CiAK
IHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNlcHRpb24oKSAmJiBtX3ZtLmV4Y2Vw
dGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlv
bik7CiAgICAgCiAgICAgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogfQpA
QCAtMzI1LDcgKzI5NSw3IEBAIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0
YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGVycm9yKQogewogICAgIGlmICghZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHluYW1pY0Nh
c3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxsKCkpKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25D
aGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhj
ZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2RlcHRo
LCBtX2xvY2F0aW9uKTsKICAgICAKICAgICByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBlcnJvcik7CiB9CkBAIC0zMzMsNyArMzAzLDcgQEAgSlNWYWx1ZSBUaHJvd1Njb3BlOjp0aHJv
d0V4Y2VwdGlvbihFeGVjUwogSlNPYmplY3QqIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikKIHsKICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8
RXhjZXB0aW9uKj4ob2JqKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7
CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KQEAg
LTM0MSw1NSArMzExLDI0IEBAIEpTT2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihF
eGUKIHZvaWQgVGhyb3dTY29wZTo6cHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCiB7CiAgICAgaWYgKG1fdm0u
bV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50Kyss
ICI+IE5lZWQgZXhjZXB0aW9uIGNoZWNrIGF0ICIsIGZ1bmN0aW9uTmFtZSwgIiBAICIsIGZpbGUs
ICI6IiwgbGluZSwgIlxuIik7CisgICAgICAgIGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpOZWVk
RXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oZnVuY3Rpb25OYW1lLCBmaWxl
LCBsaW5lKSk7CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6c2ltdWxhdGVUaHJvdygpCit2b2lkIFRo
cm93U2NvcGU6OnNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQgZXZlbnQpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
dm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisgICAgbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRF
dmVudCA9IGV2ZW50OwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb24gPSBt
X2xvY2F0aW9uOwogICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGggPSBtX2RlcHRo
OwogICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSB0cnVlOwogCi0gICAgaWYgKHRyYWNl
T24pIHsKLSAgICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gVGhyb3dTY29wZSBb
IiwgbV9kZXB0aCwgIl0gVGhyb3cgZnJvbTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iKTsKLSAgICAg
ICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQorICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRp
b25FdmVudHMpIHsKKyAgICAgICAgbG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQ6OlRocm93LCBtX2xv
Y2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcykKICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KIH0KIAot
dm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChUaHJv
d1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAgaWYgKCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7
Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0
aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0aW9uID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9p
bnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRvIHNpdGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4g
Y29uc3QgY2hhciogewotICAgICAgICAgICAgc3dpdGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBj
YXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0g
ICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRXhpdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
IkV4aXQiOwotICAgICAgICAgICAgY2FzZSBTaXRlOjpUaHJvdzoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsK
LQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sg
dmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAgICAgIiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20g
VGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAiXSAiLCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFp
bExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIsIGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZh
aWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBU
aHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTogIiwgbV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIg
QCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9sb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAg
ICAgICAiXG4iKTsKLQotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRp
b25DaGVjayk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklG
SUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
ICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4OCArMjYs
NjQgQEAKICNpZm5kZWYgVGhyb3dTY29wZV9oCiAjZGVmaW5lIFRocm93U2NvcGVfaAogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25T
Y29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNP
YmplY3Q7CiAKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2lmIEVOQUJM
RShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCi1jbGFzcyBUaHJvd1Njb3BlIHsKK2Ns
YXNzIFRocm93U2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewogcHVibGljOgotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBUaHJvd1Njb3BlTG9jYXRpb24pOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFRocm93U2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9u
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGhyb3dTY29wZSgpOwogCiAgICAgVGhyb3dTY29w
ZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CiAgICAgVGhyb3dTY29wZShUaHJvd1Njb3Bl
JiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KLQog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgRXhj
ZXB0aW9uKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogdGhy
b3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqKTsKIAotICAgIGlubGluZSBFeGNlcHRp
b24qIGV4Y2VwdGlvbigpCi0gICAgewotICAgICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOwotICAgIH0KLQotICAg
IGlubGluZSB2b2lkIHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KKyAgICB2b2lk
IHJlbGVhc2UoKSB7IG1faXNSZWxlYXNlZCA9IHRydWU7IH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgcHJpbnRJZk5lZWRDaGVjayhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpOwogCiBwcml2YXRlOgotICAgIHZvaWQgc2ltdWxh
dGVUaHJvdygpOworICAgIHZvaWQgc2ltdWxhdGVUaHJvdyhFeGNlcHRpb25FdmVudCk7CiAKLSAg
ICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAgICBTY29wZUVudHJ5LAotICAgICAgICBTY29wZUV4
aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsKLSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNr
TmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0gICAgVk0mIG1fdm07Ci0gICAgVGhyb3dTY29wZSog
bV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9uOwotICAg
IHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9vbCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9OwogfTsK
IAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKLSAgICBKU0M6OlRocm93U2Nv
cGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9f
LCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNlcHRpb25F
dmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKSkKIAogI2RlZmlu
ZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjayhzY29wZV9fKSBcCiAgICAgc2NvcGVfXy5wcmlu
dElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQogCi0jZWxzZSAv
LyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbHNlIC8vIG5vdCBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7Citj
bGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBU
aHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIEFMV0FZU19JTkxJTkUg
VGhyb3dTY29wZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCiAgICAgeyB9
CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CisgICAgVGhyb3dT
Y29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0
dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFsdWUpOyB9
Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0gICAgCi0g
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigpOyB9Ci0g
ICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFZNJiBtX3ZtOworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsg
fQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFs
dWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4
ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9CiB9Owog
CiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NPUEUodm1fXykgXAogICAgIEpTQzo6VGhyb3dTY29w
ZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQor
I2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Njb3BlJiBz
Y29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAkocmV2aXNpb24gMjA1NDE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0K
LSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQotICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlv
bk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxlKQotICAgICAgICAsIGxpbmUobGluZSkKLSAgICB7
IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07Ci0gICAg
Y29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBsaW5lIHsgMCB9Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3Myw0ICs4NzMsMjYgQEAgc2l6ZV90IFZNOjpj
b21taXR0ZWRTdGFja0J5dGVDb3VudCgpCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9u
RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0
aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9p
bnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4
Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlv
biB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhy
b3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRl
cHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAg
fQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtNDgsNyArNTAsNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNs
dWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKQEAgLTgyLDYgKzgzLDcgQEAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247Citj
bGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2Zp
bGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTA5LDcgKzExMSw2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhy
b3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC00NDAsMTIgKzQ0
MSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAg
IEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxG
cmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAg
RXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9u
OyB9CkBAIC02NDEsMTEgKzY0MCwxNyBAQCBwcml2YXRlOgogICAgICAgICBtX2V4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKICAgICAgICAgbV9sYXN0RXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0K
KyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9
CisgICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICB2b2lkIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVl
ZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50LCB1bnNpZ25lZCBkZXB0aCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgIGJvb2wg
bV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKQEAgLTY3MCwxMSArNjc1LDIzIEBAIHByaXZhdGU6
CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVsbHB0ciB9OwogICAgIEV4Y2VwdGlv
biogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotI2lmIEVOQUJMRShUSFJPV19TQ09QRV9W
RVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29wZSogbV90b3BUaHJvd1Njb3BlIHsgbnVsbHB0ciB9
OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsK
KyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICBFeGNlcHRpb25T
Y29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7IG51bGxwdHIgfTsKKyAgICBFeGNlcHRpb25FdmVu
dCBtX3NpbXVsYXRlZFRocm93UG9pbnRFdmVudDsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9u
IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOwogICAgIHVuc2lnbmVkIG1fc2ltdWxhdGVk
VGhyb3dQb2ludERlcHRoIHsgMCB9OwogICAgIG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25D
aGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBMb2dzIGFsbCBleGNlcHRpb24gYWN0aXZpdHkgdG8g
aGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUuCisgICAgYm9v
bCBtX3RyYWNlRXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAgIC8vIEEgbW9yZSB2ZXJi
b3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVn
aWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcuCisgICAgYm9vbCBtX3RyYWNlRXhjZXB0aW9uRXZl
bnRzV2l0aFN0YWNrVHJhY2VzIHsgZmFsc2UgfTsKKworICAgIC8vIERpc2FibGVkIHRlbXBvcmFy
aWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRpb24gZmFpbHVyZXMgYXJlIGZpeGVkLgorICAg
IGJvb2wgbV92ZXJpZnlFeGNlcHRpb25FdmVudHMgeyBmYWxzZSB9OworCisgICAgdW5zaWduZWQg
bV9leGNlcHRpb25FdmVudENvdW50IHsgMCB9OwogI2VuZGlmCiAKICAgICBib29sIG1fZmFpbE5l
eHROZXdDb2RlQmxvY2sgeyBmYWxzZSB9OwpAQCAtNzAwLDYgKzcxNywxMCBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeTsKIAorICAgIC8vIEZyaWVuZHMgZm9yIGV4Y2VwdGlvbiBjaGVja2luZyBw
dXJwb3NlIG9ubHkuCisgICAgZnJpZW5kIGNsYXNzIEhlYXA7CisgICAgZnJpZW5kIGNsYXNzIENh
dGNoU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIEV4Y2VwdGlvblNjb3BlOwogICAgIGZyaWVuZCBj
bGFzcyBUaHJvd1Njb3BlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrTWFwQ29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1
Y3R1cmUqIHdlYWtNYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT53ZWFrTWFw
U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0gSlNXZWFrTWFwOjpjcmVhdGUo
ZXhlYywgd2Vha01hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOwpAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUod2Vha01hcCk7CiAK
ICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSB3ZWFrTWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5j
dGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5
cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRl
cmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlm
ICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1NldENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1
bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3
ZWFrU2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha1NldFN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IEpTV2Vha1NldDo6Y3JlYXRlKGV4ZWMsIHdl
YWtTZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgw
KTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtTZXQpOwogCiAgICAgSlNW
YWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha1NldC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuYWRkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxs
RGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDkgKzMwMSwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJpbnQoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMt
PnZtKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGVjLT5hcmd1bWVudENvdW50
KCk7ICsraSkgewogICAgICAgICBTdHJpbmcgYXJnU3RyID0gZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBkYXRhTG9nKGFyZ1N0cik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgs
OCArOTE4LDggQEAKICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5k
ZWYgRU5BQkxFX1RIUk9XX1NDT1BFX1ZFUklGSUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1df
U0NPUEVfVkVSSUZJQ0FUSU9OICghZGVmaW5lZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTgorI2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNo
IGFsbG9jYXRvciB0byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBp
ZiB0aGUgYXNzZW1ibGVyIGlzIGNvbXBpbGVkIGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFy
cgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFyS2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpT
VmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09OUGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVk
OiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
OSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4g
b2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1Nyw3
ICs4NTcsOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAg
Ly8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0
aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlm
ICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsK
KyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VUaHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVl
KGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg3MSw3ICs4NzMsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQgdmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBr
ZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBA
QCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVk
V29ybGQpKTsKKyAgICBWTSYgdm0gPSBleGVjLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlNDOjpKU1Zh
bHVlIHByb2JlRnVuY3Rpb25WYWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1
bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAg
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQ
UHJvY2Vzc29yU2NyaXB0UmVzb3VyY2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9p
c29sYXRlZFdvcmxkKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUy
OSw5IEBAIGJvb2wgU0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdM
aXN0LmFwcGVuZChKU0M6OmpzU3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0df
RVJST1IoIlNEUFByb2Nlc3NvciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlv
bk5hbWUuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1
Z2luUmVwbGFjZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9w
bHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1l
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1l
UGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVIKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0g
aXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVu
dEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFj
ZW1lbnRGdW5jdGlvbi5pc0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAog
ICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVp
Y2tUaW1lUGx1Z2luUmVwbGFjZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAgLSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1
aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0xODgsMTUgKzE5MCwxOCBAQCBib29s
IFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRD
b250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIAogICAgIC8vIExvb2t1cCB0
aGUgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUg
cmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAg
aWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIEpTQzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFj
ZW1lbnRGdW5jdGlvbi50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxE
YXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwz
MiArMjE0LDMyIEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAg
ICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVz
KSk7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
bV92YWx1ZXMpKTsKICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJl
cGxhY2VtZW50T2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlz
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCiAgICAgLy8gR2V0IHRoZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1p
bi4KICAgICBKU0M6OkpTVmFsdWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1f
bWVkaWFFbGVtZW50ID0gSlNIVE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAg
ICAgaWYgKCFtX21lZGlhRWxlbWVudCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFp
bGVkIHRvIGZpbmQgPHZpZGVvPiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiBy
ZXBsYWNlbWVudCBzY3JpcHQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFs
dWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsICJzY3JpcHRPYmplY3QiKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAh
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3Qg
PSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAg
IGlmICghbV9zY3JpcHRPYmplY3QpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxl
ZCB0byBmaW5kIHNjcmlwdCBvYmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxh
Y2VtZW50LiIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6
ZV90IGluZGV4LCBEaWN0aQogCiBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0
cmluZyYgdmFsdWUpIGNvbnN0CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9v
bCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICB2YWx1ZSA9IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVy
dGllc0FzU3RyaW4KIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRp
YWxpemVyT2JqZWN0KCk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNT
dGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1l
cyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSgpKTsKQEAgLTY5LDEwICs3MSwxMCBAQCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRp
ZXNBc1N0cmluCiAgICAgICAgIGlmIChzdHJpbmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3Ry
aW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
ICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFs
dWUpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxMyArOTAsMTQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFs
TwogCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIo
dm0uYXBpTG9jaygpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBhdXRvJiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25l
ZCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KCZzdGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoJnN0YXRlLCBpLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJy
YXkuYXQoaSkuZ2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBw
bGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTUgKzU1LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24o
c3RhdHVzLCBuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZWMpOwpAQCAtODgsMTkgKzg4LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Np
b246OmNvbXBsZXRlU2hpcHAKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQx
Nl90IHN0YXR1cyA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgzKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNl
bGVjdGlvbihzdGF0dXMsIG5ld1NoaXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVt
cywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1
LDExIEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoMCkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUs
IHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlv
bihuZXdUb3RhbCwgbmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0
ZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0
MywxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpT
QXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewog
I2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01
Niw4ICs1OSwxMSBAQCB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2
b2lkIEpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0
byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcp
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNC
bG9iQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNM
ZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywg
ZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VS
VChibG9iUGFydHMpOwogCkBAIC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRp
bmdzIHByb3BlcnR5IGFuZCB2YWxpZGF0ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGlu
Z3MgPSBkaWN0aW9uYXJ5LmdldCgiZW5kaW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAgICAgaWYgKGNvbnRhaW5zRW5kaW5ncykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0
IHRvIGdldCB0aGUgdHlwZSBwcm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUi
LCB0eXBlKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBibG9iUGFydHNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0g
PSBibG9iUGFydHMtPmdldCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAo
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3
ICsxMzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAg
ICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBl
bmRpbmdzKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
U1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRp
b25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBK
U0NTU1N0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRl
KSk7CiAKICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdl
dFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFu
ZExpbmVBUElIb3N0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBK
U1ZhbHVlIEpTQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSog
Z2V0SlNMaXN0ZW5lckZ1bmN0aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxw
dHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90
IGhhbmRsZXJzQ291bnQgPSBsaXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291
bnQ7ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpnZXRBbGcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5
QVNDSUkoKSkgewpAQCAtMTA2LDEyICsxMDYsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29y
aXRobShKU0RpY3Rpb25hcgogICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRv
IHJldHVybiBKU1ZhbHVlcywgYW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUu
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBkaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0
KCk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJoYXNoIik7CiAKICAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBv
YmplY3QsICJoYXNoIik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChoYXNoLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1Zh
bHVlIGl2ID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRv
cHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBpdkRhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgaXYsIGl2RGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUo
ZXhlYywgaXYsIGl2RGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgaWYgKGl2RGF0YS5zZWNvbmQgIT0gMTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRh
dGEgbXVzdCBiZSAxNiBieXRlcyIpKTsKQEAgLTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0
aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVu
Z3RoID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2Up
OwpAQCAtMTg5LDEwICsxOTEsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRP
YmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUhtYWNQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwg
cmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkg
anNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlm
ICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVz
dWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICByZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFy
eS5nZXQoImxlbmd0aCIsIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsy
MzgsMTYgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMp
OwogCiAgICAgSlNWYWx1ZSBtb2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUs
IHZhbHVlLmdldE9iamVjdCgpLCAibW9kdWx1c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBG
aWxlZCBhcyA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0y
Mzc3OT4uCiAgICAgcmVzdWx0LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3Rh
dGUsIG1vZHVsdXNMZW5ndGhWYWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVl
ID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50
Iik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVp
bnQ4QXJyYXk+IHB1YmxpY0V4cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25l
bnRWYWx1ZSk7CkBAIC0yNzksMTMgKzI4MSwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1
ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0Fs
Z29yaXRobVJzYU9hZXBQYXJhbXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGlj
dGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdl
dEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVu
dDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAg
IEpTVmFsdWUgbGFiZWxWYWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgp
LCAibGFiZWwiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXN1bHQtPmhhc0xhYmVsID0gIWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5
MywxMCArMjk1LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4K
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgbGFiZWxEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4
ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KGV4ZWMsIGxhYmVsVmFsdWUsIGxhYmVsRGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQogCiAgICAgcmVzdWx0LT5sYWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBs
YWJlbERhdGEuc2Vjb25kKTsKIApAQCAtMzE2LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnko
JnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigq
bmV3IENyeXB0b0FsZ29yaXRobVJzYVNzYVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdv
cml0aG0oanNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWly
ZWQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBz
dWNjZXNzID0gZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFz
aFJlcXVpcmVtZW50OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9u
SldLLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCBzdGF0aWMgYm9vbCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMs
IGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewog
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVj
dGVkIGFuIGFycmF5IGZvciBcIiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNP
TihFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1
ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYg
KCFqc1ZhbHVlLmdldFN0cmluZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQg
YW4gb3V0IG9mIG1lbW9yeSBleGNlcHRpb24uCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0
cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5
IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3Rh
dGljIGJvb2wgZ2V0Qm9vbGVhbkZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZp
ZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEg
Ym9vbGVhbiB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNDgsNyArMTQ4LDcgQEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjpKU0NyeXB0b0tleQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUganNvblZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNv
blZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBr
ZXlPcHMtPmdldEluZGV4KG1fZXhlYywgaSk7CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9u
OwogICAgICAgICAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRy
aWJ1dGUgY291bGQgbm90IGJlIHByb2Nlc3NlZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CkBAIC0zMjAsNyArMzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlh
bGl6YXRpb25KV0s6OnJlY29uYwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIFN0cmluZyBqd2tVc2VTdHJpbmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2
NFVSTDsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
ayIsIGtleUJhc2U2NFVSTCkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90
IHByZXNlbnQgaXMgSldLIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
MjAsNyArNDIwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwog
ICAgIFZlY3Rvcjx1aW50OF90PiBwcml2YXRlRXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0lu
dGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkg
ewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2Nv
cGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICgh
Z2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4
cG9uZW50KSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlz
c2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1
cykpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChz
Y29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBy
ZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBl
eHBvbmVudCk7CiAgICAgfQpAQCAtNDQ2LDM4ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENy
eXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQ
cmltZUluZm8gc2Vjb25kUHJpbWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29t
cG9uZW50czo6UHJpbWVJbmZvPiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRl
Z2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUlu
Zm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2
YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlm
ICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAi
LCBmaXJzdFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNv
bXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVu
dCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVj
LCBtX2pzb24uZ2V0KCksICJxIiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlw
dG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwg
cHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JG
cm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3Rv
ckNSVEV4cG9uZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0
ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwg
c2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNB
Q29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9u
ZW50KTsKICAgICB9CiAKICAgICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAg
aWYgKCFnZXRKU0FycmF5RnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhl
clByaW1lSW5mb0pTQXJyYXkpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlV2l0aEFkZGl0aW9uYWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25l
bnQsIGZpcnN0UHJpbWVJbmZvLCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAg
ICAgfQpAQCAtNDg1LDI0ICs0ODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+
IEpTQ3J5cHRvSwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0Fy
cmF5LT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRz
OjpQcmltZUluZm8gaW5mbzsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUlu
Zm9KU0FycmF5LT5nZXRJbmRleChtX2V4ZWMsIGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3Qo
KSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJKV0sgXCJvdGhcIiBhcnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5w
cmltZUZhY3RvcikpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1l
IGZhY3RvciBmb3IgYSBwcmltZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJW
ZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9y
Q1JURXhwb25lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0
b3IgQ1JUIGV4cG9uZW50IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0Qmln
SW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5m
by5mYWN0b3JDUlRDb2VmZmljaWVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgZ2V0IGZhY3RvciBDUlQgY29lZmZpY2llbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0
aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUx
OSw3ICs1MTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAK
ICAgICBTdHJpbmcgandrS2V5VHlwZTsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAia3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1
aXJlZCBKV0sgXCJrdHlcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtNTQ5LDYgKzU0OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZv
ck9jdGV0U2VxdWVuY2UoRXgKIAogc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50
cyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMm
IGRhdGEsIEpTQzo6SlNPYmplY3QqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRv
SlNPTihleGVjLCByZXN1bHQsICJrdHkiLCAiUlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJl
c3VsdCwgIm4iLCBiYXNlNjRVUkxFbmNvZGUoZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pT
T04oZXhlYywgcmVzdWx0LCAiZSIsIGJhc2U2NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsK
QEAgLTU3MCw5ICs1NzMsOCBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRz
KEpTCiAgICAgaWYgKGRhdGEub3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBk
YXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZv
cygpLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBKU09iamVjdCoganNQcmltZUlu
Zm8gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0
aWMgdm9pZCBhZGRKV0tBbGdvcml0aG1Ub0pTT04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2Fn
ZXNUb0pTT04oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2Ug
dXNhZ2VzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAg
LTczOCwxMyArNzQxLDEzIEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNl
cmkKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAK
ICAgICBhZGRKV0tBbGdvcml0aG1Ub0pTT04oZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJl
c3VsdCwgImV4dCIsIGtleS5leHRyYWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihl
eGVjLCByZXN1bHQsIGtleS51c2FnZXNCaXRtYXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAogICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4o
KmtleURhdGEpKQpAQCAtNzU1LDcgKzc1OCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OnNlcmkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiS2V5IGRvZXNuJ3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKICAgICB9Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
IAogICAgIHJldHVybiBKU09OU3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgVk0m
IHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIW1f
Y29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTEgKzgwLDEyIEBA
IFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIGF1dG8mIHN0
YXRlID0gKmNvbnRleHQtPmV4ZWNTdGF0ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KSwgdm0sIHN0YXRlLCBtX2NvbnN0cnVjdG9yLmdldCgpLCBsb2NhbE5hbWUpOwor
ICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IGVsZW1lbnQpOwog
ICAgIGlmICghZWxlbWVudCkgewotICAgICAgICBhdXRvKiBleGNlcHRpb24gPSB2bS5leGNlcHRp
b24oKTsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChzaG91bGRDbGVh
ckV4Y2VwdGlvbiA9PSBTaG91bGRDbGVhckV4Y2VwdGlvbjo6Q2xlYXIpIHsKLSAgICAgICAgICAg
IHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBhdXRvIGNhdGNoU2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGNh
dGNoU2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24pOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTEwLDcgKzExMiw3IEBAIHN0
YXRpYyBSZWZQdHI8RWxlbWVudD4gY29uc3RydWN0Q3VzdG9tRWwKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25Db29raWUgY29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVt
ZW50RnVuY3Rpb25Db25zdHJ1Y3QoJmRvY3VtZW50LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhKTsKICAgICBKU1ZhbHVlIG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3QoJnN0YXRlLCBjb25zdHJ1
Y3RvciwgY29uc3RydWN0VHlwZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rpb24oY29va2llLCAmZG9jdW1lbnQpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVCghbmV3RWxlbWVudC5pc0Vt
cHR5KCkpOwpAQCAtMTY2LDcgKzE2OCw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNl
Ojp1cGdyYWRlRWwKICAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0
LCAqbV9pc29sYXRlZFdvcmxkKTsKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBDb25z
dHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CkBAIC0xODUsNyArMTg3LDcgQEAgdm9pZCBKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbAogCiAgICAgbV9jb25zdHJ1Y3Rpb25TdGFjay5y
ZW1vdmVMYXN0KCk7CiAKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBlbGVtZW50LnNldElzRmFp
bGVkQ3VzdG9tRWxlbWVudCgqdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVt
ZW50UmVnaXN0cnlDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBnZXRDdXN0b21FbGVtZW50
Q2FsbGJhYwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgY2FsbGJhY2sgPSBwcm90b3R5cGUuZ2V0KCZzdGF0ZSwgaWQpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoY2FsbGJhY2suaXNVbmRlZmluZWQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgSlND
dXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1N0cmluZygmc3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSBj
b25zdHJ1Y3RvclZhbHVlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSk7CkBAIC0xMTgsNyAr
MTE4LDcgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgIH0K
IAogICAgIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFwcm90b3R5cGVWYWx1ZS5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJD
dXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCIp
KTsKQEAgLTEyOSwyNSArMTI5LDI1IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6
OmRlZmluZSgKIAogICAgIGlmIChhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImNvbm5lY3RlZENhbGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNl
LT5zZXRDb25uZWN0ZWRDYWxsYmFjayhjb25uZWN0ZWRDYWxsYmFjayk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKGF1dG8qIGRpc2Nvbm5lY3Rl
ZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siKSkp
CiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nv
bm5lY3RlZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBpZiAoYXV0byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENh
bGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAiYWRvcHRlZENhbGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBZG9w
dGVkQ2FsbGJhY2soYWRvcHRlZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBn
ZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChhdHRyaWJ1dGVDaGFu
Z2VkQ2FsbGJhY2spIHsKICAgICAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxWZWN0
b3I8U3RyaW5nPj4oc3RhdGUsIGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgIm9ic2VydmVkQXR0cmlidXRlcyIpKSk7Ci0gICAgICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBpZiAodmFs
dWUpCiAgICAgICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBdHRyaWJ1dGVDaGFuZ2VkQ2Fs
bGJhY2soYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrLCAqdmFsdWUpOwpAQCAtMTcwLDcgKzE3MCw3
IEBAIHN0YXRpYyBKU1ZhbHVlIHdoZW5EZWZpbmVkUHJvbWlzZShFeGVjU3QKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgaWYgKCF2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lQW5kVGhyb3dJZk5lZWRlZChzdGF0
ZSwgbG9jYWxOYW1lKSkKQEAgLTE5MSwxMyArMTkxLDE1IEBAIHN0YXRpYyBKU1ZhbHVlIHdoZW5E
ZWZpbmVkUHJvbWlzZShFeGVjU3QKIAogSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6
d2hlbkRlZmluZWQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRShzdGF0ZS52bSgpKTsKKwogICAgIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKICAgICBhdXRvJiBwcm9taXNlRGVmZXJyZWQgPSAqSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QpOwogICAgIEpTVmFsdWUgcHJvbWlzZSA9
IHdoZW5EZWZpbmVkUHJvbWlzZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB3cmFwcGVkKCkpOwogCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7Ci0gICAgICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSw4ICsxMTksMTEgQEAgU3RyaW5nIHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQwogCiBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBTdHJpbmcgc3RyaW5n
ID0gdmFsdWUudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07CiAKQEAgLTE4NywxMCArMTkwLDEx
IEBAIGRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBv
cnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNo
ZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgp
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7CiAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+
KGV4Y2VwdGlvblZhbHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRp
b24gPSBleGVjLT5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RF
eGNlcHRpb24oKTsKICAgICAgICAgaWYgKCFleGNlcHRpb24pCiAgICAgICAgICAgICBleGNlcHRp
b24gPSBFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgRXhjZXB0
aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CiAgICAgfQpAQCAtMjAwLDE1ICsyMDQsMTggQEAgdm9p
ZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2Nr
KCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlv
bihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKICAgICBFcnJvckhhbmRsaW5nU2NvcGUg
ZXJyb3JTY29wZShleGVjLT52bSgpKTsKIAogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNh
bGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
biwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICBleGVjLT5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwog
CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkg
ewpAQCAtMjM5LDggKzI0Niw4IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXgKIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRo
YXQgbWF5IGJlIHRocm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgogICAgICAgICAv
LyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFraW5nIG5ldyBleGNl
cHRpb25zLgotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5j
bGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwpAQCAtMjU2LDggKzI2MywxMCBAQCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4
Y2VwdGlvbiogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIApA
QCAtMzQxLDcgKzM1MCw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
RXgKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICghZWMgfHwgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKCFlYyB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYykp
OwpAQCAtMzUyLDcgKzM2MSw3IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRl
KiBleGUKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICghZWMuY29kZSB8fCBleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoIWVjLmNvZGUgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oZXhlYywgZWMuY29kZSwgZWMubWVzc2FnZSkpOwpAQCAtMzYyLDE1ICszNzEsMTcgQEAgdm9p
ZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZQogCiBib29sIGhhc0l0ZXJhdG9y
TWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0
aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJl
IGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
IWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7CkBAIC01MDksNyArNTIwLDcgQEAgc3RhdGljIGlu
bGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIAogICAgIH0KIAogICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC01NTYsNyArNTY3LDcg
QEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJgogICAgIH0KIAogICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC02
NDIsMTEgKzY1MywxNCBAQCB1aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
CiAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKIGludDMyX3QgdG9JbnQz
MkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFz
SW50MzIoKTsKIAogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKIH0KQEAgLTY3MiwyNyArNjg2LDM2
IEBAIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwKIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwogdWludDMyX3QgdG9VSW50MzJF
bmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKIAogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwogfQogCiBpbnQ2NF90IHRvSW50NjRFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIpOwogfQogCiB1aW50NjRfdCB0b1VJ
bnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKIH0KQEAgLTg1NiwyMSArODc5LDIx
IEBAIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXgKIAogdm9pZCB0aHJv
d05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBTdHJpbmcg
bWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VT
dHJpbmcpKTsKIH0KIAogdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsK
LSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKICAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZB
TElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKIH0KIAogdm9pZCB0aHJvd1NlY3VyaXR5
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNz
YWdlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTA3LDcgKzUwNyw3IEBAIGlubGluZSBKU0M6
OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjoKICAgICB9CiAKICAgICBKU0M6OkpTVmFsdWUg
bGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChsZW5n
dGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgaW5saW5l
IEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIGxlbmd0aCA9
IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIHJldHVybiBvYmplY3Q7CkBAIC01NTksOCArNTU5LDExIEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKIHsKKyAg
ICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBpZiAoVU5M
SUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7
CkBAIC01NjksOCArNTcyLDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpT
VmFsdWUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rv
ci5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKQEAgLTY1NCwxNCArNjYw
LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFsdWUganNGcm96
ZW5BcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogeworICAgIEpT
Qzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsK
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpIHsKICAgICAgICAgbGlzdC5hcHBlbmQo
SlNWYWx1ZVRyYWl0czxUPjo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVj
dEFycmF5KGV4ZWMsIG51bGxwdHIsIGdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKGV4ZWMsIGFycmF5KTsKIH0KQEAgLTcwMiwzMiAr
NzExLDQwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVQKIHRlbXBs
YXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz4gewogICAgIHN0YXRpYyBpbmxp
bmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpz
VmFsdWUsIFN0cmluZyYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0g
ICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29w
ZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1
ZVRyYWl0czx1bnNpZ25lZD4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIHVuc2lnbmVkJiBpbmRl
eGVkVmFsdWUpCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVk
VmFsdWUgPSBqc1ZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhh
ZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0K
IH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGZsb2F0PiB7CiAgICAg
c3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6
OkpTVmFsdWUganNWYWx1ZSwgZmxvYXQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpT
Qzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9GbG9hdCgmZXhl
Yyk7Ci0gICAgICAgIHJldHVybiAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJu
ICFzY29wZS5leGNlcHRpb24oKTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRp
dmVWYWx1ZVRyYWl0czxkb3VibGU+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBkb3VibGUmIGlu
ZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4
ZWRWYWx1ZSA9IGpzVmFsdWUudG9OdW1iZXIoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMu
aGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAg
fQogfTsKIApAQCAtNzY0LDExICs3ODEsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9y
PFQ+IHRvTmF0aXZlQQogICAgIH0KIAogICAgIFZlY3RvcjxUPiByZXN1bHQ7Ci0gICAgZm9yRWFj
aEluSXRlcmFibGUoJmV4ZWMsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICBmb3JFYWNoSW5JdGVyYWJs
ZSgmZXhlYywgdmFsdWUsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIFQgY29udmVydGVkVmFsdWU7Ci0gICAgICAgIGlm
ICghTmF0aXZlVmFsdWVUcmFpdHM8VD46Om5hdGl2ZVZhbHVlKCpzdGF0ZSwganNWYWx1ZSwgY29u
dmVydGVkVmFsdWUpKQorICAgICAgICBib29sIHN1Y2Nlc3MgPSBOYXRpdmVWYWx1ZVRyYWl0czxU
Pjo6bmF0aXZlVmFsdWUoKnN0YXRlLCBqc1ZhbHVlLCBjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCgh
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7CiAgICAgfSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzUsMTEgKzc1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZVRoaXNUeXAKIHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQo
ZXhlY1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRl
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IGF1dG8gaW50ZXJmYWNlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0
U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1
dG8gZnVuY3Rpb25OYW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJp
bmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY3JlYXRlVHlwZUVycm9yKGV4ZWNTdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKSk7
CiB9CiAKQEAgLTg3LDExICs4OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
a2VHZXR0ZXJUCiB7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0
ZS0+YXJndW1lbnRDb3VudCgpID09IDIpOworICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGlu
dGVyZmFjZU5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhl
eGVjU3RhdGUpOwotICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGF0dHJp
YnV0ZU5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVj
U3RhdGUpOwotICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZh
Y2VOYW1lLnV0ZjgoKS5kYXRhKCksIGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdFRhc2suY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3
ICs0OSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBSZWY8SlNH
bG9iYWxPYmplY3RDYWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9n
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTY0LDcgKzY2
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNr
KGV4ZWMsIG1fdGFzayk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdGFzay0+cnVuKGV4
ZWMpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVl
IGl0ZXJhdG9yRm9yRWFjaChKU0M6CiAgICAgICAgIGFwcGVuZEZvckVhY2hBcmd1bWVudHMoc3Rh
dGUsIHdyYXBwZXItPmdsb2JhbE9iamVjdCgpLCBhcmd1bWVudHMsIHZhbHVlKTsKICAgICAgICAg
YXJndW1lbnRzLmFwcGVuZCh3cmFwcGVyKTsKICAgICAgICAgSlNDOjpjYWxsKCZzdGF0ZSwgY2Fs
bGJhY2ssIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpOwotICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIEpTQzo6
SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCwxMSArMTAwLDE0IEBAIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0
aW9uQ28KIAogdm9pZCByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlRGVm
ZXJyZWQmIHByb21pc2VEZWZlcnJlZCkKIHsKLSAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSlNWYWx1ZSBlcnJvciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwot
ICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgSlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4
Y2VwdGlvbigpLT52YWx1ZSgpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBE
ZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QsICZwcm9taXNlRGVm
ZXJyZWQpLT5yZWplY3QoZXJyb3IpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Qcm9taXNlLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwx
NSBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAKIGlubGluZSBK
U0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgcHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1Byb21pc2VEZWZlcnJlZCopKQogeworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVk
JiBwcm9taXNlRGVmZXJyZWQgPSAqSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCk7CiAgICAgcHJvbWlzZUZ1bmN0aW9uKCZzdGF0ZSwgJnByb21pc2VE
ZWZlcnJlZCk7CiAKICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBn
bG9iYWxPYmplY3QsIHByb21pc2VEZWZlcnJlZCk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLnByb21pc2UoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJp
bmdNYXBDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTQgQEAgYm9vbCBK
U0RPTVN0cmluZ01hcDo6ZGVsZXRlUHJvcGVydHlCeUluZAogCiBib29sIEpTRE9NU3RyaW5nTWFw
OjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk3LDEzICsxOTcsMTUgQEAgcHVibGljOgogICAgIHZvaWQgY2FsbCgpCiAgICAgewogICAgICAg
ICBSZWY8SlNET01XaW5kb3dNaWNyb3Rhc2tDYWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7
Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAg
ICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAKICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7
CiAKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDkgQEAgYm9v
bCBKU0RPTVdpbmRvdzo6cHJldmVudEV4dGVuc2lvbnMoSlNPYgogCiB2b2lkIEpTRE9NV2luZG93
OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJy
ZWFraW5nIG9sZCB3aWRnZXRzLCBtYWtlICJ2YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwg
ZnJhbWUgY3JlYXRlCiAgICAgLy8gYSBwcm9wZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQg
b2YgcGVyZm9ybWluZyBhIG5hdmlnYXRpb24gKDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCkBA
IC0zODIsNyArMzg1LDcgQEAgdm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRl
JgogI2VuZGlmCiAKICAgICBTdHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoTG9jYXRpb24qIGxvY2F0aW9uID0gd3JhcHBlZCgpLmxvY2F0aW9uKCkpCkBAIC00MDYs
MTUgKzQwOSwxOCBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0CiAK
IEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5l
ZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0gc3Rh
dGUuYXJndW1lbnQoMSk7CiAgICAgQXRvbWljU3RyaW5nIHRhcmdldCA9IHRhcmdldFZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkgPyBBdG9taWNTdHJpbmcoIl9ibGFuayIsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpIDogdGFyZ2V0VmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dG9B
dG9taWNTdHJpbmcoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RE9NV2lu
ZG93PiBvcGVuZWRXaW5kb3cgPSB3cmFwcGVkKCkub3Blbih1cmxTdHJpbmcsIHRhcmdldCwgd2lu
ZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRv
dygmc3RhdGUpKTsKQEAgLTQ3MCwxMCArNDc2LDEwIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNo
b3dNb2RhbERpYWxvZyhFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3Ry
aW5nIHVybFN0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFN0cmluZyBkaWFsb2dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRGlhbG9nSGFu
ZGxlciBoYW5kbGVyKHN0YXRlKTsKQEAgLTUxMSwxNiArNTE3LDE2IEBAIHN0YXRpYyBKU1ZhbHVl
IGhhbmRsZVBvc3RNZXNzYWdlKERPTVdpbmQKICAgICAgICAgfQogICAgICAgICBmaWxsTWVzc2Fn
ZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQodHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwg
bWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMpOwogICAgIH0KLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAmbWVz
c2FnZVBvcnRzLCAmYXJyYXlCdWZmZXJzKTsKIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvVVNWU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQodGFyZ2V0T3JpZ2luQXJnSW5kZXgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU0NSw3ICs1NTEs
NyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAKICAgICBDb250
ZW50U2VjdXJpdHlQb2xpY3kqIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1
bWVudCgpID8gd3JhcHBlZCgpLmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDog
bnVsbHB0cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBT
Y2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBj
b250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIGlmICghYWN0aW9uKQpAQCAtNTcwLDcgKzU3Niw3IEBAIEpTVmFsdWUg
SlNET01XaW5kb3c6OnNldEludGVydmFsKEV4ZWNTdGEKIAogICAgIENvbnRlbnRTZWN1cml0eVBv
bGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFw
cGVkKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlv
bjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0
eVBvbGljeSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IGludCBkZWxheSA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZl
eGVjLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAg
IGRvdWJsZSBzdGFydFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcigmZXhl
YykpOwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgZG91YmxlIGVuZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1
bWVudCgxKS50b051bWJlcigmZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKQEAgLTg3LDcgKzg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogICAgIGlmICh2YWx1ZUFyZ3VtZW50LmlzQ2VsbCgpICYmIHZhbHVlQXJndW1lbnQuYXND
ZWxsKCktPmluaGVyaXRzKHN0ZDo6cmVtb3ZlX3BvaW50ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBl
OjppbmZvKCkpKSB7CiAKICAgICAgICAgQXJyYXlCdWZmZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVy
KHZhbHVlQXJndW1lbnQpOwotICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChV
TkxJS0VMWSghZGF0YSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2
aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMzIgKzQ1LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2
aWNlTW90aW9uRGF0YTo6QWNjZWxlcmEKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVu
IHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBK
U09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgIEpTVmFsdWUgeFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgIngiKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGJvb2wgY2FuUHJvdmlkZVggPSAheFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAg
ICAgZG91YmxlIHggPSB4VmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVlIHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ5IikpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVZID0gIXlWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSB6
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAieiIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBj
YW5Qcm92aWRlWiA9ICF6VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeiA9
IHpWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGlmICghY2FuUHJvdmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92
aWRlWikKQEAgLTg0LDMyICs4NywzNSBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6
OlJvdGF0aW9uCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVz
dCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIGFs
cGhhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiYWxwaGEiKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGJvb2wgY2FuUHJvdmlkZUFscGhhID0gIWFscGhhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsK
ICAgICBkb3VibGUgYWxwaGEgPSBhbHBoYVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIp
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92
aWRlQmV0YSA9ICFiZXRhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYmV0
YSA9IGJldGFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgZ2FtbWFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJnYW1tYSIpKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2Ft
bWFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBpZiAoIWNhblByb3ZpZGVBbHBoYSAmJiAhY2FuUHJvdmlkZUJldGEgJiYgIWNhblBy
b3ZpZGVHYW1tYSkKQEAgLTE3MCw2ICsxNzYsOSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZl
bnQ6OmludGVydmFsKEV4CiAKIEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmlj
ZU1vdGlvbkV2ZW50KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25z
dCBTdHJpbmcgdHlwZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7CiAgICAgYm9vbCBidWJibGVzID0gc3RhdGUuYXJndW1lbnQoMSkudG9Cb29sZWFu
KCZzdGF0ZSk7CiAgICAgYm9vbCBjYW5jZWxhYmxlID0gc3RhdGUuYXJndW1lbnQoMikudG9Cb29s
ZWFuKCZzdGF0ZSk7CkBAIC0xNzcsMTUgKzE4NiwxNSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9u
RXZlbnQ6OmluaXREZXZpY2VNCiAgICAgLy8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBu
dWxsIG9yIHVuZGVmaW5lZCwgbWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhl
cndpc2UsIHVzZSB0aGUgc3RhbmRhcmQgSmF2YVNjcmlwdCBjb252ZXJzaW9uLgogICAgIFJlZlB0
cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2Nl
bGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVudCgzKSwgc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25E
YXRhOjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNj
ZWxlcmF0aW9uQXJndW1lbnQoc3RhdGUuYXJndW1lbnQoNCksIHN0YXRlKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9u
RGF0YTo6Um90YXRpb25SYXRlPiByb3RhdGlvblJhdGUgPSByZWFkUm90YXRpb25SYXRlQXJndW1l
bnQoc3RhdGUuYXJndW1lbnQoNSksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBib29sIGludGVydmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJn
dW1lbnQoNikuaXNVbmRlZmluZWRPck51bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NiArNzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVy
dHlSZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUmIGZpbmFsUmVzdWx0KSBjb25zdAogeworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
QVNTRVJUKGlzVmFsaWQoKSk7CiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmll
cjo6ZnJvbVN0cmluZyhtX2V4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBwcm9wZXJ0eUZv
dW5kID0gbV9pbml0aWFsaXplck9iamVjdC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywg
aWRlbnRpZmllciwgWyZdIChib29sIHByb3BlcnR5Rm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkg
LT4gYm9vbCB7CkBAIC04Niw3ICs4OCw3IEBAIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1
bHQgSlNEaWN0aW8KICAgICAgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywg
aWRlbnRpZmllcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwotICAgIGlmIChtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CiAgICAgcmV0dXJuIHByb3BlcnR5Rm91
bmQgPyBQcm9wZXJ0eUZvdW5kIDogTm9Qcm9wZXJ0eUZvdW5kOwogfQpAQCAtMTUxLDE3ICsxNTMs
MjAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogdm9pZCBKU0Rp
Y3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZl
Y3RvcjxTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1
ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
SlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW1WYWx1
ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTIyMSw2ICsyMjYsOSBA
QCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlv
bmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSGFzaFNl
dDxBdG9taWNTdHJpbmc+JiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgcmVzdWx0LmNsZWFyKCk7CiAKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKQEAgLTIyOCwxMiArMjM2LDEyIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFs
dWUoRXhlY1N0YXQKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9i
amVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQu
YWRkKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTI5
NywxNyArMzA1LDIwIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGUK
IHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4mIHJlc3VsdCkKIHsKICAgICBBU1NF
UlQoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgYXV0byBzdHJlYW0gPSBKU01lZGlhU3RyZWFtOjp0b1dyYXBwZWQoaXRlbVZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw5IEBAIGlubGluZSBib29sIEpTRGljdGlvbmFyeTo6
Z2V0KGNvbnN0IGNoYXIKIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZXN1bHQ+CiBK
U0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVy
dHlBbmRSZXN1bHQoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBUKiBjb250ZXh0LCB2b2lkICgq
c2V0dGVyKShUKiBjb250ZXh0LCBjb25zdCBSZXN1bHQmKSkgY29uc3QKIHsKKyAgICBKU0M6OlZN
JiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBKU0M6OkpTVmFsdWUgdmFsdWU7CiAgICAgR2V0UHJvcGVydHlSZXN1bHQg
Z2V0UHJvcGVydHlSZXN1bHQgPSB0cnlHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
ICAgICBzd2l0Y2ggKGdldFByb3BlcnR5UmVzdWx0KSB7CkBAIC0yMTIsNyArMjE1LDcgQEAgSlNE
aWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBSZXN1bHQgcmVz
dWx0OwogICAgICAgICBjb252ZXJ0VmFsdWUobV9leGVjLCB2YWx1ZSwgcmVzdWx0KTsKIAotICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CiAK
ICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MywxNiArMTUzLDE2IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NT
Q2FudmFzQ29udGV4dCgKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwg
NCkpCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKICAgICBhdXRvIGNvbnRleHRJZCA9IHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvIG5hbWUg
PSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byB3
aWR0aCA9IGNvbnZlcnQ8aW50MzJfdD4oc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxpbnQzMl90PihzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMyksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRv
KiBjb250ZXh0ID0gd3JhcHBlZCgpLmdldENTU0NhbnZhc0NvbnRleHQoV1RGTW92ZShjb250ZXh0
SWQpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAko
cmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksMTIgQEAgdm9pZCBKU0V2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB8fCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnZtKCkpOworICAgIFZNJiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKyAgICAvLyBTZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3Jn
LyNkaXNwYXRjaGluZy1ldmVudHMgc3BlYyBvbiBjYWxsaW5nIGhhbmRsZUV2ZW50LgorICAgIC8v
ICJJZiB0aGlzIHRocm93cyBhbiBleGNlcHRpb24sIHJlcG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQg
c2hvdWxkIG5vdCBwcm9wYWdhdGUgdGhlCisgICAgLy8gZXhjZXB0aW9uLgogCiAgICAgSlNPYmpl
Y3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
OwogICAgIGlmICghanNGdW5jdGlvbikKQEAgLTEwOSw2ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgIC8vIElmIGpzRnVuY3Rpb24gaXMgbm90
IGFjdHVhbGx5IGEgZnVuY3Rpb24sIHNlZSBpZiBpdCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3Rl
bmVyIGludGVyZmFjZSBhbmQgdXNlIHRoYXQKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6
Ok5vbmUpIHsKICAgICAgICAgaGFuZGxlRXZlbnRGdW5jdGlvbiA9IGpzRnVuY3Rpb24tPmdldChl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgRXhjZXB0
aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CisKKyAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRF
eGNlcHRpb25JbkV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAg
Y2FsbFR5cGUgPSBnZXRDYWxsRGF0YShoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAg
ICAgfQogCkBAIC0xMjEsNyArMTM0LDYgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdAogICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3Vy
cmVudEV2ZW50KCk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50
KTsKIAotICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZNRW50
cnlTY29wZSBlbnRyeVNjb3BlKHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+Z2xv
YmFsT2JqZWN0KCkgOiBnbG9iYWxPYmplY3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRG
dW5jdGlvbkNhbGwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsK
QEAgLTEzOCw3ICsxNTAsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2Ny
aXB0CiAKICAgICAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCkpIHsKICAgICAgICAgICAgIGF1dG8gc2NyaXB0Q29udHJvbGxlciA9IGRvd25jYXN0
PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0g
ICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlv
bigpKSk7CisgICAgICAgICAgICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoc2Nv
cGUuZXhjZXB0aW9uKCkgJiYgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4
Y2VwdGlvbigpKSk7CiAgICAgICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8
fCBzY3JpcHRDb250cm9sbGVyLT5pc1Rlcm1pbmF0aW5nRXhlY3V0aW9uKCkpCiAgICAgICAgICAg
ICAgICAgc2NyaXB0Q29udHJvbGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwog
ICAgIEpTT2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFy
dHNMZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKGJsb2JQYXJ0cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihleGVjLCBzY29wZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUi
LCBudWxscHRyLCAiRE9NU3RyaW5nIik7CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmcudG9X
VEZTdHJpbmcoJmV4ZWMpLnJlcGxhY2UoJy8nLCAnOicpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgbm9ybWFs
aXplZFR5cGU7CkBAIC04Nyw3ICs4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc3RydWN0SlMKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHku
CiAgICAgICAgIFN0cmluZyB0eXBlOwogICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5
cGUpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgbm9ybWFsaXplZFR5cGUgPSBCbG9iOjpub3Jt
YWxpemVkQ29udGVudFR5cGUodHlwZSk7CkBAIC05NSw3ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgLy8gT25seSB0cnkgdG8gcGFyc2Ug
dGhlIGxhc3RNb2RpZmllZCBkYXRlIGlmIHRoZXJlIHdhcyBub3QgYW4gaW52YWxpZCB0eXBlIGFy
Z3VtZW50LgogICAgICAgICBpZiAodHlwZS5pc0VtcHR5KCkgfHwgICFub3JtYWxpemVkVHlwZS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBs
YXN0TW9kaWZpZWQpOwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMDcsNyArMTA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytp
KSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAg
ICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0Fy
cmF5QnVmZmVyKGl0ZW0pKQpAQCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9i
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dU
RlN0cmluZygmZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJs
b2JCdWlsZGVyLmFwcGVuZChzdHJpbmcsIEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2Vv
bG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NiArNzEsOSBAQCBzdGF0aWMgdm9pZCBzZXRNYXhpbXVtQWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0
YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gQ3JlYXRl
IGRlZmF1bHQgb3B0aW9ucy4KICAgICBhdXRvIG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNy
ZWF0ZSgpOwogCkBAIC04Miw3ICs4NSw3IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25z
PiBjcmVhdGVQb3MKIAogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3
YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmpl
Y3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
X1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUg
ZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICBKU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeShleGVjLCBvYmplY3QpOwpAQCAtOTksMTkgKzEwMiwyMiBAQCBz
dGF0aWMgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9s
b2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3Np
dGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8g
cG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25D
YWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRp
b25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1
bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENh
bGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygm
c3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTEyMSwxOSAr
MTI3LDIyIEBAIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNW
YWx1ZSBKU0dlb2xvY2F0aW9uOjp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICAvLyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25h
bClQb3NpdGlvbkVycm9yQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAg
IGF1dG8gcG9zaXRpb25DYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9z
aXRpb25DYWxsYmFjaz4oJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQo
cG9zaXRpb25DYWxsYmFjayk7CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNy
ZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5l
ZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBhdXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0
aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxl
Y3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsOSBAQCBzdGF0aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAv
LyBIVE1MQWxsQ29sbGVjdGlvbnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJv
dGggZ2V0IGFuZCBjYWxsLgogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2Fs
bEhUTUxBbGxDb2xsZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCkBAIC02NSw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID09IDEpIHsKICAgICAgICAgLy8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0
Yy4KICAgICAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4
ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKE9wdGlvbmFsPHVp
bnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKnN0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2Jq
ZWN0KCksIGNvbGxlY3Rpb24uaXRlbShpbmRleC52YWx1ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUg
c2Vjb25kIGFyZywgaWYgc2V0LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAg
IFN0cmluZyBzdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgo
KmV4ZWMtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKICAgICAgICAg
aWYgKGF1dG8qIGl0ZW0gPSBjb2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGlu
ZGV4LnZhbHVlKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIEVOQUJMRShXRUJHTCkKIHN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhl
Y1N0YXRlJiBzdGF0ZSwgUmVmUHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1
bWVudCgxKTsKICAgICBpZiAoaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCiAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0g
aW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVj
dCk7CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRy
czsKQEAgLTgzLDcgKzg2LDcgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250
ZXh0KAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RU
eXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwg
YXR0cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICB9CiAjZW5kaWYKQEAgLTExMCwxNCArMTEzLDE0IEBAIEpTVmFsdWUgSlNIVE1M
Q2FudmFzRWxlbWVudDo6cHJvYmFibHlTdXAKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52
YXMgPSB3cmFwcGVkKCk7CiAgICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0
dHJpYnV0ZXM+IGF0dHJzOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0Vs
ZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmli
dXRlcyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGlu
Z0VsZW1lbnQoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01T
dHJ1Y3R1cmU8SlNIVE1MRWxlbWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRv
KiBuZXdFbGVtZW50U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoJmV4ZWMsIG5ld1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1M
RWxlbWVudDo6Y3JlYXRlKGVsZW1lbnRJbnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAt
OTgsMTIgKzk4LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMK
ICAgICBBU1NFUlQoZWxlbWVudFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFs
dWUgbmV3UHJvdG90eXBlID0gbmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFz
T2JqZWN0KGVsZW1lbnRXcmFwcGVyVmFsdWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUo
ZWxlbWVudFdyYXBwZXJPYmplY3QsICZleGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxk
VGhyb3dJZkNhbnRTZXQgKi8pOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRl
TGFzdEVsZW1lbnRJbkNvbnN0cnVjdGlvblN0YWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDE4ICs2MywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4
ZWNTdGF0ZSYgCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9y
eVN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUu
CiAgICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdD
b3VudCA+IDIpIHsKICAgICAgICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBA
IC05NywxOCArOTcsMTggQEAgSlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3Rh
dAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMCksIDAsIDApOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIC8vIEZJWE1FOiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0
cmluZyB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAy
KSB7CiAgICAgICAgIHVybCA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0
YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIEpTVmFsdWUg
SlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUKICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgU3RyaW5nIG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3Rh
dGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIEpTVmFsdWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CkBA
IC02NiwxNyArNjYsMTcgQEAgSlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9y
ZQogICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBv
cHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJr
ZXlQYXRoIikpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CiAgICAgICAgICAgICBrZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5
UGF0aFZhbHVlKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvSW5jcmVtZW50
ID0gb3B0aW9uc1ZhbHVlLmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiYXV0b0luY3JlbWVudCIpKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JGcm9u
dGVuZEhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSA8
cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KLSNpbmNsdWRl
IDxydW50aW1lL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDYgKzk4LDkgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omlu
aXRpYWxpegogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTExMiw5ICsxMTUsOSBAQCBKU09iamVjdCogSlNMYXp5
RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgICAgIGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1bmN0aW9u
TmFtZSksCiAgICAgICAgIG1fc291cmNlVVJMLCBtX3NvdXJjZVBvc2l0aW9uLCBvdmVycmlkZUxp
bmVOdW1iZXIpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRDdXJyZW50RXhjZXB0
aW9uKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAg
LTEyMywxNCArMTI2LDEzIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFs
aXoKICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVyKCkpIHsK
ICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0IHdyYXBw
ZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAgICAgICAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
cGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAgICAgICAg
ICAgIHNldFdyYXBwZXIoZXhlYy0+dm0oKSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsICptX29yaWdpbmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIodm0sIGFzT2Jq
ZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRoZSBzY29w
ZQogICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2VlIEpTSFRN
TEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVuY3Rpb24t
PnNldFNjb3BlKGV4ZWMtPnZtKCksIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5wdXNoRXZl
bnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7CisgICAg
ICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUodm0sIGpzQ2FzdDxKU05vZGUqPih3cmFw
cGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5z
Y29wZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHJl
dmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTEgKzEwNywxNCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNW
YWx1ZSBpbml0aWF0b3IsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRp
b24pCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAKICAgICAgICAgSlNNYWlu
VGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKICAgICAgICAgSlNDOjpKU1ZhbHVl
IHJldHVyblZhbHVlID0gSlNDOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgbW9kdWxlS2V5
LCBpbml0aWF0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAg
ICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsKLSAgICAg
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUu
ZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWU7CkBAIC0xMzEsOCArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAgICB+SlNN
YWluVGhyZWFkRXhlY1N0YXRlKCkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc19tYWlu
VGhyZWFkU3RhdGUtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJU
KCFzX21haW5UaHJlYWRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIGJvb2wgZGlkRXhpdEph
dmFTY3JpcHQgPSBzX21haW5UaHJlYWRTdGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsOSBA
QCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAKIHN0YXRpYyBKU0M6
OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNFdmVudCwg
SlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgU3RyaW5n
JiB0eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0
YXRlKTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRvQm9vbGVh
bigmc3RhdGUpOwogICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDIpLnRv
Qm9vbGVhbigmc3RhdGUpOwpAQCAtMTE2LDE2ICsxMTksMTYgQEAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZQogICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPE1lc3NhZ2VQb3J0QXJyYXk+KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9IHN0ZDo6
bWFrZV91bmlxdWU8QXJyYXlCdWZmZXJBcnJheT4oKTsKICAgICAgICAgZmlsbE1lc3NhZ2VQb3J0
QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJyYXlCdWZm
ZXJzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcoc3RhdGUudm0o
KSwgc3RhdGUuYXJndW1lbnQoMykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJnKHZtLCBzdGF0ZS5hcmd1bWVudCgzKSk7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBNZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+d3JhcHBl
ZCgpOwogICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxlQXJnLCBj
YW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBzb3VyY2VB
cmcsIFdURk1vdmUobWVzc2FnZVBvcnRzKSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNldChzdGF0
ZS52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+bV9kYXRh
LnNldCh2bSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQ
b3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDEyICs3MywxMiBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhlY1N0YXRl
CiAgICAgLy8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBzcGVjIDQu
MS4xMy4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
b0pTU2VxdWVuY2Uoc3RhdGUsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRpb24gb2Yg
bm9uLW51bGwgb2JqZWN0cywgcGVyIEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXJyYXlC
dWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJh
eShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJBcnJheSk7
CiAgICAgICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJheUJ1ZmZl
ckFycmF5KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNV
bmRlZmluZWQoKTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVu
dEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJT
ZXR0aW5nczo6c2V0RGVjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUsIHZh
bHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IERlY2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9uUG9pbnQ+
KG5hdGl2ZVZhbHVlKSB9OwpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgaW5saW5lIERlY2lzaW9u
IHRvRGVjaXNpb24oRXhlY1N0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3RhdGUs
IHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBEZWNp
c2lvbjo6QWxsb3c7CiAKICAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0PERlY2lz
aW9uPihuYXRpdmVWYWx1ZSkgfTsKQEAgLTExOSw4ICsxMTksMTEgQEAgSlNWYWx1ZSBKU01vY2tD
b250ZW50RmlsdGVyU2V0dGluZ3M6OmRlYwogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0
aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0ZSwgdmFs
dWUpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdyYXBwZWQoKS5zZXRE
ZWNpc2lvbihkZWNpc2lvbik7CkBAIC0xMzMsOCArMTM2LDExIEBAIEpTVmFsdWUgSlNNb2NrQ29u
dGVudEZpbHRlclNldHRpbmdzOjp1bmIKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVyU2V0dGlu
Z3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0RGVjaXNp
b24geyB0b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgd3JhcHBlZCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5ibG9ja1Jl
cXVlc3REZWNpc2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVG
aWx0ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDExICs0OSwxMiBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSog
CiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4
ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRv
SlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKLSAgICBpZiAoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCiAgICAgTmFrZWRQdHI8
RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHZhbHVlID0gbV9kYXRh
LT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBlOjpGdW5j
dGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0Tm9kZSIp
LCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCBy
ZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAgICAgICAg
IC8vIFJldGhyb3cgZXhjZXB0aW9uLgogICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2Nv
cGUsIHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTYyLDcgKzYzLDcgQEAgdWludDE2X3QgSlNOb2Rl
RmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIH0KIAogICAgIHVpbnQxNl90IHJlc3VsdCA9
IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAg
ICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
T3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApAQCAtMzUsNiArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHRv
Tm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKIAogICAgIFZl
Y3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+IHJlc3Vs
dDsKQEAgLTQ2LDcgKzUwLDcgQEAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJl
ZjxObwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFwcGVkKCkp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChzdHJp
bmcpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRy
YW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEpTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAogICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5hcmd1bWVu
dCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBhc3NlbWJsZSB0aGUgbGlzdCBv
ZiBTUUwgYXJndW1lbnRzCkBAIC02MywxNSArNjYsMTUgQEAgSlNWYWx1ZSBKU1NRTFRyYW5zYWN0
aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBsZW5ndGhW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7
Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3RhdGUpOwot
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtODEsNyArODQs
NyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0
cmluZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVuZCh2YWx1
ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVj
aWZpZWRVCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVkIHNob3J0
IHVuaXRUeXBlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFn
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTYgKzc5
LDE5IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAogdm9pZCBK
U1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNTdG9yYWdlKj4ob2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICB1
bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKGVjKTsKICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIHByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmtleShpLCBlYykpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAg
CkBAIC05Nyw2ICsxMDAsOSBAQCB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iCiAKIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYsIGJv
b2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIE9ubHkgcGVyZm9ybSB0aGUg
Y3VzdG9tIHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9wZXJ0eSBi
eSB0aGlzIG5hbWUuCiAgICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQgdXAgY2Fs
bGluZyBjYW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRvIGNoZWNr
CiAgICAgLy8gdGhlIG5hdGl2ZSBwcm9wZXJ0eSBzbG90cyBtYW51YWxseS4KQEAgLTExMCw3ICsx
MTYsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIC8vIFRoZSByZXR1
cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFuZGxlIHRo
ZSBwdXQgb3BlcmF0aW9uICh3aGljaAogICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0aGUgY2Fs
bGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGluZGljYXRl
IHdoZXRoZXIKICAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5IGNvbXBs
ZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcAko
cmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMSBAQCB2b2lkIEpTVGV4
dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiB2b2lkIEpTVGV4dFRyYWNrOjpzZXRMYW5n
dWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTVmlkZW9UcmFj
azo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUp
LT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBl
ZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lkIEpTVmlk
ZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0TGFu
Z3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDEwICsxMDUsMTAgQEAgSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6
OmdldEluZAogCiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IHdyYXBwZWQo
KTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQz
MigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
dW5zaWduZWQgaW5kZXggPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJmV4ZWMp
OwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRJbmRleGVkUGFyYW1ldGVyKHBuYW1lLCBpbmRleCk7CiAg
ICAgcmV0dXJuIHRvSlMoJmV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIEpTVmFsdWUgZ2V0T2Jq
ZWN0UGFyYW1ldGVyKEpTV2ViRwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVk
IHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8g
aW5mbzsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKQEAgLTMzNSw3ICszMzUsNyBAQCBKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgCiAgICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcg
bmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVl
KCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsK
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwpAQCAt
MzU3LDEzICszNTcsMTMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7
CiAgICAgaWYgKGVjKSB7CkBAIC0zODQsNyArMzg0LDcgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQg
cG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAg
LTQwOCw3ICs0MDgsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
CiAgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0lu
dDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dy
YW0sIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00MzcsNyArNDM3LDcgQEAgSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2Vi
R0xTaGFkZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMp
OwogICAgIGlmIChlYykgewpAQCAtNDk2LDYgKzQ5Niw5IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXQKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIApAQCAtNTA4LDcgKzUxMSw3IEBAIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0MKICAgICAKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
ewogICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdmVjdG9y
W2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigmc3RhdGUpKTsKICAgICB9CkBAIC01NTYs
MTEgKzU1OSwxMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAg
ICAgfSBlbHNlCiAgICAgICAgIGluZGV4ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9J
bnQzMigmc3RhdGUpOwogICAgIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9h
dDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
QEAgLTcwNyw3ICs3MTAsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJp
eChECiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICAK
ICAgICBib29sIHRyYW5zcG9zZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVh
bigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXko
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0
bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTQgQEAgZW51
bSBjbGFzcyBDcnlwdG9LZXlGb3JtYXQgewogCiBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRo
bT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgYWxn
b3JpdGhtSWRlbnRpZmllcjsKLSAgICBpZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVy
KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3Vj
Y2VzcyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmll
cigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGF1dG8gcmVzdWx0ID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlm
aWVyKTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTgxLDcgKzg0LDcgQEAgc3RhdGljIGJvb2wgY3J5
cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5Rm9ybWF0OjpSYXc7CkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGJvb2wgY3J5
cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJy
YXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJyYXktPmdl
dEluZGV4KCZzdGF0ZSwgaSk7CiAgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVsZW1lbnQu
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0gImVuY3J5
cHQiKQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsKQEAgLTE0
NSwxNiArMTQ4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5cHQoRXgK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAg
aWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRl
UGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpT
Q3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlm
ICgha2V5KQpAQCAtMTY3LDEwICsxNjgsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0
bzo6ZW5jcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAg
ICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1
ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICAKICAgICBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpKTsKQEAgLTIwMSwxNiArMjAyLDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAg
ICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRlLCBhbGdv
cml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
ICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBh
cmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJl
ZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjIzLDEwICsyMjIsMTAgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0
b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNW
YWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJy
ZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRX
cmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxP
YmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTI1NiwxNiArMjU1LDE0IEBAIEpTVmFsdWUg
SlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MKICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3Bl
LmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24oJnN0YXRl
LCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjc4LDEwICsyNzUsMTAg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9
IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVm
ZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTMxMSwxNiArMzA4LDE0IEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGUKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3Jp
dGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclZlcmlm
eSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMp
OworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBl
ZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0zMzMsMTYg
KzMyOCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhlCiAgICAg
fQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFjcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgy
KSwgc2lnbmF0dXJlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpOworICAgIEFTU0VSVChzY29w
ZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQq
IHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9i
YWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVy
cmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJl
ZCk7CkBAIC0zNzIsMjIgKzM2NywyMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpk
aWdlc3QoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gYWxnb3Jp
dGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0
aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZp
ZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykg
ewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29w
ZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRh
dGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFw
cGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJv
bWlzZURlZmVycmVkKTsKQEAgLTQxNywzMCArNDEwLDI4IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0
bGVDcnlwdG86OmdlbmVyYXRlS2UKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAg
YXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigp
IHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KCZzdGF0ZSwgYWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFw
YXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBi
b29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+
PSAyKSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSku
dG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9
IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAgIGlmICgh
Y3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpLCBrZXlV
c2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMiksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpKTsKQEAgLTQ4NCw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBpbXBvcnRL
ZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9LZXlTZXJp
YWxpemF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDk3LDExICs0ODgs
MTEgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogCiAgICAgT3B0
aW9uYWw8Q3J5cHRvQWxnb3JpdGhtUGFpcj4gcmVjb25jaWxlZFJlc3VsdCA9IGtleVNlcmlhbGl6
YXRpb24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdvcml0aG0uZ2V0KCksIHBhcmFtZXRlcnMuZ2V0
KCkpOwogICAgIGlmICghcmVjb25jaWxlZFJlc3VsdCkgewotICAgICAgICBpZiAoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdvcml0aG0g
c3BlY2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQgdG8gaW1w
b3J0S2V5IGFzIGFyZ3VtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhbGdvcml0aG0gPSByZWNvbmNpbGVkUmVzdWx0LT5h
bGdvcml0aG07CkBAIC01MTMsMTUgKzUwNCwxNSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhl
Y1N0YXRlJiBzdGF0ZSwgCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5U2VyaWFs
aXphdGlvbi0+cmVjb25jaWxlRXh0cmFjdGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVVc2FnZXMo
a2V5VXNhZ2VzKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBrZXlE
YXRhID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzOSw0NSArNTMwLDQ0IEBA
IEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAo
IWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5
Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1
dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1
bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3Vj
Y2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFjcnlwdG9P
cGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgx
KSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBz
dWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMSksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8
fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAg
ICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAgICBpZiAo
IXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7CiAgICAgICAgIGFsZ29yaXRo
bSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgyKSk7Ci0gICAgICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgYWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQorCiAgICAgICAgIHBhcmFtZXRlcnMgPSBKU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRLZXkoJnN0
YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikp
OwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJh
bWV0ZXJzKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJhY3RhYmxlID0g
ZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CiAgICAgICAgIGV4
dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZzdGF0ZSk7
Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYgKHN0YXRl
LmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNhZ2VzRnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtl
eVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsK
KyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVy
cmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsK
QEAgLTU5MCw3ICs1ODAsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBvcnRL
ZXkoCiAgICAgfTsKIAogICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCBk
YXRhLCBXVEZNb3ZlKGFsZ29yaXRobSksIFdURk1vdmUocGFyYW1ldGVycyksIGV4dHJhY3RhYmxl
LCBrZXlVc2FnZXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWlsdXJlQ2Fs
bGJhY2spKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CkBAIC02MTcsNyArNjA3LDcgQEAg
c3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogICAgIH0KICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SldLOiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBKU0NyeXB0
b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1N0cmluZyB1dGY4U3RyaW5n
ID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHRCdWZmZXI7CkBAIC02NDAsMTAgKzYzMCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3Vi
dGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAg
IENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9t
SlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAg
QVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9L
ZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7
CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRy
PENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC02NTksNyArNjQ5LDcgQEAgSlNWYWx1ZSBK
U1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KAogICAgIH07CiAKICAgICBXZWJDb3JlOjpl
eHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2sp
LCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsK
QEAgLTY3NCwxMCArNjY0LDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OndyYXBL
ZXkoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0
IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1Zh
bHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAg
ICBpZiAoIWtleSkKQEAgLTY5NCwxNiArNjg0LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OndyYXBLZXkoRXgKICAgICB9CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0g
ICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAo
IWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigp
IHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZl
cnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7
CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3JhcHBlcjo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBAIC03NDYs
MTYgKzczNCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3Jt
YXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJn
dW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFwcGVkS2V5
RGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9u
RGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBw
ZWRLZXlEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6OnRvV3Jh
cHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBwaW5nS2V5
KQpAQCAtNzY4LDQ0ICs3NTYsNDEgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53
cmFwS2V5KAogICAgIH0KIAogICAgIGF1dG8gdW53cmFwQWxnb3JpdGhtID0gY3JlYXRlQWxnb3Jp
dGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBp
ZiAoIXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0aG0pOwor
ICAgIGlmICghdW53cmFwQWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAgICAgYXV0byB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUsIHVud3Jh
cEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0g
ICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3Jh
cEFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVy
cykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENy
eXB0b0FsZ29yaXRobT4gdW53cmFwcGVkS2V5QWxnb3JpdGhtOwogICAgIFJlZlB0cjxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzOwogICAg
IGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxsKCkpIHsKICAgICAgICAgdW53
cmFwcGVkS2V5QWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAgICAgaWYgKCF1bndyYXBwZWRLZXlBbGdv
cml0aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0aG0pOwor
ICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAgICAgdW53cmFwcGVkS2V5QWxnb3JpdGht
UGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVy
c0ZvckltcG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFwcGVkS2V5
QWxnb3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtl
eUFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRo
bVBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAg
fQogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUu
YXJndW1lbnRDb3VudCgpID49IDYpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5
VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDcp
IHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUu
YXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNT
RVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAog
ICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJl
ZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtODE5LDExICs4MDQsMTUgQEAg
SlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgICAgICBhdXRvIGlt
cG9ydEZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAgICAgICAgICAg
d3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgICAgICB9OworCisgICAgICAgIFZNJiB2bSA9
IGRvbUdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgICAgIEV4ZWNTdGF0ZSYgc3RhdGUgPSAqZG9tR2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5
Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKSwgdW53
cmFwcGVkS2V5QWxnb3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzLCBleHRy
YWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZNb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayksIFdURk1v
dmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNvbGUsIGFu
ZCBwb3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRhcmRpemVk
IHdheSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVuY3Rpb25z
LgotICAgICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7
CiAgICAgICAgIH0KICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZleGVjKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gU2VlIHNlY3Rpb24gNC44LjIg
c3RlcCAxNCBvZiBXZWJXb3JrZXJzIGZvciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEdsb2JhbE9i
amVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsMTMgKzYyLDE2IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29wZTo6dmlz
aXRBZGRpdGlvbmEKIAogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRz
KEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3Vt
ZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVu
dENvdW50KCk7ICsraSkgewogICAgICAgICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3RyaW5nKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwpAQCAtODcsNyArOTAsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6
OnNldFRpbWVvdXQoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRl
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC0xMDQsNyAr
MTA3LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAogICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0
aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlvbikKICAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1
Myw3IEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm8KICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIGZ1bmN0aW9uID0g
b2JqZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsIHBy
b3BlcnR5TmFtZSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5l
ZCgpOwogCiAgICAgaWYgKCFmdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKQEAgLTcwLDE5ICs3MCwy
MyBAQCBKU0M6OkpTVmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAKIGJvb2wgUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aXNDb250cm9sbGVkUmVhZGFibGVTdHJlYW1M
b2NrZWQoKSBjb25zdAogewotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOworICAgIGF1dG8g
Z2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogCi0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAg
ICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xp
ZW50RGF0YSk7CiAgICAgYXV0byByZWFkYWJsZVN0cmVhbSA9IG1fanNDb250cm9sbGVyLT5nZXQo
JnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLmNvbnRyb2xsZWRSZWFkYWJsZVN0cmVh
bVByaXZhdGVOYW1lKCkpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBhdXRvIGlz
TG9ja2VkID0gZ2xvYmFsT2JqZWN0KCktPmJ1aWx0aW5JbnRlcm5hbEZ1bmN0aW9ucygpLnJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFtTG9ja2VkRnVuY3Rpb24uZ2V0
KCk7CisgICAgYXV0byBpc0xvY2tlZCA9IGdsb2JhbE9iamVjdC0+YnVpbHRpbkludGVybmFsRnVu
Y3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1Mb2Nr
ZWRGdW5jdGlvbi5nZXQoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1l
bnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJlYW0pOwogICAgIGF1dG8gcmVz
dWx0ID0gY2FsbEZ1bmN0aW9uKHN0YXRlLCBpc0xvY2tlZCwgSlNDOjpqc1VuZGVmaW5lZCgpLCBh
cmd1bWVudHMpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5pc1RydWUoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFk
YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsMTIgQEAgaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0
KiBSZWFkYWJsZVN0cmVhbQogCiBpbmxpbmUgYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyOjplbnF1ZXVlKFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiYmIGJ1ZmZlcikKIHsKLSAg
ICBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoJnN0YXRlKTsKKyAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
KyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogCiAgICAgaWYgKCFidWZmZXIpIHsK
ICAgICAgICAgZXJyb3Ioc3RhdGUsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoJnN0YXRlKSk7CkBA
IC04NCw4ICs4OCw4IEBAIGlubGluZSBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2wK
ICAgICBhdXRvIGxlbmd0aCA9IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgIGF1dG8gY2h1bmsg
PSBKU0M6OlVpbnQ4QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksIDAsIGxlbmd0aCk7CiAg
ICAgQVNTRVJUKGNodW5rKTsKLSAgICBlbnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCksIGNodW5rLmdldCgpKSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgZW5xdWV1ZShzdGF0ZSwgdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCwgY2h1bmsu
Z2V0KCkpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y2hlZHVsZWRBY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDEzICs0OCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0ZDo6dW5pcXVlX3B0cjxTY2hl
ZHVsZWRBY3Rpb24+IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgRE9N
V3JhcHBlcldvcmxkJiBpc29sYXRlZFdvcmxkLCBDb250ZW50U2VjdXJpdHlQb2xpY3kqIHBvbGlj
eSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIGlmIChnZXRDYWxsRGF0YSh2LCBjYWxsRGF0YSkg
PT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAgaWYgKHBvbGljeSAmJiAhcG9saWN5LT5hbGxv
d0V2YWwoZXhlYykpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgU3RyaW5n
IHN0cmluZyA9IHYudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+KG5ldyBTY2hlZHVsZWRBY3Rpb24oc3RyaW5nLCBpc29s
YXRlZFdvcmxkKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwxMSArNDIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogYm9vbCBTY3JpcHRHbG9i
YWxPYmplY3Q6OnNldChFeGVjU3RhdGUmIHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBJ
bnNwZWN0b3JGcm9udGVuZEhvc3QmIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gc2NyaXB0U3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwog
ICAgIGdsb2JhbE9iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBuYW1lKSwgdG9KUygmc2NyaXB0U3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7Ci0gICAg
aWYgKHNjcmlwdFN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJlcG9ydEV4Y2VwdGlv
bigmc2NyaXB0U3RhdGUsIHNjcmlwdFN0YXRlLmV4Y2VwdGlvbigpKTsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc2NyaXB0
U3RhdGUsIHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg5LDcgKzM4OSw5IEBAIHByb3RlY3RlZDoKIAogICAgIGJvb2wgc2hvdWxk
VGVybWluYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
OworICAgICAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigp
OwogICAgIH0KIAogICAgIHZvaWQgdGhyb3dTdGFja092ZXJmbG93KCkKQEAgLTI0NDgsNiArMjQ1
MCw5IEBAIHByaXZhdGU6CiAKIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXpl
cjo6ZGVzZXJpYWxpemUoKQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBWZWN0b3I8dWludDMyX3Qs
IDE2PiBpbmRleFN0YWNrOwogICAgIFZlY3RvcjxJZGVudGlmaWVyLCAxNj4gcHJvcGVydHlOYW1l
U3RhY2s7CiAgICAgVmVjdG9yPEpTT2JqZWN0KiwgMzI+IG91dHB1dE9iamVjdFN0YWNrOwpAQCAt
MjQ2OCw3ICsyNDczLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVy
OgogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAwLCBtX2ds
b2JhbE9iamVjdCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIu
YXBwZW5kKG91dEFycmF5KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChv
dXRBcnJheSk7CkBAIC0yNzA2LDEzICsyNzExLDE2IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IFNlcmlhbGl6ZWQKIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVl
UmVmIGFwaVZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gdG9KUyhvcmlnaW5Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IHRvSlMoZXhlYywgYXBpVmFsdWUpOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhl
Yy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigp
LT52YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVChzZXJpYWxpemVkVmFsdWUpOwpAQCAtMjc0
MSwxMiArMjc0OSwxNSBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
CiBKU1ZhbHVlUmVmIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNDb250ZXh0
UmVmIGRlc3RpbmF0aW9uQ29udGV4dCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IHRvSlMoZGVzdGluYXRpb25Db250ZXh0KTsKLSAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2
bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2VyaWFsaXplKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2Vw
dGlvbigpLT52YWx1ZSgpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUo
KSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KICAgICBBU1NFUlQodmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fd29y
a2VyR2xvYmFsU2NvcGVXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKIAogICAgIEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUo
KSwgbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNl
cHRpb24pOwogCkBAIC0xNDQsOSArMTQ0LDEyIEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGUoY28KICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNvdXJjZUNvZGUudXJs
KCkuc3RyaW5nKCk7CiAgICAgICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGVycm9yOwogICAg
ICAgICBpZiAobV93b3JrZXJHbG9iYWxTY29wZS0+c2FuaXRpemVTY3JpcHRFcnJvcihlcnJvck1l
c3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMLCBlcnJvciwgc291cmNl
Q29kZS5jYWNoZWRTY3JpcHQoKSkpIHsKLSAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UuaW1wbCgpKSk7Ci0gICAgICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgdm0u
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVFcnJvcihleGVjLCBlcnJvck1l
c3NhZ2UuaW1wbCgpKSk7CisgICAgICAgICAgICB9IHdoaWxlIChmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgc3ViIEdlbmVy
YXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udAogICAgICAgICBteSAkbmVlZEV4Y2VwdGlv
bkNoZWNrID0gMDsKICAgICAgICAgZm9yZWFjaCBteSAkbWVtYmVyIChAeyRkaWN0aW9uYXJ5LT5t
ZW1iZXJzfSkgewogICAgICAgICAgICAgaWYgKCRuZWVkRXhjZXB0aW9uQ2hlY2spIHsKLSAgICAg
ICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSlcbiI7CisgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiI7CiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAi
ICAgICAgICByZXR1cm4gTnVsbG9wdDtcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAj
IEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgd2FudCB0aGlzIHRvIHNoYXJlIGEgbG90IG1vcmUg
Y29kZSB3aXRoIEpTVmFsdWVUb05hdGl2ZS4KQEAgLTMxMjcsNyArMzEyNyw3IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIp
OwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Iik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7XG4iKSBpZiAhJGF0dHJpYnV0ZS0+
aXNTdGF0aWM7CiAgICAgICAgICAgICBpZiAoISRhdHRyaWJ1dGUtPmlzU3RhdGljKSB7CkBAIC0z
MjI1LDcgKzMyMjUsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHtcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBm
YWxzZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkge1xu
Iik7CkBAIC0zMjM2LDcgKzMyMzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGF1dG8gbmF0aXZlVmFsdWUgPSAkbmF0aXZlVmFsdWU7XG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiBmYWxz
ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzk4
Miw3ICszOTgyLDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpCiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBWZWN0b3I8JG5hdGl2ZUVs
ZW1lbnRUeXBlPiAkbmFtZSA9IHRvTmF0aXZlQXJndW1lbnRzPCRuYXRpdmVFbGVtZW50VHlwZT4o
KnN0YXRlLCAkYXJndW1lbnRJbmRleCk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xu
Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkdmFsdWUgPSAiV1RGTW92ZSgkbmFtZSki
OwpAQCAtNDAxNyw3ICs0MDE3LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAg
JGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZTwkY2xhc3NOYW1lPigqc3RhdGUsICR7bmFtZX1W
YWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgIGlmIChVTkxJS0VMWSghJG9w
dGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5k
ZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRuYW1lXCIsIFwiJHZpc2libGVJbnRlcmZhY2VO
YW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8JGNs
YXNzTmFtZT4oKSk7XG4iKTsKQEAgLTQwNDAsNyArNDA0MCw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
ISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICAkbmFtZSA9ICRuYXRpdmVWYWx1ZTtc
biIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlc
biIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYg
KFVOTElLRUxZKCEkbmFtZSkpXG4iKTsKQEAgLTQwODMsNyArNDA4Myw3IEBAIHN1YiBHZW5lcmF0
ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAg
ICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2ZVZhbHVlfTtcbiIpOwogICAgICAgICAgICAg
ICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CiAgICAgICAgICAgICAgICAgaWYgKCRtYXlU
aHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NDY0LDcgKzQ0NjQsNyBA
QCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAuICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVj
KTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAKICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAu
ICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gIiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgIH0KIApAQCAtNTI3OCw3ICs1Mjc4LDcgQEAg
dGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2ludGVyZmFjZU5hbWV9SW5pdCBldmVudEluaXQ7
CkBAIC01Mjg3LDcgKzUyODcsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
ICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQg
YW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFs
aXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogCiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxp
emVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRp
YWxpemVyT2JqZWN0KTsKQEAgLTU0MzAsNyArNTQzMCw3IEBAIEVORAogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFp
bnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgi
fSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAg
ICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIy
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0QWN0aXYKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RG
TW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
dXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24g
MjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0Q3VzdG8KICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbm90aGVyRnVuY3Rpb24oV1RGTW92ZShz
dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
IAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUgPSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgVGVzdEV2ZW50Q29uc3RydWN0b3JJbml0IGV2ZW50SW5pdDsKQEAgLTk0LDcg
Kzk0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlm
ICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIC8vIEdp
dmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAg
ICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09i
amVjdChzdGF0ZSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgICAgICAvLyBDcmVh
dGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9tIHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAg
ICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KHN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZl
bnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdEV2ZW50CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4
ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLml0ZW0oV1RGTW92ZShpbmRl
eCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3Nyw3ICsyNzcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3Vs
YXJBdHRyaWJ1CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEds
b2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yODUsNyArMjg2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RSZWd1bGFyQXR0cmlidQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRSZWd1bGFyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTI5Niw3ICsyOTcsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9i
amVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMDQsNyArMzA2LDcgQEAgYm9vbCBzZXRK
U1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQXR0cmlidXRlKFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNiw3ICszMTgsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjQsNyAr
MzI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRl
Q29uZGl0aW9uYWxBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMzM3LDcgKzM0MCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxl
ZEF0UnVudGkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xv
YmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NSw3ICszNDksNyBAQCBib29sIHNldEpTVGVzdEdsb2Jh
bE9iamVjdEVuYWJsZWRBdFJ1bnRpCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcyLDcgKzM3Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmEKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
dGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZWd1bGFyT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFt
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM5Myw3
ICszOTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0
UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00MTYsNyArNDIwLDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVk
QXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShy
ZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDEwICsyMzEsMTAg
QEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3Ry
MSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8g
QVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCkBAIC02NjMsOSArNjYzLDEwIEBAIGJv
b2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW0KIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgVGVzdEludGVyZmFj
ZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjc4LDcgKzY3OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1w
bGVtZW50c1N0cjIoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTY4Niw3ICs2ODgsNyBAQCBib29sIHNldEpTVGVzdEludGVy
ZmFjZUltcGxlbWVudHNTdHIyKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3ICs3MDEsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUlt
cGxlbWVudHNTdHIzKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MTYsNyArNzE5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRl
cmZhY2VJbXBsZW1lbnRzTm9kZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzM5LDkgKzc0MywxMCBAQCBib29sIHNldEpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVt
ZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNzU0LDcgKzc1OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlU3VwcGxlbWVudGFsU3RyMigKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc2Miw3ICs3NjgsNyBAQCBib29sIHNldEpTVGVz
dEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxlbWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIy
KGltcGwsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3NSw3
ICs3ODEsOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjMoCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZh
Y2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC03OTIsNyArNzk5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
KAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtODUyLDcgKzg2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9
IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFvYmpBcmcpKQpAQCAtOTMwLDcgKzkzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFvYmpBcmcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGlu
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDggQEAgYm9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25z
dHJ1Y3RvclRlc3RBdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEzIEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0
ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmlu
ZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIzID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5k
ZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE5h
bWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3Vt
ZW50KCksIFdURk1vdmUoc3RyMSksIFdURk1vdmUoc3RyMiksIFdURk1vdmUoc3RyMyksIGVjKTsK
ICAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsOCBAQCBib29sIHNldEpTVGVzdE5v
ZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb2RlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTIxNSw3ICsyMTYsNyBAQCBib29sIHNldEpTVGVzdE5vZGVO
YW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
bmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNwcAkocmV2aXNpb24gMjA1
NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5v
bmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDggQEAgYm9v
bCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zNjksNyArMzcwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRl
cm1pbmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zODAsNyArMzgxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODgsNyArMzkwLDcgQEAgYm9vbCBzZXRK
U1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cihXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTksNyArNDAxLDggQEAg
Ym9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC00MDcsNyArNDEwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25k
ZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MTgsNyArNDIxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MjcsNyArNDMxLDcgQEAg
Ym9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRl
dGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7
CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNp
b24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw5NyArNTI1LDk3IEBAIHRlbXBsYXRl
PD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFyeT4KICAgICAgICAgcmV0dXJuIE51bGxvcHQ7
CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVm
YXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlv
bmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKSwg
VGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRo
RW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVt
VHlwZTo6RW1wdHlTdHJpbmcpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmluZ1dpdGhEZWZhdWx0ID0gY29udmVydE9wdGlv
bmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVsdCIpKSwgImRlZmF1bHRTdHJpbmciKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0
byBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxTdHJpbmc+KHN0YXRlLCBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5n
V2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRp
b25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVsdCIpKSwgZmFsc2UpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5X
aXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVm
YXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmluZ3MgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9y
PFN0cmluZz4+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3MiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGUg
PSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlID0gY29udmVydE9wdGlv
bmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRl
OjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9w
dDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25h
bDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05v
bkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29u
dmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0ID0gY29u
dmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51
bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRGbG9hdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9h
dD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0
YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
cmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObywg
MCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0Owog
ICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxm
bG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVnZXJDbGFtcGVkID0gY29udmVydE9wdGlvbmFs
PGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVkIikpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxJbnRl
Z2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50OF90PihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldp
dGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdl
ckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0T3B0aW9uYWw8dWludDhfdD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVk
SW50ZWdlckVuZm9yY2VkUmFuZ2UiKSksIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc21hbGxVbnNpZ25l
ZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5z
aWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGlu
dGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyIikpLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAgICAgYXV0byBpbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJf
dD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVu
c2lnbmVkSW50ZWdlciA9IGNvbnZlcnRPcHRpb25hbDx1aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVn
ZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0
IikpLCBOb3JtYWxDb252ZXJzaW9uLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBsYXJnZUludGVnZXIgPSBjb252ZXJ0T3B0
aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGludDY0X3Q+KHN0YXRl
LCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFy
Z2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2ln
bmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFy
Z2VJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdl
cldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvKiBudWxsYWJs
ZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm51bGxhYmxlTm9kZSIp
KSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBhbnlWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6
OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnN0YXRlLCAiYW55VmFsdWUiKSksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGFueVR5cGVkZWZW
YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikp
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgYXV0byBkaWN0aW9uYXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25h
cnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFy
eU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnkgeyBXVEZNb3ZlKGVu
dW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCksIFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdp
dGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVs
dCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHN0cmluZ1dpdGhvdXREZWZh
dWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0
RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpLCBXVEZNb3ZlKHJlc3RyaWN0ZWRE
b3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUocmVzdHJpY3RlZERv
dWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCks
IFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZSh1bnJlc3RyaWN0ZWRGbG9hdCksIFdU
Rk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlckNsYW1wZWQpLCBXVEZNb3ZlKHNt
YWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9y
Y2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWdu
ZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUo
bGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUo
dW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERl
ZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSksIFdURk1vdmUoYW55VmFsdWUpLCBXVEZNb3Zl
KGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlNZW1iZXIudmFsdWUoKSB9OwpAQCAtNjMxLDEz
ICs2MzEsMTMgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byByZXF1aXJlZEVudW1lcmF0aW9u
VmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRW51bWVyYXRpb25W
YWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJv
b2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byogbm9uTnVsbGFibGVOb2RlID0g
Y29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9kZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJub25OdWxsYWJsZU5vZGUiKSksIElz
TnVsbGFibGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byByZXF1aXJlZERpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIp
KSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVO
dWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5X
aXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5vZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJl
ci52YWx1ZSgpIH07CkBAIC02NTUsNyArNjU1LDcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0
T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0
byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJu
IFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsIHsgV1RGTW92ZShlbnVt
ZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC02NzMs
NyArNjczLDcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxBbHRlcm5hdGVEaWN0aW9uYXJ5TgogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0g
Y29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0
YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJv
b2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIEFsdGVybmF0ZURpY3Rpb25hcnlO
YW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFuV2l0aG91dERl
ZmF1bHQpIH07CkBAIC0zMDkwLDkgKzMwOTAsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1
Y3RvclN0YXRpY1N0cmluZwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0T2JqOjpzZXRTdGF0aWNTdHJpbmdBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxMDMsNyArMzEwNCw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMTgsNyArMzEyMCw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxMjYsNyArMzEyOSw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8
VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFs
dWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTM5LDcgKzMxNDIsOCBAQCBib29sIHNl
dEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTQ3LDcgKzMxNTEsNyBAQCBib29sIHNldEpT
VGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3RhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJ5dGVBdHRyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNTgsNyArMzE2Miw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxNjYsNyArMzE3MSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
MTc3LDcgKzMxODIsOCBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTg1
LDcgKzMxOTEsNyBAQCBib29sIHNldEpTVGVzdE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzE5Niw3ICszMjAyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hv
cnRBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzIwNCw3ICszMjExLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRB
dHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUs
IENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldENsYW1wZWRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzIxNSw3ICszMjIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpF
bmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzIyMyw3ICszMjMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZv
cmNlUmFuZ2VTaG9ydEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0
ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIzNCw3ICszMjQyLDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjUwogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI0Miw3ICszMjUxLDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cihFeGVjUwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMyNTMsNyArMzI2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0
YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTMyNjEsNyArMzI3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRl
KiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldExvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTMyNzIsNyArMzI4Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9u
Z0xvbmdBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTMyODAsNyArMzI5MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xv
bmdBdHRyKEV4ZWNTdGF0ZSoKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdMb25nQXR0cihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjkxLDcgKzMzMDIsOCBAQCBib29s
IHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjk5LDcgKzMzMTEsNyBAQCBib29sIHNl
dEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRyKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWdu
ZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzMxMCw3ICszMzIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0
ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzMxOCw3ICszMzMxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSog
cwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdB
dHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzMjksNyAr
MzM0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzMzcsNyArMzM1
MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cihFeGVjU3RhdGUKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VXN2c3RyaW5nQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzQ4LDcgKzMz
NjIsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RPYmpBdHRyKEV4ZWNTdGF0ZSogCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzY5LDcgKzMzODQs
OCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIoRXhlCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzkzLDcgKzM0MDksOCBA
QCBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cihFeGVjCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDE0LDcgKzM0MzEsOCBAQCBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDIyLDcgKzM0NDAsNyBAQCBib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGluZ051bGxBCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
VG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRT
dHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcgKzM0NTEsOCBAQCBib29sIHNldEpTVGVzdE9i
alVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zNDQxLDcgKzM0NjAsNyBAQCBib29sIHNldEpTVGVzdE9ialVz
dnN0cmluZ0F0dHJUcmVhdGluZ051CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVh
dGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRy
VHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNDUyLDcgKzM0NzEsOCBAQCBib29sIHNldEpTVGVzdE9iakltcGxlbWVu
dGF0aW9uRW51bUF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNDYwLDcgKzM0ODAsNyBAQCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0
aW9uRW51bUF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPEFsdGVybmF0ZUVudW1OYW1lPigqc3Rh
dGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMzQ3Myw3ICszNDkzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4
ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzQ5NCw3ICszNTE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRl
KiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzUwMiw3ICszNTI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBz
dGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q3JlYXRl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1MTMsNyArMzUz
NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1MjEsNyArMzU0NCw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTMyLDcgKzM1NTUs
OCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTQwLDcgKzM1NjQsNyBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0cmluZ0F0dHIoCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRy
QXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU1MSw3
ICszNTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU1OSw3ICsz
NTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRp
bnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zNTcwLDcgKzM1OTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zNTc4LDcgKzM2MDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50
ZWdyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpI
VE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzU4OSw3ICszNjE1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzU5Nyw3ICszNjI0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jv
b2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYwOCw3ICszNjM1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVUkxBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzYxNiw3ICszNjQ0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6
cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM2MjcsNyArMzY1NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNW
VVJMQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTM2MzUsNyArMzY2NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJM
QXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNjQ2LDcgKzM2NzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNjU0LDcgKzM2ODQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0
cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM2NjUsNyArMzY5NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkQ3VzdG9tSW50ZWdyYWwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM2NzMsNyArMzcwNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
Q3VzdG9tSW50ZWdyYWwKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZh
bHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6
OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVncmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZl
VmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2ODQsNyArMzcxNSw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2OTIsNyArMzcyNCw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29s
ZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpj
dXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zNzAzLDcgKzM3MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZEN1c3RvbVVSTEF0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zNzExLDcgKzM3NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZEN1c3RvbVVSTEF0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVz
OjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM3MjMsNyArMzc1Niw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxl
ZEF0UnVudGltZUF0dHJpYnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM3MzEsNyArMzc2NSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0
UnVudGltZUF0dHJpYnUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNzQzLDcgKzM3NzcsOCBAQCBib29sIHNldEpTVGVzdE9ialR5
cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNzUxLDcgKzM3ODYsNyBAQCBib29sIHNldEpTVGVzdE9ialR5cGVk
QXJyYXlBdHRyKEV4ZWNTdGF0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewogICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwg
IkZsb2F0MzJBcnJheSIpOwpAQCAtMzc2Niw3ICszODAxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpB
dHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzc3NCw3ICszODEwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRp
b24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc4NSw3ICsz
ODIxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc5Myw3ICszODMw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25XaXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODA0LDcgKzM4NDEsOCBAQCBib29sIHNldEpT
VGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODEzLDcgKzM4NTEsNyBAQCBib29sIHNldEpTVGVz
dE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7
CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODI1LDcgKzM4NjMsOCBAQCBi
b29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODM0LDcgKzM4NzMsNyBAQCBib29s
IHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdl
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkBAIC0zODQ2LDcgKzM4ODUsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zODU0LDcgKzM4OTQsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0
dGVyRXhjCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0
cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM4NjUsNyArMzkwNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
QXR0cldpdGhTZXR0ZXJFeGMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM4NzQsNyArMzkxNSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0
cldpdGhTZXR0ZXJFeGMKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMp
OwpAQCAtMzg4Niw3ICszOTI3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNT
dGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtMzkwMSw3ICszOTQzLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0
YXRlLAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzkxNiw3ICszOTU5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUq
IAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkz
MSw3ICszOTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzOSw3
ICszOTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzk1MCw3ICszOTk1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzk1OCw3ICs0MDA0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aENhbGxX
aXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUoKnN0YXRlLCBhY3RpdmVET01XaW5kb3coc3Rh
dGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM5NjksNyArNDAxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM5OTMsNyArNDA0MCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQwMTQsNyArNDA2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQwMzgsNyArNDA4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQwNjIsNyArNDExMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTQwODYsNyArNDEzNyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQx
MTAsNyArNDE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZEMK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMzIs
NyArNDE4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3QKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxNDAsNyAr
NDE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMShFeGVjU3QKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtNDE1Myw3ICs0MjA3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRp
b25hbEF0dHIyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtNDE2MSw3ICs0MjE2LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25h
bEF0dHIyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTc0LDcgKzQyMjksOCBAQCBib29s
IHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MTgyLDcgKzQyMzgsNyBAQCBib29sIHNl
dEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRp
b25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQx
OTUsNyArNDI1MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnUK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMTIs
NyArNDI2OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnUKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMjksNyAr
NDI4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNDUsNyArNDMw
NCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0cmlidXRlKEV4ZWNTdGF0ZSoKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNjIsNyArNDMyMiw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBvaW50KEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyODYsNyArNDM0Nyw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9pbnQoRXhlY1N0YXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTAsNyArNDM3Miw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMTgsNyArNDM4MSw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3RhdGUqIHMKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJsdWVi
ZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzI5LDcg
KzQzOTIsOCBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzM3LDcgKzQ0
MDEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MzQ4LDcgKzQ0MTIsOCBAQCBib29sIHNldEpTVGVzdE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzYz
LDcgKzQ0MjgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzcxLDcg
KzQ0MzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzgyLDcgKzQ0NDgsOCBAQCBib29sIHNldEpT
VGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzkwLDcgKzQ0NTcsNyBAQCBib29sIHNldEpTVGVz
dE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3Ry
aW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNDQwMSw3ICs0NDY4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0
cmluZ1NldHRhYgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtNDQwOSw3ICs0NDc3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmlu
Z1NldHRhYgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0
cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MjAs
NyArNDQ4OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0MjgsNyAr
NDQ5Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNDQzOSw3ICs0NTA4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
aWJ1dGVXaXRoUmVzZXJ2ZWRFbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3ICs0NTE3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1
dGVXaXRoUmVzZXJ2ZWRFbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4o
KnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTQ0NjAsNyArNDUzMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
ZHNBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQ0NjksNyArNDU0MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNB
dHRyaWJ1dGUoRXgKICAgICBSZWY8VGVzdE5vZGU+IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1dGUoKTsKICAgICBhdXRvJiBpbXBsID0gZm9y
d2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC00NDgwLDcgKzQ1NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRz
TnVsbGFibGVBdHRyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC00NDkxLDcgKzQ1NjMsNyBAQCBib29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVs
bGFibGVBdHRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvJiBpbXBsID0gKmZvcndh
cmRlZEltcGw7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtNDUwMiw3ICs0NTc0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NDUxMCw3ICs0NTgzLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShF
eAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRT
dHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC00NTQ2LDcgKzQ2MTksNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00NTY5LDcgKzQ2NDIs
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNDYyNywxMCAr
NDcwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9X
cmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpA
QCAtNDY2OCwxMCArNDc0MSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PGlu
dDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNU
ZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFko
IW9iakFyZykpCkBAIC00NzA5LDEwICs0NzgyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2N0ZXRBcmcg
PSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc1MCwxMCArNDgyMywxMCBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVu
dCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc5MSwxMCArNDg2NCwxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0
YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDgzMiw3
ICs0OTA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxs
QXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZN
b3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC00ODUyLDcgKzQ5MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHJlc29sdmVyID0gSlNYUGF0aE5TUmVz
b2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZXIpKQogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJyZXNvbHZlciIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5TUmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhO
U1Jlc29sdmVyIik7CkBAIC00ODk4LDcgKzQ5NzEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0g
Y29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5n
T3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGlu
ZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTQ5MjAsNyAr
NDk5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBh
dXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKTsKICAgICBUZXN0T2JqOjpFbnVt
VHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVu
dW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlm
IChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50
TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9i
amVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVz
dE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk0NCw3ICs1MDE3LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBl
PiBlbnVtQXJnOwogICAgIGlmICghZW51bUFyZ1ZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAg
ICAgZW51bUFyZyA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFko
IWVudW1BcmcpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhv
ZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6
OkVudW1UeXBlPigpKTsKQEAgLTQ5NzAsNyArNTA0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgZW51bUFyZyA9IFRlc3RPYmo6OkVudW1UeXBl
OjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9
IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhP
cHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUiLCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
PFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5OTUsNyArNTA2OCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5h
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC01MDIwLDcgKzUwOTMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
MDQwLDcgKzUxMTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKFdURk1v
dmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTUwNjAsNyArNTEzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZ1Ry
ZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVs
bEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA4MCw3ICs1MTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXJp
YWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2VyaWFsaXpl
ZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTc5LDcgKzUyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFy
Z3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwg
aW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTE5OSw3ICs1MjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBh
cmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUs
IGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChXVEZNb3ZlKGFyZ3VtZW50KSkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTUyMTksMTMgKzUyOTIsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6
Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29y
bGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIi
LCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAg
ICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hZGRFdmVudExpc3RlbmVyKFdURk1vdmUodHlw
ZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyNDUsMTMgKzUzMTgsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3Rh
dGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVz
dE9iamVjdCIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBh
dXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZW1vdmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlw
ZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUyODQsNyArNTM1Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdFN0YXRlT2JqKCpzdGF0ZSkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CiB9CkBAIC01MzIxLDcgKzUzOTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCBl
YykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTUzODAsNyArNTQ1
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBs
LndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0
YXRlLCAqY29udGV4dCwgZWMpKTsKIAogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CkBAIC01NDAwLDcgKzU0NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByCiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAqY29udGV4dCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDg2LDcgKzU1
NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbEFyZyhXVEZNb3ZlKG9wdCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01NTA0LDcgKzU1NzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
NjY2IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MjQsMTAgKzU1OTcsMTAgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMy
X3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhXVEZNb3ZlKG5vbk9wdCksIFdURk1v
dmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU1NDcsMTMgKzU2MjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQxID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gb3B0MiA9IHN0YXRlLT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhX
VEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSksIFdURk1vdmUob3B0MikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTcxLDcgKzU2NDQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1
bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTg5LDcgKzU2NjIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbFVTVlN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NjA3LDcgKzU2ODAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2MjUsNyArNTY5
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3Rh
dGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImZvbyIpIDogc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUo
V1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTY0Myw3ICs1NzE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0
cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWlj
U3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NjEsNyArNTczNCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2NzksNyArNTc1Miw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Njk3LDcgKzU3NzAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNOdWxsKFdURk1vdmUoc3Ry
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MTUs
NyArNTc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKFdU
Rk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTU3MzMsNyArNTgwNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAg
IGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmlu
ZygpIDogdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJp
bmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NTEsNyArNTgyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmco
c3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0
cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzY5
LDcgKzU4NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8o
KSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51
bWJlciA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxk
QWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTc4Nyw3ICs1ODYwLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PGZsb2F0
Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05h
TihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC01ODA1LDcgKzU4NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MjMsNyArNTg5
Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0g
Y29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9u
Z0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg0MSw3ICs1OTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2Fz
dGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90PigpIDogY29udmVydDx1aW50NjRfdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmco
V1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNTg1OSw3ICs1OTMyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODc3LDcg
KzU5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxWZWN0b3I8U3Ry
aW5nPj4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlv
bmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC01ODk1LDcgKzU5NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkoV1RGTW92ZShhcnJheSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTEzLDcgKzU5ODYs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+
YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGJvb2w+KCkgOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuKFdURk1vdmUoYikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01OTMxLDcgKzYwMDQsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRo
b2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShXVEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjAwOSw3ICs2MDgyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIFJlZlB0cjxYUGF0aE5TUmVz
b2x2ZXI+IHJlc29sdmVyID0gbnVsbHB0cjsKICAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2
ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVy
KSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFs
WFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNvbHZlciIpOwpAQCAtNjA1Miw3ICs2MTI1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNr
QXJnQW5kQ2FsbGJhY2tBcmciKTsKQEAgLTYxMTYsNyArNjE4OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
bm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxi
YWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tG
dW5jdGlvbkFyZyIpOwpAQCAtNjI0OSw3ICs2MzIyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3Zl
cmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gc3RyQXJnID0gc3Rh
dGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUob2JqQXJnKSwgV1RGTW92ZShzdHJBcmcp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI3NSw3
ICs2MzQ4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAg
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2Jq
Iik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZN
b3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNjI5NSw3ICs2MzY4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjMxNSw3ICs2Mzg4LDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNjM3OCw3ICs2NDUxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFy
ZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5
QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0
MTgsNyArNjQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0
cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDM4LDcgKzY1MTEsNyBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRN
ZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC02NDU4LDcgKzY1MzEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NTQ2LDcgKzY2MTksNyBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmoqIG9iakFyZyA9IG51bGxwdHI7CiAg
ICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkgewpAQCAtNjU3
OCw3ICs2NjUxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Nj
b3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRp
b25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0
YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNv
bnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjYyNCw3
ICs2Njk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1Vu
ZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNz
TWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJnKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKQEAgLTY2NDksNyArNjcyMiw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2Rl
ZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2Qx
KFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTY2NjYsNyArNjczOSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNU
ZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RP
Ymo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUodHlwZSkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzA5LDEwICs2NzgyLDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9u
ZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBDbGFtcCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92
ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFyZ3NMb25nKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3MzIsMTAgKzY4MDUsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBv
YmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEp
LCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9k
V2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xv
bmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjc1
NSw3ICs2ODI4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0
aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UoV1RGTW92
ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC02Nzc2LDcgKzY4NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmlu
Zz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
LCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02
ODIxLDEwICs2ODk0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5
PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UoV1RGTW92ZShhcnJheUFyZyksIFdU
Rk1vdmUobnVsbGFibGVBcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC02ODQ0LDcgKzY5MTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJ
ZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+YXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4
aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
Z2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50SWQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwpAQCAtNjkyNyw3ICs3MDAwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1
ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwuY29udmVydDMoV1RGTW92ZSh2YWx1ZSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02OTQ3LDcgKzcwMjAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252
ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTcwMTIsMTAgKzcwODUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgVmVjdG9yPFN0cmluZz4gdGFpbCA9IHRvTmF0aXZlQXJndW1lbnRzPFN0cmluZz4oKnN0YXRl
LCAxKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC52YXJpYWRpY1N0cmluZ01ldGhvZChX
VEZNb3ZlKGhlYWQpLCBXVEZNb3ZlKHRhaWwpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNzAzNSwxMCArNzEwOCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhl
YWQgPSBjb252ZXJ0PGRvdWJsZT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8ZG91Ymxl
PiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8ZG91YmxlPigqc3RhdGUsIDEpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKFdURk1vdmUoaGVhZCksIFdU
Rk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC03MDg3LDEwICs3MTYwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBiID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuYW55KFdURk1vdmUoYSksIFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MTM3LDcgKzcyMTAsNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGEgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0
UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0QXJndW1lbnQoV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFw
cGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVm
ZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NzE4NCw3ICs3MjU3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBhID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90
PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFBy
b21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50KFdURk1vdmUoYSksIERlZmVycmVk
V3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTcyMTAsNyArNzI4Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlT3ZlcmxvYWRlZEZ1bmN0aW9uKFdU
Rk1vdmUoYSksIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczMjQsNyArNzM5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5jb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczNDcsNyArNzQyMCw3IEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNv
bmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTczOTAsNyArNzQ2Myw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0MTEsNyArNzQ4
NCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShhKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTc0NTAsNyArNzUyMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gaW5pdCA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5h
dHRhY2hTaGFkb3dSb290KGluaXQudmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QnVmZmVyID0g
dG9BcnJheUJ1ZmZlcihzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWFycmF5QnVmZmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsKQEAgLTkzLDcg
KzkzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUJ1ZmZlclZpZXcgPSB0b0FycmF5QnVmZmVyVmll
dyhzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWFycmF5QnVmZmVyVmlldykpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsKQEAgLTEyNyw3
ICsxMjcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBhdXRvKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0
YXRlLT5jYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwogICAgIFZlY3RvcjxpbnQz
Ml90PiBsb25nQXJncyA9IHRvTmF0aXZlQXJndW1lbnRzPGludDMyX3Q+KCpzdGF0ZSwgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVk
VGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6
OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJpbmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3Ry
aW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMu
Y3BwCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
MCw3ICsyMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShX
VEZNb3ZlKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDggQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMjU5LDcgKzI2MCw3IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3Rh
dGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTI3MCw3ICsyNzEsOCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0yNzgsNyArMjgwLDcgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShz
dGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2FjaGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdGVtcGxh
dGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBoZWxsbyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlz
T2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAidGVzdENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIs
IG51bGxwdHIpOwpAQCAtMzYwLDcgKzM2MCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNp
Z25lZExvbmdMb25nQXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RU
eXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zNjgsNyArMzY5LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3OSw3ICszODAs
OCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1tdXRhYmxlU2VyaWFsaXplCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg3LDcg
KzM4OSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemUKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEltbXV0YWJsZVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTgsNyArNDAwLDggQEAgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNiw3ICs0MDksNyBAQCBib29sIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC00MTcsNyArNDIwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVy
RXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQyNiw3ICs0MzAsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0
aW9uKHN0YXRlLCBlYyk7CkBAIC00MzgsNyArNDQyLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1N0cmluZ0F0dHJXaXRoR2V0dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0Niw3ICs0NTEsNyBAQCBib29sIHNldEpTVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1Nyw3ICs0NjIsOCBAQCBib29sIHNl
dEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDY2LDcgKzQ3Miw3IEBAIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHQKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtNDkxLDcgKzQ5Nyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZzOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byB4ID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8aW50MzJfdD4oKSA6IHRvTmF0aXZlQXJyYXk8aW50MzJf
dD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxMSwxOSArNTE3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gd2lk
dGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxs
b3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gaGVpZ2h0ID0g
Y29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIFNob3VsZEFsbG93Tm9u
RmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGJsdXIgPSBjb252ZXJ0
PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgyKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6
Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gY29sb3IgPSBzdGF0ZS0+YXJndW1l
bnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBhbHBo
YSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkg
OiBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCg0KSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2V0
U2hhZG93KFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCksIFdURk1vdmUoYmx1ciksIFdU
Rk1vdmUoY29sb3IpLCBXVEZNb3ZlKGFscGhhKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU0Myw3ICs1NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVl
bmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxTZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRo
U2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CkBAIC01NjMsNyArNTY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5j
ZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3Zl
KHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU4MywxMCArNTg5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8dWlu
dDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8g
T3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwgV1RGTW92ZShhcmcyKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTYyMiw3ICs2MjgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0
b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2
YWx1ZXMpLCBlYykpOwogCkBAIC02NDUsNyArNjUxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gdmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJp
bmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAK
QEAgLTY2Nyw3ICs2NzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5
cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJO
YXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpTVGVzdEV2ZW50VGFyZ2V0Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNCb29sZWFuKGltcGwuY2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RG
TW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQx
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Nyw4ICsxNzcsMTIgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9i
amVjdCogbwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2Fs
bCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5p
bXA7CkBAIC0xOTMsNyArMTk3LDcgQEAgYm9vbCBfTlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9i
amVjdCogbwogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRo
ZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCBy
ZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAog
ICAgIH0KIApAQCAtMjI1LDggKzIyOSwxMyBAQCBib29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5Q
T2JqZWN0KiBvLCBOCiAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RP
YmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5p
bXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmco
KSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMjQwLDcgKzI0OSw3IEBA
IGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KIAogICAgICAgICAvLyBD
b252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAg
ICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNjAsMTQgKzI2OSwxOCBAQCBi
b29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVjdCogbywgTlBTCiAgICAgICAgIGlmICghcm9v
dE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAg
ICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gY29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsK
ICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0
U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1
ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1
ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
Mjg0LDEwICsyOTcsMTQgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8s
IAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvIGdsb2Jh
bE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlm
aWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAg
ICAgICAgIAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1
ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgcmVzdWx0
ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBp
LT5zdHJpbmcoKSkpOwpAQCAtMjk1LDcgKzMxMiw3IEBAIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShO
UFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhl
YywgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMs
IHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMzE4LDggKzMzNSwxMiBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVj
dCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmpl
Y3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGlj
X2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlz
U3RyaW5nKCkpIHsKQEAgLTMyNyw3ICszNDgsNyBAQCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQ
LCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0
KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJp
bmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3Qp
LCBzbG90KTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFi
bGUoKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZh
cmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBmYWxzZSk7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzQ2LDI3ICszNjcsMzIgQEAgYm9v
bCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICBpZiAoIXJvb3RP
YmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNf
Y2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGktPmlzU3Ry
aW5nKCkpIHsKICAgICAgICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlk
ZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSkpIHsKLSAgICAgICAg
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJv
cGVydHkoZXhlYywgaS0+bnVtYmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmco
KSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShv
YmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5n
KCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmltcCwgZXhlYywgaS0+bnVtYmVyKCkpOwogCi0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zODEsMTcgKzQwNywyMSBAQCBib29sIF9OUE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCog
bywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJv
b3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xv
YmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50
aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmlu
ZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShl
eGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAg
ICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAg
ICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVy
KCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDEw
ICs0NDQsMTQgQEAgYm9vbCBfTlBOX0hhc01ldGhvZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAg
ICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKICAgICAgICAgSlNWYWx1ZSBmdW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBp
ZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgCkBAIC00NDMs
OCArNDc3LDEyIEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAg
ICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBy
b290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlO
YW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKIAogICAgICAgICBvYmotPmlt
cC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtNDU4LDcgKzQ5Niw3IEBAIGJvb2wgX05Q
Tl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgKmlkZW50aWZpZXIgPSBp
ZGVudGlmaWVyczsKICAgICAgICAgKmNvdW50ID0gc2l6ZTsKIAotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC00NzksOSArNTE3LDEzIEBAIGJvb2wgX05QTl9D
b25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28KICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9i
amVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290
T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3RydWN0b3Igb2JqZWN0LgogICAgICAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkBAIC00OTYsNyArNTM4LDcgQEAgYm9vbCBfTlBO
X0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjbwogICAgICAgICAKICAgICAgICAgLy8gQ29u
dmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJp
YW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDEzIEBAIHZvaWQgQ0luc3RhbmNlOjpz
ZXRHbG9iYWxFeGNlcHRpb24oU3RyaW4KIAogdm9pZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNl
cHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KICAgICBp
ZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkp
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9i
amVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3Jp
cHRPYmplY3QubW0JKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9v
YmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTVmFsdWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8aW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0NhdGNoU2NvcGUuaD4KICNpbXBvcnQgPHJ1bnRp
bWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+
CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CkBAIC0xMjksOCArMTMwLDEwIEBA
IHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29uc29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU0M6OkV4Y2Vw
dGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24g
PSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFk
ZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNlcHRpb24pOwogfQogCkBAIC0zMzQsOSArMzM3
LDEyIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRob2Q6KE5TU3RyaW5nICopbmEKICAgICAgICAg
cmV0dXJuIG5pbDsKIAogICAgIC8vIExvb2sgdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBm
dW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTM2OSwxMCAr
Mzc1LDEyIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2NyaXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBp
ZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jv
b3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJBTShzY29wZSk7CiAgICAgCiAgICAgSlNDOjpK
U1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpwcm9maWxlZEV2YWx1
YXRlKGV4ZWMsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpPdGhlciwgbWFrZVNvdXJjZShTdHJpbmco
c2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIApAQCAtMzg2LDE3ICszOTQsMTkgQEAgLSAodm9p
ZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihOU1N0cgogICAgIGlmICghW3NlbGYgX2lzU2Fm
ZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPihbc2VsZiBfaW1wXSk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3Ry
aW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmpl
Y3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBzbG90KTsKIAotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAg
ICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIH0KIApA
QCAtNDA1LDIyICs0MTUsMjUgQEAgLSAoaWQpdmFsdWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAg
ICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLQogICAgIGlk
IHJlc3VsdE9iajsKICAgICB7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jv
b3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisKICAgICAgICAgLy8gTmVlZCB0byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJl
IHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZwogICAgICAgICAvLyBbc3Vw
ZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5
cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAgICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sg
cGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAg
ICAgCisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQg
PSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3Ry
aW5nKGtleSkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
eworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAg
ICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQgPSBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHRP
YmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3Jp
Z2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBf
cm9vdE9iamVjdF1dOwpAQCAtNDM3LDE1ICs0NTAsMTcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3Jp
cHRLZXk6KE5TU3RyaW5nICopawogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xv
YmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RU
YWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBfaW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBh
ZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkBAIC00NTQs
MTUgKzQ2OSwxNyBAQCAtIChCT09MKWhhc1dlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAg
ICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBn
bG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1
dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShl
eGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDkwLDE2ICs1MDcsMTggQEAgLSAoaWQp
d2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25lZClpbgogICAgIGlmICghW3NlbGYgX2lzU2Fm
ZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBb
c2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNT
RVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBK
U0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBpbmRleCk7CiAKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKICAgICAg
ICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBpZCByZXN1
bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQg
b3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2Vs
ZiBfcm9vdE9iamVjdF1dOwpAQCAtNTEyLDE1ICs1MzEsMTcgQEAgLSAodm9pZClzZXRXZWJTY3Jp
cHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0
XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9pbXBdLCBleGVjLCBpbmRleCwgY29udmVydE9i
amNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBPYmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RP
YmplY3RdKSwgZmFsc2UpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25U
b0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFy
c2VyLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNPbmx5QVNDSUlXaXRoTm9VcHBlcgogICAgIAog
c3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21haW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywgY29u
c3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9yKQogeworICAg
IFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBBU1NFUlQodmVjdG9yLmlzRW1wdHkoKSk7CiAgICAgaWYgKCFhcnJheU9i
amVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRF
eHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwpAQCAtNzEsNyArNzQsNyBAQCBz
dGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4
KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlz
U3RyaW5nKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJp
bmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZh
bGlkRG9tYWluTGlzdDsKICAgICAgICAgCiAgICAgICAgIC8vIERvbWFpbnMgc2hvdWxkIGJlIHB1
bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KQEAgLTg3LDExICs5MCwxNCBAQCBzdGF0aWMgc3Rk
OjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlCiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUg
Z2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBS
ZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3QgKCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmlu
ZyYpKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXR5cGVWYWx1ZS5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3QgSlNPYmplY3QqIG9iamVjdCA9IHR5cGVWYWx1
ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIWlzSlNBcnJheShvYmplY3Qp
KQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdn
ZXJGbGFnc0FycmF5OwogCkBAIC0xMDAsNyArMTA2LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29k
ZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgo
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
Y29uc3QgSlNWYWx1ZSB2YWx1ZSA9IGFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4
Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9u
RXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5UcmlnZ2VyRmxhZ3NBcnJheTsKICAgICAgICAgCiAg
ICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAtMTE2LDEy
ICsxMjIsMTUgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlYwogICAg
IAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIGNv
bnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQogeworICAgIFZNJiB2
bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBjb25zdCBKU1ZhbHVlIHRyaWdnZXJPYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInRyaWdnZXIiKSk7Ci0gICAgaWYgKCF0
cmlnZ2VyT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXRyaWdnZXJPYmplY3QuaXNP
YmplY3QoKSkKKyAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IXRyaWdnZXJPYmplY3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyOwogICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdXJs
RmlsdGVyT2JqZWN0ID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJmV4ZWMsICJ1cmwtZmlsdGVyIikpOwotICAgIGlmICghdXJsRmlsdGVyT2JqZWN0IHx8
IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKQorICAg
IGlmICghdXJsRmlsdGVyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJP
YmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXI7CiAKICAgICBTdHJpbmcgdXJsRmlsdGVyID0g
dXJsRmlsdGVyT2JqZWN0LnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTEzMSwxMSArMTQwLDExIEBA
IHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICB0cmlnZ2VyLnVy
bEZpbHRlciA9IHVybEZpbHRlcjsKIAogICAgIGNvbnN0IEpTVmFsdWUgdXJsRmlsdGVyQ2FzZVZh
bHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4
ZWMsICJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlIikpOwotICAgIGlmICh1cmxGaWx0ZXJD
YXNlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlz
Qm9vbGVhbigpKQorICAgIGlmICh1cmxGaWx0ZXJDYXNlVmFsdWUgJiYgIXNjb3BlLmV4Y2VwdGlv
bigpICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgdHJpZ2dlci51
cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgPSB1cmxGaWx0ZXJDYXNlVmFsdWUudG9Cb29sZWFuKCZl
eGVjKTsKIAogICAgIGNvbnN0IEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2VyT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInJlc291cmNlLXR5
cGUiKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlwZVZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHJlc291cmNlVHlw
ZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NFcnJvciA9IGdldFR5
cGVGbGFncyhleGVjLCByZXNvdXJjZVR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZFJlc291
cmNlVHlwZSk7CiAgICAgICAgIGlmICh0eXBlRmxhZ3NFcnJvcikKICAgICAgICAgICAgIHJldHVy
biB0eXBlRmxhZ3NFcnJvcjsKQEAgLTE0Myw3ICsxNTIsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9j
b2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CiAKICAgICBjb25zdCBKU1ZhbHVlIGxv
YWRUeXBlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmZXhlYywgImxvYWQtdHlwZSIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkg
JiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24o
KSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgYXV0byB0eXBlRmxhZ3NF
cnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCBy
ZWFkTG9hZFR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCiAgICAgICAgICAgICBy
ZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNTEsNyArMTYwLDcgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCiAgICAgY29uc3QgSlNWYWx1
ZSBpZkRvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLCAiaWYtZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAm
JiBpZkRvbWFpbi5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiBp
ZkRvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1dG8gaWZEb21haW5FcnJvciA9IGdldERv
bWFpbkxpc3QoZXhlYywgYXNPYmplY3QoaWZEb21haW4pLCB0cmlnZ2VyLmRvbWFpbnMpOwogICAg
ICAgICBpZiAoaWZEb21haW5FcnJvcikKICAgICAgICAgICAgIHJldHVybiBpZkRvbWFpbkVycm9y
OwpAQCAtMTYzLDcgKzE3Miw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIo
RXhlY1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRE
b21haW5MaXN0OwogICAgIAogICAgIGNvbnN0IEpTVmFsdWUgdW5sZXNzRG9tYWluID0gdHJpZ2dl
ck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ1bmxlc3Mt
ZG9tYWluIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW4u
aXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWlu
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgaWYgKHRyaWdnZXIuZG9tYWluQ29uZGl0aW9uICE9IFRy
aWdnZXI6OkRvbWFpbkNvbmRpdGlvbjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05Vbmxlc3NBbmRJZkRvbWFpbjsKICAgICAgICAgYXV0byB1bmxl
c3NEb21haW5FcnJvciA9IGdldERvbWFpbkxpc3QoZXhlYywgYXNPYmplY3QodW5sZXNzRG9tYWlu
KSwgdHJpZ2dlci5kb21haW5zKTsKQEAgLTE4OSwxMyArMTk4LDE2IEBAIHN0YXRpYyBib29sIGlz
VmFsaWRTZWxlY3Rvcihjb25zdCBTdHJpbmcKIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2Fk
QWN0aW9uKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmplY3QsIEFjdGlv
biYgYWN0aW9uLCBib29sJiB2YWxpZFNlbGVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICB2YWxp
ZFNlbGVjdG9yID0gdHJ1ZTsKICAgICBjb25zdCBKU1ZhbHVlIGFjdGlvbk9iamVjdCA9IHJ1bGVP
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAiYWN0aW9uIikp
OwotICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIWFjdGlv
bk9iamVjdC5pc09iamVjdCgpKQorICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IHNjb3BlLmV4Y2Vw
dGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRl
bnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb247CiAKICAgICBjb25zdCBKU1ZhbHVl
IHR5cGVPYmplY3QgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLCAidHlwZSIpKTsKLSAgICBpZiAoIXR5cGVPYmplY3QgfHwgZXhlYy5oYWRFeGNl
cHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQorICAgIGlmICghdHlwZU9iamVjdCB8
fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHlwZU9iamVjdC5pc1N0cmluZygpKQogICAgICAgICBy
ZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGU7CiAKICAg
ICBTdHJpbmcgYWN0aW9uVHlwZSA9IHR5cGVPYmplY3QudG9XVEZTdHJpbmcoJmV4ZWMpOwpAQCAt
MjA4LDcgKzIyMCw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEFjdGlvbihFeGVjU3QK
ICAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOwogICAgIGVsc2UgaWYg
KGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7CiAgICAgICAgIEpTVmFsdWUgc2Vs
ZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZl
eGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlmICghc2VsZWN0b3IgfHwgZXhlYy5oYWRFeGNl
cHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKCFzZWxlY3RvciB8
fCBzY29wZS5leGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkKICAgICAgICAgICAg
IHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQ1NTRGlzcGxheU5vbmVB
Y3Rpb25UeXBlOwogCiAgICAgICAgIFN0cmluZyBzID0gc2VsZWN0b3IudG9XVEZTdHJpbmcoJmV4
ZWMpOwpAQCAtMjQ2LDE3ICsyNTgsMjAgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkUnVs
ZShFeGVjU3RhdAogCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoRXhl
Y1N0YXRlJiBleGVjLCBjb25zdCBTdHJpbmcmIHJ1bGVzLCBWZWN0b3I8Q29udGVudEV4dGVuc2lv
blJ1bGU+JiBydWxlTGlzdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRklYTUU6IEpTT05QYXJz
ZSBzaG91bGQgcmVxdWlyZSBjYWxsYmFja3MgaW5zdGVhZCBvZiBhbiBFeGVjU3RhdGUuCiAgICAg
Y29uc3QgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBKU09OUGFyc2UoJmV4ZWMsIHJ1bGVzKTsKIAot
ICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCisgICAgaWYgKHNj
b3BlLmV4Y2VwdGlvbigpIHx8ICFkZWNvZGVkUnVsZXMpCiAgICAgICAgIHJldHVybiBDb250ZW50
RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkOwogCiAgICAgaWYgKCFkZWNvZGVkUnVsZXMuaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExl
dmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CiAKICAgICBjb25zdCBKU09iamVjdCogdG9wTGV2ZWxP
YmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3QoJmV4ZWMpOwotICAgIGlmICghdG9wTGV2ZWxP
YmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8
IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9y
OjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbk9iamVjdDsKICAgICAKICAgICBpZiAoIWlzSlNB
cnJheSh0b3BMZXZlbE9iamVjdCkpCkBAIC0yNzIsMTEgKzI4NywxMSBAQCBzdGF0aWMgc3RkOjpl
cnJvcl9jb2RlIGxvYWRFbmNvZGVkUnVsZXMoCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05Ub29NYW55UnVsZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSB0b3BMZXZlbEFy
cmF5LT5nZXRJbmRleCgmZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
IHx8ICF2YWx1ZSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0
SW5Ub3BMZXZlbEFycmF5OwogCiAgICAgICAgIGNvbnN0IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0g
dmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICBpZiAoIXJ1bGVPYmplY3QgfHwgZXhlYy5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFydWxlT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFs
aWRSdWxlOwogCiAgICAgICAgIGF1dG8gZXJyb3IgPSBsb2FkUnVsZShleGVjLCAqcnVsZU9iamVj
dCwgbG9jYWxSdWxlTGlzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMDIsNiArNDAwMiw4IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWMKIAogc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb250cm9sbGVySlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWEpCiB7CisgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgYXV0byBtZWRpYUpTV3JhcHBlciA9IHRvSlMoJmV4ZWMsICZnbG9i
YWxPYmplY3QsIG1lZGlhKTsKICAgICAKICAgICAvLyBSZXRyaWV2ZSB0aGUgY29udHJvbGxlciB0
aHJvdWdoIHRoZSBKUyBvYmplY3QgZ3JhcGgKQEAgLTQwMDksMTggKzQwMTEsMTggQEAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb250cm9sbGVySlNWYWx1ZShKUwogICAgIGlmICghbWVkaWFKU1dyYXBw
ZXJPYmplY3QpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogICAgIAotICAgIEpTQzo6
SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4
ZWMudm0oKSwgImNvbnRyb2xzSG9zdCIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sc0hv
c3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbHNIb3N0Iik7CiAg
ICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xzSG9zdEpTV3JhcHBlciA9IG1lZGlhSlNXcmFwcGVyT2Jq
ZWN0LT5nZXQoJmV4ZWMsIGNvbnRyb2xzSG9zdCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sc0hvc3RKU1dyYXBw
ZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KGNvbnRyb2xzSG9z
dEpTV3JhcHBlcik7CiAgICAgaWYgKCFjb250cm9sc0hvc3RKU1dyYXBwZXJPYmplY3QpCiAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCi0gICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xs
ZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52bSgpLCAiY29udHJvbGxl
ciIpOworICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY29udHJvbGxlciIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9s
bGVySlNXcmFwcGVyID0gY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0LT5nZXQoJmV4ZWMsIGNv
bnRyb2xsZXJJRCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAK
ICAgICByZXR1cm4gY29udHJvbGxlckpTV3JhcHBlcjsKQEAgLTQwNTcsOCArNDA1OSwxMCBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZUNhcHRpb25Db250CiAKICAgICBTY3JpcHRDb250
cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsK
ICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAg
IEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUgY29udHJv
bGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmplY3QsICp0aGlz
KTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWND
YXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwpAQCAtNDA4Myw3ICs0MDg3LDcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udAogCiAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBub0FyZ3VtZW50czsKICAgICBKU0M6OmNhbGwoZXhlYywgbWV0
aG9kT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIGNvbnRyb2xsZXJPYmplY3QsIG5vQXJndW1l
bnRzKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAKICAgICBtX2hhdmVTZXRVcENhcHRpb25Db250YWluZXIgPSB0cnVlOwogI2VuZGlm
CkBAIC02NjAzLDggKzY2MDcsMTAgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRp
YUNvbnRybwogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBlbnN1cmVJc29sYXRlZFdvcmxk
KCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCku
ZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxP
YmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAg
SlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZUNvbnRyb2xzIikpOwogICAgIGlm
IChmdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkKQEAgLTY2MTcsOCArNjYyMyw4IEBAIGJvb2wg
SFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBVUkwgc2NyaXB0VVJMOwog
I2VuZGlmCiAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNl
Q29kZShtZWRpYUNvbnRyb2xzU2NyaXB0LCBzY3JpcHRVUkwpLCB3b3JsZCk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02Njc2LDgg
KzY2ODIsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogCiAg
ICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUo
KS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qo
d29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgLy8gVGhl
IG1lZGlhIGNvbnRyb2xzIHNjcmlwdCBtdXN0IHByb3ZpZGUgYSBtZXRob2Qgd2l0aCB0aGUgZm9s
bG93aW5nIGRldGFpbHMuCiAgICAgLy8gTmFtZTogY3JlYXRlQ29udHJvbHMKQEAgLTY3MDQsMjEg
KzY3MTIsMjEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAg
IGFyZ0xpc3QuYXBwZW5kKG1lZGlhQ29udHJvbHNIb3N0SlNXcmFwcGVyKTsKIAogICAgIEpTQzo6
SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBB
U1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNh
bGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IEpTQzo6Y2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xp
c3QpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFt
aWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sbGVyVmFsdWUpOwogICAgIGlmICghY29udHJv
bGxlck9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ29ubmVjdCB0aGUgTWVkaWEs
IE1lZGlhQ29udHJvbGxlckhvc3QsIGFuZCBDb250cm9sbGVyIHNvIHRoZSBHQyBrbm93cyBhYm91
dCB0aGVpciByZWxhdGlvbnNoaXAKICAgICBKU0M6OkpTT2JqZWN0KiBtZWRpYUpTV3JhcHBlck9i
amVjdCA9IG1lZGlhSlNXcmFwcGVyLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpT
Qzo6SWRlbnRpZmllciBjb250cm9sc0hvc3QgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JmV4ZWMtPnZtKCksICJjb250cm9sc0hvc3QiKTsKICAgICAKICAgICBBU1NFUlQoIW1lZGlhSlNX
cmFwcGVyT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBjb250cm9sc0hvc3QpKTsKQEAgLTY3Mzgs
OCArNjc0Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gKICAg
ICB1cGRhdGVQYWdlU2NhbGVGYWN0b3JKU1Byb3BlcnR5KCk7CiAgICAgdXBkYXRlVXNlc0xUUlVz
ZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25KU1Byb3BlcnR5KCk7CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRNZWRpYUNvbnRyb2xzRGVwZW5k
T25QYWdlU2NhbGVGYWN0b3IoYm9vbCBkZXBlbmRzT25QYWdlU2NhbGUpCkBAIC02Nzc0LDIxICs2
NzgyLDIzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm8KICAgICBE
T01XcmFwcGVyV29ybGQmIHdvcmxkID0gZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlw
dCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7
CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBj
b250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwg
KnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVy
VmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2JqZWN0LT5nZXQoZXhl
YywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVQcmVzZW50YXRpb25N
b2RlQ2hhbmdlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVj
dChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpT
Qzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkKQEAgLTY4MTUsMjEgKzY4MjUsMjMgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmdldEN1cnJlbnRNZWRpYQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJK
U1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCog
Y29udHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdChleGVjKTsKIAotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIEpTQzo6SlNWYWx1
ZSBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZ2V0Q3VycmVudENvbnRyb2xzU3RhdHVzIikpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCBmdW5jdGlvblZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSB8fCBmdW5jdGlvblZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
CiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4
ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShm
dW5jdGlvbiwgY2FsbERhdGEpOwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlz
dDsKQEAgLTY4MzgsNyArNjg1MCw3IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJy
ZW50TWVkaWEKIAogICAgIEpTQzo6SlNWYWx1ZSBvdXRwdXRWYWx1ZSA9IEpTQzo6Y2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBhcmdMaXN0
KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIHJl
dHVybiBvdXRwdXRWYWx1ZS5nZXRTdHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5Miw5ICszOTIsMTEgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpk
aWRBZGRVc2VyQQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRv
Y3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxl
ci5nbG9iYWxPYmplY3QoaXNvbGF0ZWRXb3JsZCkpOwotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwogICAg
IGFyZ0xpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCByb290KSk7CkBAIC00MDgs
OCArNDEwLDggQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogICAg
IC8vIEl0IGlzIGV4cGVjdGVkIHRoZSBKUyBmaWxlIHByb3ZpZGVzIGEgY3JlYXRlT3ZlcmxheShz
aGFkb3dSb290LCB0aXRsZSwgc3VidGl0bGUpIGZ1bmN0aW9uLgogICAgIEpTQzo6SlNPYmplY3Qq
IG92ZXJsYXkgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImNyZWF0ZU92ZXJsYXkiKSkudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCFv
dmVybGF5KSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQxOCw3ICs0MjAsNyBAQCB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEpTQzo6Y2FsbChleGVjLCBvdmVybGF5LCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9i
amVjdCwgYXJnTGlzdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogfQogCiBib29sIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnBhcnRP
ZlNuYXBzaG90T3ZlcmxheShjb25zdCBOb2RlKiBub2RlKSBjb25zdApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMTAg
KzEwMSwxMiBAQCBib29sIE5QSlNPYmplY3Q6Omhhc01ldGhvZChOUElkZW50aWZpZXIgCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRp
ZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7ICAgIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIHJldHVybiBnZXRDYWxsRGF0YSh2YWx1ZSwgY2FsbERhdGEpICE9IENhbGxUeXBl
OjpOb25lOwpAQCAtMTQ3LDcgKzE0OSw5IEBAIGJvb2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHko
TlBJZGVudGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAKICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+
aXNTdHJpbmcoKSkKQEAgLTE1NSw3ICsxNTksNyBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3Bl
cnR5KE5QSWRlbnRpZmllCiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5o
YXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CiAKLSAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApAQCAtMTY3LDcgKzE3MSwxMCBAQCBib29sIE5QSlNPYmplY3Q6OmdldFBy
b3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGpzUmVzdWx0OwogICAgIGlmIChpZGVudGlm
aWVyUmVwLT5pc1N0cmluZygpKQogICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChl
eGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOwpA
QCAtMTc1LDcgKzE4Miw3IEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJZGVudGlm
aWUKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllclJl
cC0+bnVtYmVyKCkpOwogICAgIAogICAgIG1fb2JqZWN0TWFwLT5jb252ZXJ0SlNWYWx1ZVRvTlBW
YXJpYW50KGV4ZWMsIGpzUmVzdWx0LCAqcmVzdWx0KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTE4Nyw3ICsxOTQsOSBAQCBib29sIE5QSlNPYmplY3Q6OnNldFByb3BlcnR5KE5QSWRlbnRp
ZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNM
b2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gbV9vYmplY3RNYXAtPmNvbnZlcnROUFZhcmlh
bnRUb0pTVmFsdWUoZXhlYywgbV9vYmplY3RNYXAtPmdsb2JhbE9iamVjdCgpLCAqdmFsdWUpOwog
ICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CkBAIC0xOTUsNyArMjA0LDcgQEAg
Ym9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgICAgICBtX2pzT2Jq
ZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmll
ckZyb21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApLCBqc1ZhbHVlLCBzbG90KTsK
ICAgICB9IGVsc2UKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRl
eChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSwganNWYWx1
ZSwgZmFsc2UpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwOCwyNiArMjE3LDI5
IEBAIGJvb2wgTlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKICAgICBpZiAoIWV4
ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIGlmIChpZGVu
dGlmaWVyUmVwLT5pc1N0cmluZygpKSB7CiAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9
IGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmll
cikpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJS
ZXAtPm51bWJlcigpKSkgewotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJlcC0+
bnVtYmVyKCkpOwogICAgIH0KIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU5LDcgKzI3
MSw5IEBAIGJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWEKICAgICBpZiAo
IWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIENvbnN0
cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUg
PSBnZXRDb25zdHJ1Y3REYXRhKG1fanNPYmplY3QuZ2V0KCksIGNvbnN0cnVjdERhdGEpOwpAQCAt
Mjc1LDEzICsyODksMTYgQEAgYm9vbCBOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJp
YQogICAgIAogICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgbmV3IG9iamVjdC4KICAgICBt
X29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3Vs
dCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgTlBKU09iamVjdDo6aW52b2tlKEV4
ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBmdW5j
dGlvbiwgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQs
IE5QVmFyaWFudCogcmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKQEAgLTI5Niw3ICszMTMs
NyBAQCBib29sIE5QSlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsCiAKICAgICAvLyBD
b252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICBt
X29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCB2YWx1ZSwgKnJlc3Vs
dCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eS5tbQkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04ODUsOCArODg1LDExIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFs
dWEKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhwbHVnaW5Xb3JsZCgpLnZtKCkpOwotICAgIFN0cm9uZzxKU0dsb2JhbE9iamVj
dD4gZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkudm0oKSwgZnJhbWUtPnNjcmlwdCgpLmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisKKyAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVj
dCh2bSwgZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBVc2Vy
R2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yKGFsbG93UG9wdXBzID8gT3B0aW9uYWw8
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlU3RhdGU+KFByb2Nlc3NpbmdVc2VyR2VzdHVyZSkgOiBOdWxs
b3B0KTsKQEAgLTg5NCw3ICs4OTcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6ZXZhbHVhCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VT
b3VyY2Uoc2NyaXB0KSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHJlc3VsdCwgcmVz
dWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkxNSw5
ICs5MTgsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdp
bldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmpl
Y3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBD
YWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC05
MzAsNyArOTM2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQog
ICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2
YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTk0OCw5ICs5NTQsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omlu
dm9rZQogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2
bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEob2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlOjpOb25lKQpAQCAtOTYyLDcgKzk3MSw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBvYmplY3QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0KTsKICAgICAKICAgICBtYXJzaGFsVmFs
dWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05ODAsOSArOTg5LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Ojpjb25zdHIKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2Vi
RnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIENv
bnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKICAgICBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5
cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEob2JqZWN0LCBjb25z
dHJ1Y3REYXRhKTsKQEAgLTk5NSw3ICsxMDA3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OmNvbnN0cgogICAgIEpTVmFsdWUgdmFsdWUgPSBKU0M6OmNvbnN0cnVjdChleGVj
LCBvYmplY3QsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ0xpc3QpOwogICAgIAog
ICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsK
LSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMTMsMTMgKzEwMjUsMTYgQEAgYm9vbCBOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
W21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVy
dHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEs
IHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTAzNCwxMyAr
MTA0OSwxNiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvCiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2lu
V29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFt
ZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBvYmpl
Y3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVj
LCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTEwNTgsMTUgKzEwNzYsMTggQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnNldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3Ro
KTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwogICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CiAg
ICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDg0LDE0ICsxMTA1LDE3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9i
YWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsgICAgCiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFyc2hhbFZhbHVl
KGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGZhbHNlKTsK
ICAgICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExMTAsMTUgKzExMzQsMTggQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0
eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAg
ICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKQEAgLTExMzYsMTYg
KzExNjMsMTkgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnJlbW92ZQogICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdp
bldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIGlmICghb2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eUJ5
SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTExNjMsMTEgKzExOTMsMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6Omhhc1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJG
cmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwor
ICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTExODUsMTEgKzEyMTksMTUgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhh
c1BybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2
bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFs
RXhlYygpOwogICAgIGJvb2wgcmVzdWx0ID0gb2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgCisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCkBAIC0xMjA3
LDExICsxMjQ1LDE0IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXQK
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmpl
Y3QtPmdldChleGVjLCBtZXRob2ROYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuICFmdW5jLmlzVW5kZWZpbmVk
KCk7CiB9CiAKQEAgLTEyMjksOSArMTI3MCwxMiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6ZW51bWVyCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdl
YkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgCiAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC0xMjUxLDcg
KzEyOTUsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyCiAKICAg
ICBtZW1jcHkocmVzdWx0RGF0YSwgW2RhdGEgYnl0ZXNdLCByZXN1bHRMZW5ndGgpOwogCi0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTY5MzYsNiArNjkzNiw5IEBAIC0gKEJPT0wpc2hvdWxkQ2xv
c2UKICNpZiAhUExBVEZPUk0oSU9TKQogc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFl
RGVzY0Zyb21KU1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisKICAgICBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2MgPSAwOwog
ICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVu
dERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUuYXNCb29sZWFuKCldOwpA
QCAtNjk3Niw4ICs2OTc5LDggQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
Y0ZybwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIEpTQzo6SlNWYWx1ZSBwcmlt
aXRpdmUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2Ny
aXB0b3IgbnVsbERlc2NyaXB0b3JdOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhZURlc2NG
cm9tSlNWYWx1ZShleGVjLCBwcmltaXRpdmUpOwo=
</data>
<flag name="commit-queue"
          id="311316"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>287911</attachid>
            <date>2016-09-04 09:37:34 -0700</date>
            <delta_ts>2016-09-06 11:14:22 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews114 for mac-yosemite</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>1605650</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
7a1iRx1ooJIBGwrRZsrdsxWHi2Xb1S9bk+SNPVlEW9Y5An7HHdsHepzkwEkM7DIE27b7xzL1F2xI
A+4+ZUbVNMjLqk0fh6eAwg9cXVKnoSGPn0Acbt6/L+tFWj6Dpr8xzLD+c9m+rHkDgJjUVvw/IYeT
MoasJFU0+6C4hwxiK+gwsJ1M5tYnt4bQq8wV1oyIKODt282kHuvzOWrAi9DoJU8LRhk4E90oPmx1
wdzaR0rvsIgILhfT43sGxI2KBsFYHQ0BXVk/WTl2OhuU1WE2aJbAn1iM7+8JDDLhpKWR6kxm8jjW
Z69FGgYjkBql5LhosEPRsE9UabMr9NvvnNmFULyBuO+WvStenvitff2dA09X8IPvv/i1uE0fcvsL
1u56OA7+IkgvomngpH/5D1BLAwQKAAAAAAAPRSRJAAAAAAAAAAAAAAAADAAcAGNvbXBvc2l0aW5n
L1VUCQADbkDMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAA0UkSQAAAAAAAAAAAAAAABQA
HABjb21wb3NpdGluZy9yZWdpb25zL1VUCQADVkDMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAAC
AAgAA0UkSWlx8PKtAAAAFAMAAEUAHABjb21wb3NpdGluZy9yZWdpb25zL3dlYmtpdC1mbG93LXJl
bmRlcmVyLWxheWVyLWNvbXBvc2l0aW5nLXN0ZGVyci50eHRVVAkAA1ZAzFdWQMxXdXgLAAEE9QEA
AAQUAAAA7Y+9DoIwFEZ3n6KjDlAoIj+JgxJNHIwkjMSQa7nBaqXkUk14ezUO+gCObOebzndKL07n
XuqFbhJER6Ys3qAfWlkVaHMyHZIdWK+aFrTGmiHR0vFFFIdset2qZg09Hk4XlHZDZKjatQ/QqgaL
9YxN1e8Cy3hh7iQxA3lGnhnCPdYKvuT44UK4Yu7xl9oaO3TY81zDgMRfsg9Vq/c/VzKtWmRCJMGk
HCPGiP9FPAFQSwMEFAACAAgAD0UkScSoKaHAAAAA8gYAADwAHABjb21wb3NpdGluZy9zaG93LWNv
bXBvc2l0ZWQtaWZyYW1lLW9uLWJhY2stYnV0dG9uLXN0ZGVyci50eHRVVAkAA25AzFduQMxXdXgL
AAEE9QEAAAQUAAAA7c+9CsIwFAXg3afIqINNmvrTCg5aFBxEwVGkXNOLRmNTbqOQt1dx0MHVQch2
znTOtxXpqCdGiYjiZLhj2uEFGl+pYoNuTbZGcp41+lCBMVgyJBp3YzlM+6x9nuvDFBpc7U+o3IzI
UrGobmB0CQ7LDmvrzwaO8Y29ksIc1BF5bgmXWGp4p27cH8hI9gR/TDvrfI0NXxvwSPwx9krF5Pkv
UszoCpmUWdLaBkRA/AQxyD4Rua39XyhEmgZFUATFF8UdUEsDBAoAAAAAAAFFJEkAAAAAAAAAAAAA
AAASABwAY29tcG9zaXRpbmcvdmlkZW8vVVQJAANSQMxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQU
AAIACAABRSRJ4TckqK0AAADeAwAAMgAcAGNvbXBvc2l0aW5nL3ZpZGVvL3ZpZGVvLWNsaXAtY2hh
bmdlLXNyYy1zdGRlcnIudHh0VVQJAANSQMxXUkDMV3V4CwABBPUBAAAEFAAAAO2PwQqCQBRF933F
LG2hM4qaCC1KClpEQksJeY0Pm5oceU7B/H1Gi4J+wd25q3NPJbI8FrkIg3SRnJiyeIfBdbIuTO9K
Mj2SdWxQbQdaY8OQaOmH0SJLmHfbqnYNAx7OV5R2Q2So3nVP0KoBi82ceep3gWX8aB4ksQB5QV4Y
wj02Cr7kh0kaBVEs+Ki2xroeB15qcEh8lH2oXr0PBpJp1SGLRJbNqqliqpgq/ipeUEsDBAoAAAAA
AApFJEkAAAAAAAAAAAAAAAANABwAZGlzcGxheWxpc3RzL1VUCQADY0DMVz5DzFd1eAsAAQT1AQAA
BBQAAABQSwMEFAACAAgACkUkSaNX/ehQAAAAjgAAADIAHABkaXNwbGF5bGlzdHMvZXh0ZW50LWlu
Y2x1ZGVzLXRyYW5zZm9ybXMtc3RkZXJyLnR4dFVUCQADY0DMV2NAzFd1eAsAAQT1AQAABBQAAABz
L0osyMhMLnbOzytJrSixskpPLXEO8dXQVMgsVsjLL1GoTC1RSM7PLUgsyUzKSVUozyzJUChKTc4v
SsnMSwfKgLUV63G5oxtUjGYQMYYAAFBLAwQUAAIACAAKRSRJ8paV1UcAAABJAAAAKQAcAGRpc3Bs
YXlsaXN0cy9sYXllci1kaXNwYXktbGlzdC1zdGRlcnIudHh0VVQJAANjQMxXY0DMV3V4CwABBPUB
AAAEFAAAAHMvSizIyEwuds7PK0mtKLGySk8tcQ7x1dBUyCxWyMsvUahMLVFIzs8tSCzJTMpJVSjP
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
cy9jYW52YXMtbGluZURhc2gtc3RkZXJyLnR4dFVUCQADs0DMV7NAzFd1eAsAAQT1AQAABBQAAADN
zj0KwkAUReHeVdwNGBwygg5iY8TGytiJxdNcMDB5E14m/q3eLMPyfNWp2QMei1XwLpRr8DU454uY
7hJRjV1/oja0s5GXsvRLd8Vmb5ZsG7A77JJmvnPNfGyVlQyPgFafEtsGzVQQM/kESEakDBlJCUZ2
1IxunOBGaNL5l5aKWf1PMz9QSwMECgAAAAAAg0UkSQAAAAAAAAAAAAAAAAkAHABmYXN0L2Nzcy9V
VAkAA0VBzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAINFJEmtTfNosQAAAM4BAAA2ABwA
ZmFzdC9jc3MvcGVyc3BlY3RpdmUtb3JpZ2luLWluaXRpYWwtaW5oZXJpdC1zdGRlcnIudHh0VVQJ
AANFQcxXRUHMV3V4CwABBPUBAAAEFAAAAM2PMQvCMBSEd3/F27SDBhcpXdsO4qA0aOeaPksgyQvJ
q5h/b0VR3B0c77j7uKubZt8U0OJ5pxl6wgiOGBIyaOsNWnQMA3JJ1o+MveRkEC4UYO4xRI+K9RWX
FPSg3fI2X83EicxoMYqq407UrRRPuJA0BoUPVVJAoWIUpZRf4AqV6ULHmtxKeb9Y5/kmgwKupHt4
FYvC0HB073XYHwJNWzhtq8U7M5E/djarf3oz/evNO1BLAwQKAAAAAAB7RSRJAAAAAAAAAAAAAAAA
CQAcAGZhc3QvZG9tL1VUCQADOkHMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAL0UkSQAA
AAAAAAAAAAAAABoAHABmYXN0L2RvbS9NdXRhdGlvbk9ic2VydmVyL1VUCQADqUDMVz5DzFd1eAsA
AQT1AQAABBQAAABQSwMEFAACAAgAL0UkSSjZeTawAAAA7gAAAD8AHABmYXN0L2RvbS9NdXRhdGlv
bk9ic2VydmVyL2RhdGFiYXNlLWNhbGxiYWNrLWRlbGl2ZXJ5LXN0ZGVyci50eHRVVAkAA6lAzFep
QMxXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXge79iTqFQbdAh2luUXSIELT3v6hjCOiPjbtG/T6NO
3ebxvgeTZFmaabiRsQ7BM/ggBEzQUiXYIXnjwATPy4epQuggWgOxB0OAIizxTBXsQoeDOhpvVFLm
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
eHRVVAkAA7VAzFe1QMxXdXgLAAEE9QEAAAQUAAAA7dhNSwMxEAbgu79iTraCuN6EIILWClaKslss
giJjdtoGdpM1ma3tvzd+HApe9ObhvYR8zW7mOSQh47K8LQ2VsuwbjuNNFyUlF7yhh/OyJBvazjVC
C85lTW9OVzS49mtuXE3xK4hkJ6r3Latd5bkdR/G6kiRpsFfch6ZvJRWXrFyM51Uxl5cbp0UV+mil
mPCaKxtdp6MQpdhyjMWPNR3ZrhueHB+QoaS1Mb13r708dxpPJ9XImIccZczFVsWGWu5YVaI/o52x
n2mau+jWrGLMd6pDG3xSms+ujKk0Or+k/cOv5kw2OuIklfjk1K2dbg93vz7tG3WN8zLNvz/YG4MW
tKAFLWhBC1rQgha0oAUtaEELWtCCFrSg/QXtI7GS+JrCIuN+JgdYwAIWsIAF7P+GbV2u5OXkrFrn
WT/qT7QIkeyKI9vcT7bhhLsCuMENbnCDG9zgBje4wQ1ucIMbr82gBS1o8X6Hgw3c4MaODFrQghb3
CBxs4Ab337nfAVBLAwQKAAAAAAB1RSRJAAAAAAAAAAAAAAAADAAcAGZhc3QvZnJhbWVzL1VUCQAD
LUHMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAdUUkSSjZeTawAAAA7gAAAC8AHABmYXN0
L2ZyYW1lcy9zYW5kYm94ZWQtaWZyYW1lLXN0b3JhZ2Utc3RkZXJyLnR4dFVUCQADLUHMVy1BzFd1
eAsAAQT1AQAABBQAAABlzkELgkAQBeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+
B5NkWZppuJGxDsEz+CAETNBSJdgheePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtu
vco5SIVTOrCgunAd3MieaOtRWjPgZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8
+NfJ9BrMx+Z60jr30tId5vHsDVBLAwQKAAAAAAA7RSRJAAAAAAAAAAAAAAAADQAcAGZhc3QvaGlz
dG9yeS9VVAkAA8JAzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIADtFJEko2Xk2sAAAAO4A
AABAABwAZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtd2ViZGF0YWJhc2Utbm8tdHJhbnNhY3Rpb24t
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
LnR4dFVUCQAD0EDMV9BAzFd1eAsAAQT1AQAABBQAAABzy0ksSXVJTc5PSbVSSAHRmXnpCqlFRflF
VgqZecn5RUWpySUKKYkliQrJGanJ2XpcAFBLAwQKAAAAAABWRSRJAAAAAAAAAAAAAAAACQAcAGZh
c3QveHNsL1VUCQAD80DMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAVEUkSXL9ZfKFAAAA
6QAAACUAHABmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRvYy1zdGRlcnIudHh0VVQJAAPwQMxX8EDM
V3V4CwABBPUBAAAEFAAAAK1OMQ7CQAzb+4p8oGRguxkm2EB0TttUnJS7VLmc1P6eg36BxbJsy/ak
aY1CHjUDm6kFWKLwDwIivlRq4oIXcsLr8MCBx1t0vNOu1Z9cvOBCxXErgsZFq00tvr2tn3U6NRUk
ZoYzsHDi7BDTquZdc8JBIUDNNLZRVxCl+U/j/VHP8/dF9wFQSwMEFAACAAgAVEUkSc4JKAKNAAAA
8AAAACcAHABmYXN0L3hzbC94c2x0LWJhZC1pbXBvcnQtdXJpLXN0ZGVyci50eHRVVAkAA/BAzFfw
QMxXdXgLAAEE9QEAAAQUAAAApY4xDsIwDEX3nsIXKB7YMsMEG4jOTuuKSE5cOY4EtyfQI7B8+f9n
W3/WvCUhT1qAzdQCrEn4JwERHyotc8UTOeF5uuHE8ZIcr/TW5neuXnGl6viqgsZVm819vTsfIy1j
ypuaj83SoWcgqTAcgYUzF4edDp2EfYQArVDsBVxBlJZ/ixStbX5+n/Q7keEDUEsDBBQAAgAIAFRF
JEnPj2YOUAAAAKAAAAAkABwAZmFzdC94c2wveHNsdC1jb250ZW50VHlwZS1zdGRlcnIudHh0VVQJ
AAPwQMxX8EDMV3V4CwABBPUBAAAEFAAAAK3MsQ3AIAwF0Z4p/gZR2myDwAhLNkaWiTJ+yA5prrtX
TCdLDrYBcje/0FgIEB6EEySkNAK2Yq5IPO4sXLG7CM0cStGt7ssslb+wp4fK8ZEvUEsDBBQAAgAI
AFZFJEmBSnetSwAAAKwAAAA0ABwAZmFzdC94c2wveHNsdC10cmFuc2Zvcm0tdG8tZnJhZ21lbnQt
Y3Jhc2gtc3RkZXJyLnR4dFVUCQAD80DMV/NAzFd1eAsAAQT1AQAABBQAAAC1zLENgDAMRNE+U9wK
tGzjwAVZcmxkLOZHomAD6q/3t5inmpSGg5mRK4YaAVMnFtA46YVbUqUbW3LnUNdXxMBh0cW+juJV
bfvl+gBQSwMEFAACAAgAjkYkSX/NT3a+AQAAAgMAABEAHABmdWxsX3Jlc3VsdHMuanNvblVUCQAD
PEPMVz5DzFd1eAsAAQT1AQAABBQAAACdkk9vnDAQxb8K8imVIJDNdpvQE8rSNsqmqRbSbU/IwLBY
wX9kD8muon73jmEPPaQ9lNN4PLz387Oz9bra5sXjpizOXhmCQ8fSV+ZQW74HXwrVwgHatvYLqVuw
yle81hahjcyIkbHimSOc9ygHv2fB0CZL2adNdveThQwOBhqapta3rCiowxscOQ2z8vY+f3gsg1O/
565ySCaWpWhH+EVfyDrucGKRBDUBckW199+LLrLgeWnRWS2jumt40/8nTf7jhOJtWy29wI4i0C++
epmqyGiHEpwjmKgZtHrDa5t/pliL24ev/za82WbFl7+cmwjckzDG/7i4XiUhU6OsLOzpvE5oRUFc
hExjD7ZqLHf9HM16lGYLdGu2tADR5fJDsqK+lxMKyWE0E0vHBwezphQkqPYsJY+BH/WI1fQUqlYQ
D4u/62GkA8drjjzOd0W8g/pOYLyZZsvp1YTsGazHYulyVjXcOY+0XCTXVyEz4gDDSRcUr4c/IFq6
SzJKrtL3i+w+0CoogChlDTZIlmGwSC5Wp5SMBcQjiWPTz1nR+xAHrzfFdDmbdwN/OlIjZCNBVPMV
cPSxVZ3ws1PM7z7+BlBLAwQKAAAAAABXRSRJAAAAAAAAAAAAAAAABQAcAGh0dHAvVVQJAAP1QMxX
PkPMV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAB3RSRJAAAAAAAAAAAAAAAACwAcAGh0dHAvdGVz
dHMvVVQJAAMxQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAABbRSRJAAAAAAAAAAAAAAAA
EQAcAGh0dHAvdGVzdHMvY2FjaGUvVVQJAAP9QMxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIA
CABaRSRJJWblKPEAAACJBAAAMAAcAGh0dHAvdGVzdHMvY2FjaGUvbWVtb3J5LWNhY2hlLXBydW5p
bmctc3RkZXJyLnR4dFVUCQAD/EDMV/xAzFd1eAsAAQT1AQAABBQAAADtksFKBDEMhs/OU+Sol2F3
doSliAdnDysoCIMoiIdMm+2W7aZDm1F8e1v15klUcMFjQvIlf/70NAK0MFuqtlGnDdBzms/b2geN
HqLoSGOI4tg+LBZts3yEs0vehHMFPlib05AEo6S6rqv+y6gVDZPNrERyTSmhpat36kVu2inIjZ7M
d8BluS7wxtkporjAd062XdiPnkq0RjaeooIO9ZYMzIAYhzwTBtQ7YpP+pCqS20SxGLFyWtSnpRUc
V0cnB3y335aXKR/WvOlCIRviS+by5P0/+afIjp0UZJ/p+WuKowrubzrQgZl0+aRc84TemeoVUEsD
BBQAAgAIAFtFJEnLo9o1gwAAAMAAAAA9ABwAaHR0cC90ZXN0cy9jYWNoZS9uZXR3b3JrLWVycm9y
LWR1cmluZy1yZXZhbGlkYXRpb24tc3RkZXJyLnR4dFVUCQAD/UDMV/1AzFd1eAsAAQT1AQAABBQA
AACdzLEKwjAQgOG9T3GjLmLTCCWIS10cBCGDgjjE9IwH4VKSq+LbG1/B9efnszgBaFj3RiuzUYDv
0rZ6FZN3EbL4jFPKQhyuXadVf4PtHu9z2BkoyOMRS3EBzyTPwQmGlD8GFjzHuGzs3zIxyY+0VafE
B34kA5fTAD4xo5fa6vNykcbmC1BLAwQKAAAAAABXRSRJAAAAAAAAAAAAAAAAEgAcAGh0dHAvdGVz
dHMvY2FudmFzL1VUCQAD9UDMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAV0UkSQAAAAAA
AAAAAAAAABgAHABodHRwL3Rlc3RzL2NhbnZhcy93ZWJnbC9VVAkAA/VAzFc+Q8xXdXgLAAEE9QEA
AAQUAAAAUEsDBBQAAgAIAFdFJEnrOvvSbwAAAKQAAAA7ABwAaHR0cC90ZXN0cy9jYW52YXMvd2Vi
Z2wvb3JpZ2luLWNsZWFuLWNvbmZvcm1hbmNlLXN0ZGVyci50eHRVVAkAA/VAzFf1QMxXdXgLAAEE
9QEAAAQUAAAAC04tUFAwUTCwsDIxsjIxVUgtLzY0NNHLyU9OzFEoKkkuSi3ILyrJzEuPNjY2MTSM
VbDxzEvLt7NSyMlPTwcKKxSXJBaVFOvp6XEFk2yUS2pSaTrQrOLUEt/U4uLE9FQfiKlOQE3ZVgpA
jTmpKVwAUEsDBAoAAAAAAFhFJEkAAAAAAAAAAAAAAAAvABwAaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9VVAkAA/hAzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsD
BBQAAgAIAFhFJEll0RmIfwAAAJUAAABRABwAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25h
dHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC1zdGRlcnIudHh0VVQJAAP4
QMxX+EDMV3V4CwABBPUBAAAEFAAAAA2IMQ7CMAwAd17hD9CkBQTK3qULUuEDaeKqqYQd2a4Evye6
4U63mdXgXD/cO9/ow8N77xKTIVkuWlmLFaZoFtP2aVMj5YW/TlD5kITaakVBOW8Yc5OalFoxd7uG
4RoutwDTC8Z5fs7w/lUcRVgCHJRxLYQZigKxQSTgZcdkpz9QSwMEFAACAAgAV0UkSWXRGYh/AAAA
lQAAAGoAHABodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3Jl
ZmVyZXItaGVhZGVyLXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLWFsd2F5cy1zdGRlcnIudHh0
VVQJAAP2QMxX9kDMV3V4CwABBPUBAAAEFAAAAA2IMQ7CMAwAd17hD9CkBQTK3qULUuEDaeKqqYQd
2a4Evye64U63mdXgXD/cO9/ow8N77xKTIVkuWlmLFaZoFtP2aVMj5YW/TlD5kITaakVBOW8Yc5Oa
lFoxd7uG4RoutwDTC8Z5fs7w/lUcRVgCHJRxLYQZigKxQSTgZcdkpz9QSwMEFAACAAgAV0UkSWXR
GYh/AAAAlQAAAGsAHABodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5k
Ym94L3JlZmVyZXItaGVhZGVyLXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLWRlZmF1bHQtc3Rk
ZXJyLnR4dFVUCQAD9kDMV/ZAzFd1eAsAAQT1AQAABBQAAAANiDEOwjAMAHde4Q/QpAUEyt6lC1Lh
A2niqqmEHdmuBL8nuuFOt5nV4Fw/3Dvf6MPDe+8SkyFZLlpZixWmaBbT9mlTI+WFv05Q+ZCE2mpF
QTlvGHOTmpRaMXe7huEaLrcA0wvGeX7O8P5VHEVYAhyUcS2EGYoCsUEk4GXHZKc/UEsDBBQAAgAI
AFhFJEll0RmIfwAAAJUAAABpABwAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2ht
ZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVmZXJlci1uZXZl
ci1zdGRlcnIudHh0VVQJAAP3QMxX90DMV3V4CwABBPUBAAAEFAAAAA2IMQ7CMAwAd17hD9CkBQTK
3qULUuEDaeKqqYQd2a4Evye64U63mdXgXD/cO9/ow8N77xKTIVkuWlmLFaZoFtP2aVMj5YW/TlD5
kITaakVBOW8Yc5OalFoxd7uG4RoutwDTC8Z5fs7w/lUcRVgCHJRxLYQZigKxQSTgZcdkpz9QSwME
FAACAAgAWEUkSWXRGYh/AAAAlQAAAG8AHABodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0
dGFjaG1lbnRzYW5kYm94L3JlZmVyZXItaGVhZGVyLXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVy
LW5vLXJlZmVycmVyLXN0ZGVyci50eHRVVAkAA/dAzFf3QMxXdXgLAAEE9QEAAAQUAAAADYgxDsIw
DAB3XuEP0KQFBMrepQtS4QNp4qqphB3ZrgS/J7rhTreZ1eBcP9w73+jDw3vvEpMhWS5aWYsVpmgW
0/ZpUyPlhb9OUPmQhNpqRUE5bxhzk5qUWjF3u4bhGi63ANMLxnl+zvD+VRxFWAIclHEthBmKArFB
JOBlx2SnP1BLAwQUAAIACABYRSRJZdEZiH8AAACVAAAAfgAcAGh0dHAvdGVzdHMvY29udGVudGRp
c3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQtd2l0aC1t
ZXRhLXJlZmVyZXItbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUtc3RkZXJyLnR4dFVUCQAD90DM
V/dAzFd1eAsAAQT1AQAABBQAAAANiDEOwjAMAHde4Q/QpAUEyt6lC1LhA2niqqmEHdmuBL8nuuFO
t5nV4Fw/3Dvf6MPDe+8SkyFZLlpZixWmaBbT9mlTI+WFv05Q+ZCE2mpFQTlvGHOTmpRaMXe7huEa
LrcA0wvGeX7O8P5VHEVYAhyUcS2EGYoCsUEk4GXHZKc/UEsDBBQAAgAIAFhFJEll0RmIfwAAAJUA
AABqABwAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZl
cmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVmZXJlci1vcmlnaW4tc3RkZXJyLnR4dFVU
CQAD+EDMV/hAzFd1eAsAAQT1AQAABBQAAAANiDEOwjAMAHde4Q/QpAUEyt6lC1LhA2niqqmEHdmu
BL8nuuFOt5nV4Fw/3Dvf6MPDe+8SkyFZLlpZixWmaBbT9mlTI+WFv05Q+ZCE2mpFQTlvGHOTmpRa
MXe7huEaLrcA0wvGeX7O8P5VHEVYAhyUcS2EGYoCsUEk4GXHZKc/UEsDBBQAAgAIAFhFJEll0RmI
fwAAAJUAAABuABwAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJv
eC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVmZXJlci11bnNhZmUtdXJsLXN0
ZGVyci50eHRVVAkAA/hAzFf4QMxXdXgLAAEE9QEAAAQUAAAADYgxDsIwDAB3XuEP0KQFBMrepQtS
4QNp4qqphB3ZrgS/J7rhTreZ1eBcP9w73+jDw3vvEpMhWS5aWYsVpmgW0/ZpUyPlhb9OUPmQhNpq
RUE5bxhzk5qUWjF3u4bhGi63ANMLxnl+zvD+VRxFWAIclHEthBmKArFBJOBlx2SnP1BLAwQKAAAA
AABXRSRJAAAAAAAAAAAAAAAAEwAcAGh0dHAvdGVzdHMvY29va2llcy9VVAkAA/VAzFc+Q8xXdXgL
AAEE9QEAAAQUAAAAUEsDBBQAAgAIAFdFJEkAqYzGxwAAAFMCAABBABwAaHR0cC90ZXN0cy9jb29r
aWVzL2RvdWJsZS1xdW90ZWQtdmFsdWUtd2l0aC1zZW1pLWNvbG9uLXN0ZGVyci50eHRVVAkAA/VA
zFf1QMxXdXgLAAEE9QEAAAQUAAAA5ZExa8MwEIXn+lfcmCwlThQoomRxhmYoFExJIHQ4S2dZVDkZ
6ZzSf185a7Z27HYPju/x3mtpBFCwetJqrdUW6CvXtXoM0WCAJCbRGJN4dufNRtX1BzzvqZvcTkMW
TNJE7r2bEoqPfPQyNPEyBprVC7INlDQ0aAaysAJi7EK5OjSfxDZX7e/NSd4zpQP3ce+N6Du2hkX1
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
lPwrgE+JKZmSKZmSKZlyPZ8QRvyEwJRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZT8nyN7iSmZ
km+Pfyj/9Vce/+fK6+jg9ajsLVBLAwQUAAIACABdRSRJI6diXMwAAAA3AgAAMgAcAGh0dHAvdGVz
dHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQtcmVmZXJlci1zdGRlcnIudHh0VVQJAAMBQcxXAUHMV3V4
CwABBPUBAAAEFAAAALWQMW/CMBCF5/IrbqRLREgQlYUYCANI7YQQQ9XhYh/Gwpwj+6Kq/74OdOtU
RR3vSe97996BOoAaZi+qnqvFEugzlWVd+KDRQxQdqQtRHNv3qqrL6gNWez6HtQIfrM0yJMEoqSiK
yeHPqC21vc2sRPJGKaGl1wd1k01XBdnoyYwBD881gc/O9hHFBT45uTTh1nkarh2y8RQVNKgvZGAG
xNjmTGhRX4lNGtfqmCgOe22dFvWLrWA6eXoelcDmZ7h7LxSyIX5lLvfe/yf5G1BLAwQUAAIACABd
RSRJmC7VdeUAAACsAgAAKgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9jdW1lbnQtc3RkZXJy
LnR4dFVUCQADAkHMVwJBzFd1eAsAAQT1AQAABBQAAAC1kUFLA0EMhc/2V+RoL9J1VyxD6cHtQaEF
YREF8ZCdTadDx2SZySr+e2fFi3gQWXpMyPte8tJQD1DBYmmqS3N1DfSeiqK6CGIxQFQbqZeont1z
WVZF+QKrDbWDWxtIxN2OUkJHj14PNSo5iR8GznkIYT5rfpCX/yB79joim0z3wne8FwNP9zVYYSar
uZdn3jD4boJLIv1efyvO5YmbLDoayMJAk8CKUWvhvXdDxHHbr3zktQ80VrfIXaBooEZ7oA4WQIxt
9oQW7TGnmqZd9ZAojpltvFXzi53/MzubT3I41d//In8CUEsDBBQAAgAIAGBFJEnJqf9H6gAAAMYD
AAA5ABwAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1wbGF5LXN0cmVhbS1jaHVua2VkLWljeS1zdGRl
cnIudHh0VVQJAAMEQcxXBEHMV3V4CwABBPUBAAAEFAAAAN2TwUrEQAyGz+5T5Lh7kdZWWAbZg93D
CgpCEQXxkE6zs8OOmTKTKr69qXjztBYvHhOS70/+kJYGgBqKtakvzOUa6D2XZX0eosUASWyiISbx
7J6rqi6rF7jaUje6jYFM3N9Rzujo0cuhQSEX04eBJY8hrBbtr8mevUzIVuk+8g3vo4Gn+wZsZCYr
mtOaNwy+n6GSSb7Hv43OacW1Nh0NaGOgWWDBJE3kvXdjwmnaL3/i6xBoinbIfaBkoEF7oB4KIMZO
NaFDe1RX87ytHjKlybOtt2J+sPU+i7PVLIW/uvsJ5MoUxT8nn/IFn1BLAwQKAAAAAABvRSRJAAAA
AAAAAAAAAAAAHgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL1VUCQADIkHMVz5DzFd1
eAsAAQT1AQAABBQAAABQSwMEFAACAAgAZkUkSSSqnEhQAQAAlwQAAEIAHABodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQtYnVmZmVyLXN0ZGVyci50eHRVVAkA
AxBBzFcQQcxXdXgLAAEE9QEAAAQUAAAAzZJBT8MwDIXv/ArfGIetSdt1DIkDMCaQmITY4DJNk5e4
W0SaVE4KlF9PJwSc4MpuT7Zlf+/JS3F6lmdn4nQwEmIFJeN2hs6U3ur1fRN2l22kAMFsHVpLGoj5
vC8LkRfQe56a7+FrZs/rR0dvNalI+taZOMGIJ9Cbk/JOw3EZ2/oYMPoKyCnfuEhM+qSrQDL3DSu6
QrWj5MozzUgb/FF9OSzSQZqL5J599N0iCsnUc4XxBp22xCGZ+RdDyR5pL6adkYpc/OIbKLDGEcgi
E0epkEVfjPsih0/7Ug7GUsCkqeoHcpp4wUTLLMuHXa/IUylXcLt1no3bQucmsrcLU9EGA0GgCJsW
lDXdPdiQwqarXjzNsaotXTZlSTwxobbY3mFLDK8YALXu0oweEELr1I69M+/Ev6Blv6Flskj/F234
R2rif9FGh5va+GB/LZWHkNoHUEsDBBQAAgAIAGdFJEmGKyoPPAEAAHoDAABQABwAaHR0cC90ZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1iaXRy
YXRlLXN0ZGVyci50eHRVVAkAAxJBzFcSQcxXdXgLAAEE9QEAAAQUAAAA5ZHLbsJADEX3fIV3wCLk
SWiRuihQVKQioUK7QQiZGSeMOpmJPJO26dc3SH18BLura8u+x95HN9MsncbJKM8mBygYyzUaVVgt
j5vGnWetJwdOlQa1JgnEfBfEeZTlMHhbqr/mB2bLxxdDnzUJT3JllF+gxyEMtiSskdAvfFv3Ab2t
gIywjfHEJIedA+HWNixojuJM4dwyrUkq/FdBPM6TUZJF4Yatt90gcuHScoX+EY3UxC5c23dF4SXS
RSw7kIqM/803EqCVIYjzNOrt/6Hz5AqhJ1fz6SSK8yC6DaIMfvCz0SRJYdFU9TMZSbxjon2aZuOu
lmdJHB9gVRrLypTQ0Xi2eqcqOqEjcOTh1ILQqtsHJxLYdO796xarWtOsKQrihXK1xvYJW2L4QAco
ZXdNbwHBtUac2Rr1Rdz7BlBLAwQUAAIACABsRSRJtsLk+IsAAACbAAAAOQAcAGh0dHAvdGVzdHMv
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXBsYXktc3RkZXJyLnR4dFVUCQADG0HMVxtB
zFd1eAsAAQT1AQAABBQAAAANyLEOgjAQANDdr7gfwJS2EGHTsJg4KXExDkd7YJPSkivE1K+X7eVJ
UdaFaAqhQZxarVopj42uoNvm5U7BEvdM9FJKV6ota1XW8g3XKUR2YQITw8rR926mARNBohWGDMY7
CrvI4Lbv+fnAefF02caRuHNp8ZhvmInhiwnQWrKwRkBIOZgPx+B+xIc/UEsDBBQAAgAIAG1FJEmF
4XHIqAAAAAcDAAA7ABwAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
cmVtb3ZlLXN0ZGVyci50eHRVVAkAAx5BzFceQcxXdXgLAAEE9QEAAAQUAAAAzdC9DoIwGIXh3av4
bgDTP0hh07CYOClxMQ6lfGCT0pIWYurVywXoLNvJOz05jNAiI2VGBBBZCV6xYs9lCfUyThd0HYYm
IN45FzmvaJFTKh9wGpwPxg2gvZuDt40ZsVURIeIMbQJtDbp1oVbLWg+3qxoni8el7zHUJk5WpbNK
GOClIqiuww5mDwpicvoZvDNvDDv2jVay7dLEL5pglP2XJrf6miB8C7QPUEsDBBQAAgAIAG9FJEmD
IkCFpAAAANEBAABGABwAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
c291cmNlYnVmZmVyLW1vZGUtc3RkZXJyLnR4dFVUCQADIkHMVyJBzFd1eAsAAQT1AQAABBQAAADF
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
Z4sZNAFfTCxJ0vl1TMKkbEEISYRBF2njI3yXzsddj+1v5QIth66/k5qrXfWw1KFhZzwuhQgdHAM+
Avh5Fc6CFwar/tDiE1BLAwQUAAIACABlRSRJ7d6F7MMAAAAkAwAALAAcAGh0dHAvdGVzdHMvbWVk
aWEvdmlkZW8tbG9hZC10d2ljZS1zdGRlcnIudHh0VVQJAAMOQcxXDkHMV3V4CwABBPUBAAAEFAAA
AO2RsWrDMBCG5/opbmyWEGMPQZQOtYcU2smEDCXDWTrLwurJSGdK3j5q6ZatJlvHg/u/j7u/oxmg
ht1e1ZUqd0BfqSzrrQ8aPUTRkeYQxbH9qKq6rM7w1FK/2GcFieSdUkJLb8HavPGSQ5OCHPRkiu7v
YMEoTeDB2SWiuMAnJ2MTPmdP39MB2XiKChrUIxnIbMY+O6FHPRGbtEZOckwUX3kIrdOibtgKHouH
zSoDm9/H/dyFQjbES+by4v068n8j92jkClBLAwQUAAIACABlRSRJTmYKTd8AAABsAwAALwAcAGh0
dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxheS1wcm9ncmVzcy1zdGRlcnIudHh0VVQJAAMOQcxXDkHM
V3V4CwABBPUBAAAEFAAAANWRMUsEQQyFa+9XpPQauWW3kEEs3CtOUBAWURCL7GxubrgxWWayiv/e
rNhZCG6jZULel5eXjkaABjbnrqldtQF6K1XVnCXxmCCrzzRK1sjhqa6bqn6Giy31U7h0UIiHWyoF
Az1EPbSoFCS/OzjlKaX1qvs1OXLUGdkZPQpf814cPN614IWZvFrPZl4xxWHBlv/vX7/s30gINnFl
oqMDEyZaBFbM2grvY5gyzm4/85GXMdFc7ZCHRNlBi/5AAxibsbed0KM/Wqpl2VX3hfKc2TZ6dd/Y
9p/VyfpP/v0n8gdQSwMEFAACAAgAZ0UkSc9lfP2FAAAAwAAAAD0AHABodHRwL3Rlc3RzL21lZGlh
L3ZpZGVvLXBsYXktc3RhbGwtYmVmb3JlLW1ldGEtZGF0YS1zdGRlcnIudHh0VVQJAAMSQcxXEkHM
V3V4CwABBPUBAAAEFAAAAJXMsQrCMBCA4b1PcaMu0pAMEsSlLg6CkEFBHGJ6xkC4K8lV8e2No6Pr
z8/ncAIw0K+t0Vb1gK+qlFllDj5DkVBw4iKJ4kVro/QVNju8zXFroSKNB6zVRzwleQxeMHJ5W1jQ
nPOycz+y+kNOlORLuqYnpj3d2cL5OEBgIgzSWnuePqex+wBQSwMEFAACAAgAaEUkSVVkqPS7AAAA
kgEAACsAHABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXF1ZXJ5LXVybC1zdGRlcnIudHh0VVQJAAMT
QcxXE0HMV3V4CwABBPUBAAAEFAAAAKWQMWvDMBCF5/hX3NgsJcIagggd4gwttFMIGUKHs3SWRdST
kc6E/PuoJVu3ZHxw7/u4t6cJQMNqbXRrlAa6FKX0a0wWI2SxmaaUJbA/ta1W7TdsdtTP/s1AIfmi
UtDTZ/K+Xmxr6WygFiO5Zv84WDBLl3gIfs4oIfExyNilnynSb3pHdpGygQ7tSA5WQIx9dUKP9kzs
yjNykkOh/MFD2gUr5h/bwEuzWD5lYHcf7u8vFPIpXyuX5xiXzQ1QSwMEFAACAAgAaUUkSdGqv4P2
AAAAWAUAACoAHABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXJlZGlyZWN0LXN0ZGVyci50eHRVVAkA
AxZBzFcWQcxXdXgLAAEE9QEAAAQUAAAA1ZJBS8QwEIXP7q+Yo3uRLe1CCOLB7kHBhYUiCuJhms5m
w8ZJSaYr/ntT8eZtaxGPCTPfzLz3GuoBKlgpXZW6WAO9p6Kornww6CGKidSHKI7tS1lWRfkK1xtq
B3ujIRF3W0oJLT05OdQoZEP80HDJg/fLRXM22bGTEdlkugt8z/ug4XlXgwnMZCT/5ZoTetdNmJJI
vtd/CNbmitvcdNSQGz1NAgtGqQPvnR0ijtt+6RPeek/j6w658xQ11GgO1MEKiLHNM6FFc8yqpmlX
PSaKo2YbZ0T/YGd/FhfLSRPm8v0/ks/Pqporq+ovs6pmz6qazfffJH8CUEsDBBQAAgAIAGpFJElt
E/7/4AAAAFICAAArABwAaHR0cC90ZXN0cy9tZWRpYS92aWRlby11c2VyYWdlbnQtc3RkZXJyLnR4
dFVUCQADF0HMVxdBzFd1eAsAAQT1AQAABBQAAAClkUFLA0EMhc/2V+RoL9Jl99AO4qHbgwUFYSkV
xEN2Np0OnSbLTFbx33dWPCkIuseE5HsvLw31ABUslqYqTbEEek9FUd0EsRggqo3US1TP7qUsq6J8
hdsNtYO7M5CIu0dKCR3tvR5rVHISPwxc8xDCfNb8m+zZ64hsMt0Lb/kgBp6farDCTFZzL8+8YfDd
N5XVn/zrl/0HcS5PrPPSyUBeDDQJrBi1Fj54N0Qc3X7mI+c+0FjdI3eBooEa7ZE6WAAxtlkTWrSn
nGqadtUuURwz23ir5gc7/2d2NZ+k8PvfL1BLAwQKAAAAAACJRSRJAAAAAAAAAAAAAAAAEAAcAGh0
dHAvdGVzdHMvbWlzYy9VVAkAA1FBzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAGlFJEle
hPRp5gAAAGIBAAAtABwAaHR0cC90ZXN0cy9taXNjL2NvcHktcmVzb2x2ZXMtdXJscy1zdGRlcnIu
dHh0VVQJAAMVQcxXFUHMV3V4CwABBPUBAAAEFAAAAHWNQUvDQBCF7/0Vc5JEpJOKogwlINpcFJVE
2vN2M0lXkkzYnQj+exMbUQoyp/fe9+Zt8vwlJ8iMa7gEFTDeHtwHQxj2noMM3jJU4uGg2hPi6vJm
mYy3otskSbB1weIPF9BK25sQlu99vcCtNEM7mg9GDW52Be54/+gUi294UvfiGRsxJXucd9FW+MS1
sZ9jfnf0lrbvo+urJAaCoEadhZyrV/Xr+QfRaSWFfyMi69koR1a6oLB7y4gK9a6r4ezit5Z50/Lk
HLEtW5U/g89SMpynExC0JKqGzqqTbr0XaSCa23EaL74AUEsDBBQAAgAIAGlFJElBdEE/xAAAAP4A
AAA/ABwAaHR0cC90ZXN0cy9taXNjL2RlbGV0ZS1mcmFtZS1kdXJpbmctcmVhZHlzdGF0ZWNoYW5n
ZS1zdGRlcnIudHh0VVQJAAMWQcxXFkHMV3V4CwABBPUBAAAEFAAAAE2OQUvDQBSE7/0Vc1Swstts
awzipbGnIKXqqZSyJK/1YbIbXl4q+uu7BYUOzGHgg/lmxi6m5nFqHExeuKyw+b17mKEcu35DoSF5
F6JtljlnCzvP54t8h7XEnkR/0PKg4HDyLTc4RLm081rAGoOb/hobUPsQoqKOQT0HvH5U1e1ke/Wa
7fCUglW5XO8r7lipwXMKVnz82yUPX0tff1JyOHHS27+R/vsUeBFJFt/CyuGIOKa7C4wDt3QHlTHU
Xgka8UsSJ2dQSwMEFAACAAgAaUUkSa7EcYnDAAAA/gAAAFsAHABodHRwL3Rlc3RzL21pc2MvZGVs
ZXRlLWZyYW1lLWR1cmluZy1yZWFkeXN0YXRlY2hhbmdlLXdpdGgtZ2MtYWZ0ZXItdmlkZW8tcmVt
b3ZhbC1zdGRlcnIudHh0VVQJAAMWQcxXFkHMV3V4CwABBPUBAAAEFAAAAE2OTUvDQBRF9/0Vd6lg
ZcZMSxzETWNXQYofq1LKkLzWh8lMeHmp6K93Cgq9cBcXDtxzZ+xybu7nxsGU3hXelre2dKimfnih
2JK8CdG2KJyz3i7KxbLcYSNpINFvdDwqOJ5Cxy0OSc7tg3pYY3A1XGIjmhBjUjQpauCI5/e6vp5t
L193eMjBulpt9jX3rNTiMQdrPv7tisfPVWg+KDucOOvtX0n/fTyeRLLFl7ByPCJN+e4M48Ad3UBl
ik1Qgib8kKTZL1BLAwQUAAIACACJRSRJFTU1knoAAAC8AAAAKgAcAGh0dHAvdGVzdHMvbWlzYy94
c2x0LWJhZC1pbXBvcnQtc3RkZXJyLnR4dFVUCQADUUHMV1FBzFd1eAsAAQT1AQAABBQAAACNjkEO
wyAMBO95hT9AIO2hFb8hxFUsGYyMkfr8EuUD1V5WO4fZLKURJyOpgKqiET7ECKdZi95vj9caZrb4
DiH4Qj17xS5DM3b/7WxuT4ej0kTNDaV1bsBUEZ6AjAWrwU2XSeJdIcKoaZ8aE2BJx3+6Kn3k87qX
LDEvP1BLAwQKAAAAAACBRSRJAAAAAAAAAAAAAAAAFAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQJ
AANCQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABjRSRJJ1UbLcoAAADdAQAAVQAcAGh0
dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRlby1ibG9ja2Vk
LW5vLWNyb3Nzb3JpZ2luLXN0ZGVyci50eHRVVAkAAwpBzFcKQcxXdXgLAAEE9QEAAAQUAAAApZAx
a8MwEIXn+lfc2CzGqUUpomSoM7SQTCFkKB3O0kURUU9GOhPy7yM33ToVj/fgfe/e29EAoKB50arV
zTPQJS+Xqg7RYIAkJtEQk3h2n22rntQXvH7wMa40hOhckSELJsl1XVe7f6PW1I+usDLJlnJGR5s7
9a2YzhqKMZCdA56e6yIfvRsTio988HLq4vcQaLrekW2gpKFDcyILDRBjXzKhR3Mmtnleq32mNO21
9kb0H7aGx+phMSuB7e9wP71QyMV0LVweQ1hUN1BLAwQUAAIACABjRSRJHggqbtoAAACsAgAASAAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRlby1sb2Nh
bGhvc3Qtc3RkZXJyLnR4dFVUCQADCkHMVwpBzFd1eAsAAQT1AQAABBQAAADNkUFLA0EMhc/2V+So
F9m6g8ggHtweWqhQWERBPGRn0+nQaWaZyVb892bFm8dF8JiQ9+XlpaUBwEB1Z01tq1ugj7JcmuuY
HEbI4jINKUtg/1bX5sa8w/2KutE/WCjE/ROVgp5eghwaFPIpf1q45DHGq0X7D8mBg0zIVukh8Yb3
ycLrrgGXmMmJ9nTmjDH0s/zLj/1t8l4nHlV0tKDCSLPAglmaxPvgx4yT2+980mmINFVr5D5SttCg
O1APFRBjpzuhQ3fUVMu8q54L5SmzVXBif7H1P4uLv/z7F1BLAwQUAAIACABkRSRJt/r93+EAAACs
AgAARwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRl
by1yZWRpcmVjdC1zdGRlcnIudHh0VVQJAAMLQcxXC0HMV3V4CwABBPUBAAAEFAAAAM2RQUvEQAyF
z+6vyHH3It3toDKIB7sHBQWhiIJ4SKfZ2WHHTJlJFf+9qXhSEKQXjwnJ915eWhoADFRn1tS2OgF6
K+u1OY7JYYQsLtOQsgT2T3VtNuYZzrfUjf7CQiHub6kU9PQQZN+gkE/53cKSxxhXi/YfkgMHmZCt
0kPia94lC493DbjETE60pzOvGEP/TeX0T/7ly/5N8l4nLnXpYEEXI80CC2ZpEu+CHzNObj/zSS9D
pKm6Qu4jZQsNuj31UAExdqoJHbqDplrmXXVfKE+ZbYMT+4Ot/1kcrWYp/P73D1BLAwQKAAAAAABj
RSRJAAAAAAAAAAAAAAAAHgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL1VUCQADCUHM
Vz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAY0UkSVCyjNiCAAAAGgEAAD4AHABodHRwL3Rl
c3RzL3NlY3VyaXR5L2NsaXBib2FyZC9jbGlwYm9hcmQtZmlsZS1hY2Nlc3Mtc3RkZXJyLnR4dFVU
CQADCUHMVwlBzFd1eAsAAQT1AQAABBQAAADNzLEKwjAQgOG9T3GjLtKQDBLEpS4dBCGDgjjE9IyB
cFeSq+LbG9/C9efnczgDGOi31mjbG8B3VcpsMgefoUgoOHORRPGqtVHqBrsD3pe4t1CRpiPW6iOe
kzwHLxi5fCysaMl53bk/lBMl+ZGu6YlppAdbuJwGCEyEQVprz8vnNHVfUEsDBAoAAAAAAH1FJEkA
AAAAAAAAAAAAAAAqABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kv
VVQJAAM9QcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABkRSRJxxrrMNYAAAD4AQAASwAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2F1ZGlvLXJlZGlyZWN0
LWFsbG93ZWQtc3RkZXJyLnR4dFVUCQADC0HMVwtBzFd1eAsAAQT1AQAABBQAAAClkMFKxEAQRM/m
K/qoF0lIQBnEg9mDggsLQRTEQ2emd3bYsTvMdHbx752IN2/mWFD1iqqBJoAO6lvTtaa+ATrnpumu
o1iMkNQmmiRpYP/etl3TfMDdhsbZ3xvIpFvKGT09i/fF8VBCRwMlGMlVw//Bikl74X3wc0INwq9B
D718TpEW9YjsIiUDPdoDOaiBGMfSCSPaI7HLa8pJXzKlJ97LJlg1f9gGLquLq1UN7H6P+9mFSl7S
V+HyHOMacuCgC3Io9PLTssHA264HK8xkl++K54QxuOobUEsDBBQAAgAIAGNFJEmZNZ2F1gAAAPgB
AABMABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvYXVkaW8tcmVk
aXJlY3QtYWxsb3dlZDItc3RkZXJyLnR4dFVUCQADCkHMVwpBzFd1eAsAAQT1AQAABBQAAAClkMFK
xEAQRM/mK/qoF0lIEBnEg9mDggsLQRTEQ2emd3bYsTvMdHbx752IN2/mWFD1iqqBJoAO6lvTtaa+
ATrnpumuo1iMkNQmmiRpYP/etl3TfMDdhsbZ3xvIpFvKGT09i/fF8VBCRwMlGMlVw//Bikl74X3w
c0INwq9BD718TpEW9YjsIiUDPdoDOaiBGMfSCSPaI7HLa8pJXzKlJ97LJlg1f9gGLquLq1UN7H6P
+9mFSl7SV+HyHOMacuCgC3Io9PLTssHA264HK8xkl++K54QxuOobUEsDBBQAAgAIAGRFJEk+XxaY
pwAAAIoBAABYABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvYmxv
Yi11cmwtZG9lcy1ub3QtbWF0Y2gtc291cmNlLXNlbGYtc3RkZXJyLnR4dFVUCQADC0HMVwtBzFd1
eAsAAQT1AQAABBQAAADdj7EOgjAURXe/oiMOUCggSOKgRBMHIwkjMeRZXrBaKXlUE/5ejIN+g9u5
0zm38tMsCjM/8YIkODFl8Q7D2Mm6RFuQ6ZHsyAbVdqA1NgyJVm4gkjRmzm2n2g0MeDxfUdotkaF6
3z1BqwYsNnPmqN8FlvHSPEhiDvKCPDeEB2wUfMkN4oXwROTzSW2NHXsceKFhROKT7EP1+t3nSaZV
h0yIZTir/uHEC1BLAwQKAAAAAABlRSRJAAAAAAAAAAAAAAAARAAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvVVQJAAMO
QcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABlRSRJY/AN5OcAAAAmAwAAeQAcAGh0dHAv
dGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVx
dWVzdHMvdXBncmFkZS1pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWluLWZyYW1lLXN0ZGVyci50
eHRVVAkAAw5BzFcOQcxXdXgLAAEE9QEAAAQUAAAA7VE7T8MwEN75FTfC0MRurDZ4q9JWHRhQVKaK
wXWuxWpsp34w8Ou5lgpVAokFMSEv9/m+l3QbVktRSc6KitfPsFqvH1s8ZowJdmZ/BZuAKuEiBB8a
by26JAGd9tklDNiBcoCnpYTsAmq/d+aNvl9SGiBgHLyLCIKxm81V4v3XROJf4Nx0LWo0r9he9I3q
+63SB0mO58U3/nB7rgEjPp5Mpnewo/lEkmXJx9OC0eOyFqIqSeVz0BjLRGmFHcRP3QjOsx2Wxqn+
qX2YOSpofcJZ15FZlKA+BvhMIhlxIYf+N0v8n+SPT/IOUEsDBAoAAAAAAGVFJEkAAAAAAAAAAAAA
AAA9ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdXNlckFnZW50
U2hhZG93RE9NL1VUCQADDkHMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAZEUkSehIOu7k
AAAAQwIAAFMAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2Vy
QWdlbnRTaGFkb3dET00vYWxsb3ctYXVkaW8tc3RkZXJyLnR4dFVUCQADDEHMVwxBzFd1eAsAAQT1
AQAABBQAAACl0LFKBDEQBuDafYoptVn22BRHEAv3CoU7EBZREIvZZC4XLk6WZFbx7U3Uzkq2TMh8
k/8faQZQ0G216nW3BfrIm41qQzQYIIlJNMcknt1L3yvVv8L1PR/jjYYQnSvXkAWT5LZtm/Hf1I6m
xRUrkxwoZ3S0/1Fvy9BZQxkMZNfA9XND5KN3S0LxkZ+8nIb4NgeqpztkGyhpGNCcyEIHxDiVnTCh
ORPbvC7VY6ZU+9p5I/qPreGyubhatYHtb3HfuVDIxfRZXF5CWCN79lLJseilp5pBw/PDACYyk6nd
lTfvGLxtvgBQSwMEFAACAAgAZUUkSTj6J0m8AAAAkgEAAFMAHABodHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ctdmlkZW8tc3Rk
ZXJyLnR4dFVUCQADDUHMVw1BzFd1eAsAAQT1AQAABBQAAAClkDFvwjAQhefmV9wIS5XIHopVdSAM
ILUTqhhQh4t9OBbmHNkXVfx73KobWxmfdO/7dG9PE4CG9sVoZdoV0HfpOv0ck8UIWWymKWUJ7I9K
aa2+4HVDw+zfDBSSDyoFPb0n7+vFupbOBmoxkmv2/wcLZukTn4KfM0pIfAgy9ukyRfpJW2QXKRvo
0Y7koAViHKoTBrRnYlcekZN8Fso7PqVNsGLu2AYWzdPyIQO7v+F+/0Ihn/K1cnmOcdncAFBLAwQU
AAIACABlRSRJftpV54IAAADAAAAAawAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3VzZXJBZ2VudFNoYWRvd0RPTS9kZWZhdWx0LXNyYy1vYmplY3QtZGF0YS11cmwt
YWxsb3dlZC1zdGRlcnIudHh0VVQJAAMOQcxXDkHMV3V4CwABBPUBAAAEFAAAAJ3MsQrCMBCA4b1P
caMu0pAMEsSlLh0EIYOCOMT0jAfhriSp4tsbX8H15+dzOAMY6LfWaKt6wHdRymySBJ8g15BxllyJ
41VrY/QNdge8L3FvoSBPRyzFRzxTfQ6+YpT8sbDiJaV15/6Wian+SNd0Eh75IRYupwGCMGOorbXn
5RNN3RdQSwMEFAACAAgAekUkSZNRVVPdAAAAUgIAAEsAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS92aWRlby1yZWRpcmVjdC1hbGxvd2VkLXN0ZGVyci50eHRVVAkA
AzdBzFc3QcxXdXgLAAEE9QEAAAQUAAAApZFBSwNBDIXP9lfk2F6kw64gg3hwe1CwUFjEgnjIzqbT
odPMMpNV/PdmizfBg3tMyPte8tLSAFDD+tbWlb0xQJ/FmPo6JocRsrhMQ8oS2L9VVW3MO9xtqBv9
vYVC3G+pFPT0GuTYoJBP+cvCkscYV4v23+TAQSZkq/SQ+IkPycJ+14BLzOREezrzgTH0M1wKyc/6
z8l7nXhQ0cmCCiPNAgtmaRIfgh8zTtte8knnIdJUPSL3kbKFBt2RelgDMXbqCR26k6Za5l31UihP
mW2CE/uLrf9ZXK1mOfz9929QSwMEFAACAAgAekUkSb9FqCi8AAAAkgEAAEwAHABodHRwL3Rlc3Rz
L3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS92aWRlby1yZWRpcmVjdC1hbGxvd2VkMi1z
dGRlcnIudHh0VVQJAAM3QcxXN0HMV3V4CwABBPUBAAAEFAAAAKWQMWvDMBCF5/hX3JgsJcIqFFEy
xBkaaKdQOpQMZ+ksC6snI50p/fdVQ7Zuyfjg3vdx70QzgIbtk9GteVRA30Up/RCTxQhZbKY5ZQns
P9tWK3WG5wP1i98ZKCRvVAp6ek3e14t9LU0GajGSa063gwWzdImH4JeMEhJ/BBm79DVH+ksvyC5S
NtChHcnBFoixr07o0U7ErtwjJ3kvlI88pEOwYv6xDayb1eYuA7vrcJe/UMin/FO5vMS4aX4BUEsD
BBQAAgAIAHpFJEk5KY9u3QAAAFICAABmABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2Vj
dXJpdHlQb2xpY3kvdmlkZW8td2l0aC1odHRwLXVybC1hbGxvd2VkLWJ5LWNzcC1tZWRpYS1zcmMt
c3Rhci1zdGRlcnIudHh0VVQJAAM4QcxXOEHMV3V4CwABBPUBAAAEFAAAAKWRQUvEQAyFz+6vyNG9
yNZWkEH2YPegoCAUURAP6TQ7O+yYlJlU8d+bijfBgz0m5H0veeloBGhgc+ma2l2cA32UqmrOknhM
kNVnGiVr5PBS101VvcLVjvopbB0U4uGeSsFAT1EPLSoFyZ8OTnlKab3q/k2OHHVGdkaPwre8FwfP
Dy14YSav1rOZd0xxWOBSSH/Wv5MQbOLaREcHJky0CKyYtRXexzBlnLf9zkfexkRzdYM8JMoOWvQH
GmADxNibJ/Toj5ZqWXbVY6E8Z7aLXt0vtv1ndbJe5PD3378AUEsDBBQAAgAIAHpFJEmGlq7LggAA
AMAAAABZABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvd29ya2Vy
LWJsb2ItaW5oZXJpdHMtY3NwLWJsb2Nrcy1ldmFsLXN0ZGVyci50eHRVVAkAAzhBzFc4QcxXdXgL
AAEE9QEAAAQUAAAAncwxCgIxEEDRfk8xpTZiTAQJYrM2FoKQQkEsYnaMA2GyJLOKtzdewfbzeQ5H
AAPLjTXarleA76qUWaQcfIIioeCYixDHq9ZGqRts93if4s5CRR6OWKuPeCZ59l4w5vKxMOMppXnn
/paJSX6kazplPvAjW7icegiZGYO01p6XTzR0X1BLAwQUAAIACAB8RSRJY6qsbIIAAACoAAAAQAAc
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3hzbC1hbGxvd2VkLXN0
ZGVyci50eHRVVAkAAzxBzFc8QcxXdXgLAAEE9QEAAAQUAAAALY1BCsMwDATveYVeEDu9pPgVhb4g
uBtiUCwjKaX+fU0pe1qG2c1ytsKbF6kEVdFEe2HQ4d5SCMttnePIku4xxmDIlxbvIUt1VH/++0O4
5B4UJpdmWDDvjPljTFwqaCUwziHQD9gB+DRoekNtXCeSyp2WOdKOza8xRJuC7GpN1PGavlBLAwQU
AAIACAB9RSRJY6qsbIIAAACoAAAAUgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3hzbC11bmFmZmVjdGVkLWJ5LXN0eWxlLXNyYy0yLXN0ZGVyci50eHRVVAkAAz1B
zFc9QcxXdXgLAAEE9QEAAAQUAAAALY1BCsMwDATveYVeEDu9pPgVhb4guBtiUCwjKaX+fU0pe1qG
2c1ytsKbF6kEVdFEe2HQ4d5SCMttnePIku4xxmDIlxbvIUt1VH/++0O45B4UJpdmWDDvjPljTFwq
aCUwziHQD9gB+DRoekNtXCeSyp2WOdKOza8xRJuC7GpN1PGavlBLAwQUAAIACABkRSRJmaGJCYMA
AAAaAQAANQAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29ycy1wb3N0LXJlZGlyZWN0LTMwMS1zdGRl
cnIudHh0VVQJAAMLQcxXC0HMV3V4CwABBPUBAAAEFAAAAM3MsQrCMBCA4b1PcaMu0pqAEsSlLg6C
kEFBHGJ6poFwV5Kr4tsb38L15+ezOAFoaLdGK9NuAN+l6/QqsXcJsviME2eJFG5K6bW+w+6Ajzns
DRSk4YSluICXKGPvBAPnj4EFzSktG/uHcqQoP9JWPTId6ckGrucePBOhl9rq83IpDs0XUEsDBBQA
AgAIAGxFJEmG32d/tgAAANwBAAA6ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmlnaW4t
d2Vic3FsLWFsbG93ZWQtc3RkZXJyLnR4dFVUCQADHEHMVxxBzFd1eAsAAQT1AQAABBQAAADlz78K
wkAMBvDdp8gkLagnOIi3idZFRGj9M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnrEQJDiELA
BI5KwQYpGA8mBp7eTRljA8kciAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZUB66i79kD
bdVLazp8V4ZhVrZtsliuUtBgmT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPaaV0EcXSD
cTrK/urbF1BLAwQUAAIACABsRSRJKNl5NrAAAADuAAAAMgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y3Jvc3Mtb3JpZ2luLXdlYnNxbC1zdGRlcnIudHh0VVQJAAMcQcxXHEHMV3V4CwABBPUBAAAEFAAA
AGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEOwTP4
IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3c
yJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS
0h3m8ewNUEsDBBQAAgAIAG9FJEkwD9LKuQAAAJIBAAA9ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9s
b2NhbC12aWRlby1zb3VyY2UtZnJvbS1yZW1vdGUtc3RkZXJyLnR4dFVUCQADIkHMVyJBzFd1eAsA
AQT1AQAABBQAAAClkLGqAjEQRWv3K6Z8NqJvU0gQC9fCB89KxEIsZpMxBuNkSWYR/94odnZaXph7
DnM31AEoGE+1qnU9BrrmyUSNQjQYIIlJ1MUknt2+rtWvOsBsSW3v5hoyyZpyRkf/0blysSils4ZS
DGSrzedgwSRN5KN3fULxkXdeTk28dIEeaYVsAyUNDZoTWShsxrY4oUVzJrb5GznJNlP642NceiP6
ja3hpxoMvzKwfQ33/AuFXEy3wuU+hGF1B1BLAwQUAAIACABwRSRJpgJyyoIAAADAAAAAOgAcAGh0
dHAvdGVzdHMvc2VjdXJpdHkvbG9jYWwtdmlkZW8tc3JjLWZyb20tcmVtb3RlLXN0ZGVyci50eHRV
VAkAAyNBzFcjQcxXdXgLAAEE9QEAAAQUAAAAncwxCgIxEEDRfk8xpTZiTAoJYrM2FoKQQkEsYnbM
BsLMkswq3t54BdvP5zmcAAyst9ZoqxXguyplVpmDz1AkFJy4SKJ409pszB12B3zMcW+hIg0nrNVH
vCQZey8YuXwsLGjOedm5v+VESX6ka3piOtKTLVzPPQQmwiCtteflcxq6L1BLAwQKAAAAAABnRSRJ
AAAAAAAAAAAAAAAAIQAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L1VUCQADEUHM
Vz5DzFd1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAZ0UkSWfIEu3uAAAAiQQAAE4AHABodHRwL3Rl
c3RzL3NlY3VyaXR5L21peGVkQ29udGVudC9pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWluLWZy
YW1lLXN0ZGVyci50eHRVVAkAAxFBzFcRQcxXdXgLAAEE9QEAAAQUAAAA7dKxSgQxEAbg2n2KKbVZ
bm+3kCAWt1d4oCAsoiAWs8lcLlxusiSzim9vonZWcoLNlQmZL5k/M9AE0MHiUnWtalqgt9Q0Xe2D
Rg9RdKQpRHFsn9u2Wy5f4GrD23CtwAdr8zYkwSiprutq+DW1pnG22Uokd5QSWrr9Ule5aK8gF3oy
x8DlcX3grbNzRHGBH53s+nCYPJXVDbLxFBX0qHdkYAHEOOY7YUS9JzbpuK4eEsWS19ppUT9sBefV
2cUpt3/Ijc13cJ99oZAN8T27PHt/kv9KduykkEPW89SUH1XwdN+DDsykyyTlM6/onak+AFBLAwQU
AAIACABnRSRJfM1aNoIAAADAAAAAQgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50
L2luc2VjdXJlLWNzcy1pbi1pZnJhbWUtc3RkZXJyLnR4dFVUCQADEUHMVxFBzFd1eAsAAQT1AQAA
BBQAAACdzDEKAjEQQNF+TzGlNmI2KSSIzdpYCEIKBbGI2TEGwsySzCre3ngF28/nOZwADKw31mir
NOC7KmVWmYPPUCQUnLhIonjV2vT9DbZ7vM9xZ6EijUes1Uc8J3kOXjBy+VhY0JzzsnN/y4mS/EjX
9MR0oAdbuJwGCEyEQVprz8vnNHZfUEsDBBQAAgAIAHhFJEko2Xk2sAAAAO4AAAA/ABwAaHR0cC90
ZXN0cy9zZWN1cml0eS9zdG9yYWdlLWJsb2NraW5nLWxvb3NlbmVkLXdlYnNxbC1zdGRlcnIudHh0
VVQJAAM0QcxXNEHMV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oY
wjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV
7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5R
GpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsDBBQAAgAIAHhFJEko2Xk2sAAAAO4A
AABDABwAaHR0cC90ZXN0cy9zZWN1cml0eS9zdG9yYWdlLWJsb2NraW5nLXN0cmVuZ3RoZW5lZC13
ZWJzcWwtc3RkZXJyLnR4dFVUCQADNEHMVzRBzFd1eAsAAQT1AQAABBQAAABlzkELgkAQBeB7v2JO
oVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5NkWZppuJGxDsEz+CAETNBSJdgheePABM/L
h6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5SIVTOrCgunAd3MieaOtRWjPgZzIdq6rv
o812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ9BrMx+Z60jr30tId5vHsDVBLAwQUAAIA
CAB5RSRJkznSo+sAAACYBAAAOQAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvdmlkZW8tY3Jvc3Mtb3Jp
Z2luLWNhY2hpbmctc3RkZXJyLnR4dFVUCQADNkHMVzZBzFd1eAsAAQT1AQAABBQAAADtkkFLAzEQ
hc/2V8zRXmTrRtAgHtweLLQgLKIgHmaTaRoaJ0syq/jvzYoX8WItPelxYOZ7vPempR5AQXWuVa3V
BdBrns3USYgGAyQxifqYxLN7rGt1qp7gck7d4K40ZJIV5YyOltG5snFdjrYaymEgO2l/DxZM0kRe
ezckFB/53sumic99oHG6QbaBkoYGzYYsVECMXdGEDs2W2Oav4mfVbq7uMqUFr+PcG9Hf2BqOJ0fT
vRTYfgb34QuFXExvhctDCH+N7NnLiGwLvXQ75q7h4bYBE5nJjH2XnRcM3u7X6o9/dTfw/68ehvwO
UEsDBBQAAgAIAHlFJEklbwXOEwEAAOcBAAA/ABwAaHR0cC90ZXN0cy9zZWN1cml0eS92aWRlby1w
b3N0ZXItY3Jvc3Mtb3JpZ2luLWNyYXNoMi1zdGRlcnIudHh0VVQJAAM2QcxXNkHMV3V4CwABBPUB
AAAEFAAAAJ1OTU8CMRC98yvmCAd3u2xFbIwJgRhMNCG7GE0Ih9IdlsYyXfuB4d9bAno1mrm8N+/N
m1djB8CBjQUvxTUD/PRFwTNjlTTggnLYWRc0tauy5EO+hrsZbmJ7L8AjNc/ovWzxVYfdVAZsrTsK
6FM0ZtCr/52sSYdTZJ3StaVH2loBb4spKEuEKqRd8hyk0U1v9Z2fjUajNcyXy0WFHxF9gK1u5yF0
FzrTTYUK9QEr9J0lj1NpzEaqdwHuLDSwS/7EzjpwxqGPzlkHV8XwthwPYJvwySTyvBjeZCxNIcaM
sdyjik6HY06W0Ee1y/Yd/61eorO47x40SfNSPU0oddzbgJOmSS28AHkG8PMsnSUvRGf+1OMLUEsD
BBQAAgAIAIFFJElgS2YQkQAAAPsBAABFABwAaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVE
LXhzbC1kb2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRlcnIudHh0VVQJAANCQcxXQkHMV3V4CwAB
BPUBAAAEFAAAAO2OMQ6DMAxFd07hC4QEllaZYejSngEFUyKZJLKdCm5fOvQGHau/vq/3Qt5KpElj
ToDMmT0skRBW1eKt7fpL6851/uqcs4KhctTD7iJmGO+3cTC7kJlzqBsmNV/gwfEZU7tvBBQTQg9I
+CFA9CCUFVGb8+lfyHK6PeREB3StgwUnrYwCEyNILSWz4tyEf+iPQ99QSwMECgAAAAAAaUUkSQAA
AAAAAAAAAAAAABMAHABodHRwL3Rlc3RzL3N0b3JhZ2UvVVQJAAMVQcxXPkPMV3V4CwABBPUBAAAE
FAAAAFBLAwQUAAIACABpRSRJKNl5NrAAAADuAAAARQAcAGh0dHAvdGVzdHMvc3RvcmFnZS9jYWxs
YmFja3MtYXJlLWNhbGxlZC1pbi1jb3JyZWN0LWNvbnRleHQtc3RkZXJyLnR4dFVUCQADFUHMVxVB
zFd1eAsAAQT1AQAABBQAAABlzkELgkAQBeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d
5vG+B5NkWZppuJGxDsEz+CAETNBSJdgheePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaq
RHtuvco5SIVTOrCgunAd3MieaOtRWjPgZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3z
iia8+NfJ9BrMx+Z60jr30tId5vHsDVBLAwQKAAAAAAB3RSRJAAAAAAAAAAAAAAAAGgAcAGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvVVQJAAMxQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIA
CAB3RSRJfn/tF7EAAAABAQAAQQAcAGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcG9zdC1ibG9i
LWNvbnRlbnQtdHlwZS1hc3luYy1zdGRlcnIudHh0VVQJAAMxQcxXMUHMV3V4CwABBPUBAAAEFAAA
AGWNsQrCQBBE+3zFVqKgHjaCB1YmglgoiZhCLC7JKoe522OzUfx7DQRULGd4My9J012qYePvprYV
rMgLepkcngHHYPs2GDYOBRneucVppI5Utw4bFRsxKskzlWOxtaIyarnELq2IUYXayIXYKY/yIL6p
veEGq97SSaZlCMPZYj4CDQVRDf1U69ChX+SwJN8I5Ie11pmw9VcYjCHFEu0duSNgMILTT7H83MWt
c88//Tl6AVBLAwQUAAIACAB3RSRJfn/tF7EAAAABAQAAQAAcAGh0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvcG9zdC1ibG9iLWNvbnRlbnQtdHlwZS1zeW5jLXN0ZGVyci50eHRVVAkAAzFBzFcxQcxX
dXgLAAEE9QEAAAQUAAAAZY2xCsJAEET7fMVWoqAeNoIHViaCWCiJmEIsLskqh7nbY7NR/HsNBFQs
Z3gzL0nTXaph4++mthWsyAt6mRyeAcdg+zYYNg4FGd65xWmkjlS3DhsVGzEqyTOVY7G1ojJqucQu
rYhRhdrIhdgpj/Igvqm94Qar3tJJpmUIw9liPgINBVEN/VTr0KFf5LAk3wjkh7XWmbD1VxiMIcUS
7R25I2AwgtNPsfzcxa1zzz/9OXoBUEsDBAoAAAAAAGpFJEkAAAAAAAAAAAAAAAAVABwAaHR0cC90
ZXN0cy94bWx2aWV3ZXIvVVQJAAMXQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAABqRSRJ
AAAAAAAAAAAAAAAAIAAcAGh0dHAvdGVzdHMveG1sdmlld2VyL2R1bXBBc1RleHQvVVQJAAMXQcxX
PkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACABqRSRJf66if4IAAADAAAAAOQAcAGh0dHAvdGVz
dHMveG1sdmlld2VyL2R1bXBBc1RleHQvY3NzLXN0eWxlc2hlZXQtc3RkZXJyLnR4dFVUCQADF0HM
VxdBzFd1eAsAAQT1AQAABBQAAACdzDEKAjEQQNF+TzGlNmJICg1iszYWgpBCQSxidswOhMmSzCre
3ngF28/nOZwADKw31mirtoDvqpRZpRx8giKh4JSLEMeb1kbpO+wO+Jjj3kJFHk5Yq494IRl7Lxhz
+VhY8JzSsnN/y8QkP9I1nTIf+ZktXM89hMyMQVprz8snGrovUEsDBBQAAgAIAPlEJElbBFgOogUA
AE0QAAAKABwAaHR0cGQuY29uZlVUCQADRUDMV+xCzFd1eAsAAQT1AQAABBQAAACtV21v2zYQ/q5f
QbgwsBWTnLhx5xVBANdxlixJnVlOAyxJDVqiJNYSqZFUYnvrfvuOlOUXyVEDbA4QicfnuTsdj8ej
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
AAAAAABAABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L1VUCQADckHMVz5DzFd1eAsAAQT1AQAABBQAAABQSwMECgAAAAAArUUk
SQAAAAAAAAAAAAAAAE8AHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2Vt
YW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvVVQJAAOWQcxXPkPMV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACACXRSRJnPXOUOYAAABMBQAAZwAcAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVt
ZW50cy9ldmVudF9jYW5wbGF5LXN0ZGVyci50eHRVVAkAA21BzFdtQcxXdXgLAAEE9QEAAAQUAAAA
7ZNNSwQxDIbPzq/IUS+yw1aQIh6cPSgoCIMoiIdMm+2WrenQZhT/vRnx5k1ZRFnIJZA8yZuPnkYA
A4tTa4wa0GttW3OcssMERVyhMReJHB6XS9O2T3C2omEK5xYqyQ3VioGucwgacaFJWwuamMg3/ffB
gkW6zOsYpoISM99H2XT5eUw0e5fIPlGx0KHbkIcFEOOgNWFAtyX29SfFd6aK5K5SueJ1XkUn9kvT
Fg6bg6M/PLddy1PK52o+dKFQyOVNuTyltCf/Dvnkn5MjR5mRvdL1h+b7tvBw24HLzOTmv9KYF0zR
N+9QSwMEFAACAAgAl0UkSYK7Ld7qAAAA/gQAAHIAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZl
bnRfY2FucGxheV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA25BzFduQcxXdXgLAAEE9QEAAAQU
AAAA1ZPBSgNBDIbP9ilytBfp0qnIIB7cHhRaKCyiIB6ys+l06JgsM1nFt3dWvHmSIqzHhOTLnz+k
oR7AwOLKGmPNCug9V5W5iOIwQlKXqJekgf3zcmmq6gWu19QO/sZCJu62lDN6egx6qFHJS/qwcM5D
jPNZM0Fy4KAjsin0IHzPe7HwtKvBCTM5LblS84YxdCfp12/5G/G+VNyWpqOF0hjpJLBi0lp4H/yQ
cFT75Y+89pHG6A65i5Qs1OgO1MECiLEtM6FFdyyu5kluRfqQKY3HWAen9ofocvjZ2fwf+/bX603k
Ey8nQf7Nj38CUEsDBBQAAgAIAJhFJEkjg1G67gAAAAwGAABuABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL2V2ZW50X2NhbnBsYXl0aHJvdWdoLXN0ZGVyci50eHRVVAkAA29BzFdvQcxXdXgLAAEE9QEA
AAQUAAAA7ZTBSgQxDEDP7lfk6F5khy0qRfbg7EFBQRhEQTxkOtlu2ZoObUbx782IN086iHvYY0Py
kr6SNtQDGFicW2OsOQV6K1VlTmJyGCGLy9SnLIH903JpquoZLtbUDn5loRB3t1QKenoIsq1RyKf8
buGYhxjns+bX5MBBRmSj9JD4mjfJwuNdDS4xkxONac4rxtBN6FJIvsa/Sd5rxqUW7SxoYaRJYMEs
deJN8EPGcdpPP+mljzSerpC7SNlCjW5LHSyAGFvtCS26nVot0251XyiPztbBif3G1veZHc0P3v7B
21/ty76Qzw7kvSP/5C/9AFBLAwQUAAIACACYRSRJWG8kDOcAAAD+BAAAeQAcAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRp
YS1lbGVtZW50cy9ldmVudF9jYW5wbGF5dGhyb3VnaF9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkA
A3BBzFdwQcxXdXgLAAEE9QEAAAQUAAAA5ZPBSgNBDIbP9ilytBfp0gHLIB66PSi0ICyiIB6ys+l0
6JgsM9kW395Z8eZJilD0mJB8yZ+fNNQDGJgtrDHWXAMdc1WZqygOIyR1iXpJGti/zOemql7hZkXt
4G8tZOJuQzmjp6eguxqVvKR3C5c8xDidNGdIDhx0RDaFHoTveSsWnh9qcMJMTkuu1Bwwhu6k/fVr
/bV4XyqWpWlvoTRGOk+wYtJaeBv8kHA8w+fh5a2PNEZ3yF2kZKFGt6MOZkCMbZkJLbp9sSufpuox
UxrNWAWn9hu7GD+5mP4veYtf+5e/Tv7Jj38AUEsDBBQAAgAIAJlFJEmJhbTI8QAAAAwGAABqABwA
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1j
b250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUCQADcUHM
V3FBzFd1eAsAAQT1AQAABBQAAADtlLFOwzAQhmf6FDe2C2pUD8VCDE2HIoFUKUIgIYaLc3WtmnNk
X4p4exzEBFMaxoy27r7v9J/siloABcu1VkqrNdBHKgp17YNBD1FMpDZEcWxfVytVFG9wu6W6s3ca
EnHzSCmhpWcnxxKFbIifGubceb+YVReTHTvpkVWmu8D3fAgaXvYlmMBMRvJdrjmjd80ISyL5Gf8h
WJsrNrnppCE3evoNvhkCFoxSBj4420Xsp/3OJ7y3nvrTDrnxFDWUaI7UwBKIsc5OqNGccqppjJzk
KVHsM9s6I/oPO+9ndrUYZ5hyu8gw5L1M5In8H+Qhf+kXUEsDBBQAAgAIAJlFJEniFniJ6wAAAP4E
AAB1ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZGRhdGFfbm9hdXRvcGxheS1z
dGRlcnIudHh0VVQJAANyQcxXckHMV3V4CwABBPUBAAAEFAAAAO2TwUoDMRCGz/Yp5mgv0qURNIgH
t4cKCsIiCuJhNjtNQ9PJkswqvr2z4kU8LT0o4jFh5ps/X5iGegADizNrjDXnQK+lqsxJTA4jZHGZ
+pQlsH9aLk1VPcPFitrBX1ooxN0tlYKeHoJsaxTyKb9ZOOYhxvms+YXkwEFGZKP0kPiaN8nC410N
LjGTE73TmheMofs65XQxKb98xr9J3mvFlTbtLGhjpIPAglnqxJvgh4xj2g8/ad9HGk9r5C5StlCj
21IHymZsdSa06HZqtRz2qvtCeXS2Ck7sN7b+z+xo/u/tB7xN2Jc/T56y4+9QSwMEFAACAAgAmkUk
SRxH4efnAAAApAQAAG4AHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2Vt
YW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9hZGVkbWV0YWRh
dGEtc3RkZXJyLnR4dFVUCQADc0HMV3NBzFd1eAsAAQT1AQAABBQAAADtk8FKBDEMQM/uV+ToXmTL
VpAiHpw9KCgIgyiIh0wn2y1b06HNKP69GfHmSQcRwWNC8pK+kpYGAAurE2etOzZAL9UYe5SyxwRF
fKEhF4kcHtZra8wjnG6oG8OZg0rcX1OtGOguyq5BoZDLq4NDHlNaLtpvkyNHmZCt0mPmS95mB/c3
DfjMTF40pzXPmGI/Y0ol+Vj/KoegFefatHegjYlmgQWLNJm3MYwFp23f/eSnIdEUXSD3iYqDBv2O
elgBMXY6Ezr0e7Va573qtlKZnG2iF/eJrf+zOFj+e/sFbz91L3+R/JUbfwNQSwMEFAACAAgAmkUk
SQ2aNEPtAAAApAQAAHkAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2Vt
YW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9hZGVkbWV0YWRh
dGFfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAAN0QcxXdEHMV3V4CwABBPUBAAAEFAAAAO2TQUsD
MRCFz/ZXzNFepGkjSBAP3R4UFAqLKIiH2ew0DY2TJZmt+O/Niic9rYsHwWPCzPde3iM1dQAaFhdG
a3OugF6zUvosRIsBkthEXUzi2T2tVlqpZ7jcUNO7KwOZuL2jnNHRg5d9hUIupjcDp9yHMJ/VPyZ7
9jIg60L3kW94Fw08biuwkZmslLsyc8Tg2y8qy1H+5dP+bXSuTKzL0sFAWQw0CSyYpIq8865POLj9
yCe+dIGG0zVyGygZqNDuqYUFEGNTNKFBeyip5mmvus+Uhsw23or5xi79zE7mkxTG9P7fyN9u5LfI
Y/74O1BLAwQUAAIACACbRSRJRF3f+OwAAACkBAAAaQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9l
dmVudF9sb2Fkc3RhcnQtc3RkZXJyLnR4dFVUCQADdUHMV3VBzFd1eAsAAQT1AQAABBQAAADdk8FK
xEAMhs/uU+ToXmRrR5BBPNg9KCgIRRTEQzrNzg47ZspMqvj2puJJT1UE9ZiQfPnzh7Q0ABhYHVtj
7NEh0HOpKnMQk8MIWVymIWUJ7O/r2lTVA5ysqRv9qYVC3F9RKejpNsi2QSGf8ouFfR5jXC7aL5MD
B5mQrdJD4gveJAt31w24xExONKc1TxhD/2FKPUu/vMu/TN5rxZk27SxoY6RvgQWzNIk3wY8ZJ7Vv
/qTHIdIUnSP3kbKFBt2WelgBMXY6Ezp0O3W1/MqtSG4K5ekY6+DEfhKth1/sLf+wbz+93qx/+e/k
OT/+ClBLAwQUAAIACACbRSRJkQtL0uoAAACkBAAAdAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9l
dmVudF9sb2Fkc3RhcnRfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAAN2QcxXdkHMV3V4CwABBPUB
AAAEFAAAAO2TwUoEMQyGz+5T5OheZIepIEU8OHtQUBAGURAPmU62W7amQ5tRfHsz4klP4x4E2WNL
8uXvV9LSAGBgdWaNsac10FupKnMSk8MIWVymIWUJ7J/q2lTVM5yvqRv9hYVC3N9SKejpIci2QSGf
8ruFYx5jXC7aX5MDB5mQrdJD4mveJAuPdw24xExO9E5rXjGG/tsUMyu/fMW/Sd5rxaU27SxoY6S9
wIJZmsSb4MeMU9pPP+lliDSdrpD7SNlCg25LPayAGDudCR26nVot+73qvlCenK2DE/uDrf+zOFoe
vP2Btzn78t/Jc3b8A1BLAwQUAAIACACcRSRJnMcrxe0AAABmBgAAfAAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy9ldmVudF9vcmRlcl9jYW5wbGF5X2NhbnBsYXl0aHJvdWdoLXN0ZGVyci50eHRVVAkA
A3hBzFd4QcxXdXgLAAEE9QEAAAQUAAAA7ZTBSgQxDIbP7lPkqBfZYbsiRTw4e1BQEAZREA+ZTrZb
tqZDm1F8ezPiTS8ylxH2mJJ8+fMntKEewMDy3Bpj12ug91JV5jQmhxGyuEx9yhLYP69Wpqpe4GJD
7eAvLRTi7o5KQU+PQXY1CvmUPywc8xDjyaKZITlwkBHZKD0kvuFtsvB0X4NLzORE3zTnDWPoJumX
b/m3yXvNuNKivQUtjDQJLJilTrwNfsg4qv3yJ732kcboGrmLlC3U6HbUwRKIsdWe0KLbq6tl2lQP
hfLo2SY4sT/Yup/F0Tz3/j/Jhys6XNFv5LNZkP/yl34CUEsDBBQAAgAIAJ1FJEk3duwd7wAAAAwG
AAB1ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X29yZGVyX2NhbnBsYXlfcGxheWluZy1z
dGRlcnIudHh0VVQJAAN5QcxXeUHMV3V4CwABBPUBAAAEFAAAAO2UTUsEMQxAz+6vyNG9yA5bPyji
wdmDgoIwiIJ4yHSy3bI1GdqM4r+3I9486SDuYY8NyUv6StpQD2BgcWaNsccnQG+5qsxRFIcRkrpE
vSQN7J+WS1NVz3C+onbwFxYycXdLOaOnh6CbGpW8pHcLhzzEOJ81vyYHDjoim0IPwte8FguPdzU4
YSanJVZyXjGGbkKXTPo1/o14XzIuS9HWQimMNAmsmLQWXgc/JByn/fQjL32k8XSF3EVKFmp0G+pg
AcTYlp7QotsWq3nare4zpdHZKji139jlfWYH8723f/D2V/uyK+TTPXnnyD/5Sz8AUEsDBBQAAgAI
AJ1FJEnmDyPM7QAAAP4EAAB/ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X29yZGVyX2xv
YWRlZG1ldGFkYXRhX2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUCQADekHMV3pBzFd1eAsAAQT1AQAA
BBQAAADtlMFKAzEQhs/2KeZoL9KlEUsQD24PCgrCIgriYTY7TUPjzJLMKr69WfGkp20PXnpMmPnm
zxeShnoAA4uVNcaeXwB95KoyZ1EcRkjqEvWSNLB/WS5NVb3C5ZrawV9ZyMTdPeWMnp6CbmtU8pI+
LZzyEON81uxNDhx0RDaFHoRveSMWnh9qcMJMTsteqXnHGLpfU1aT8utP/DvxvlRcl6adhdIY6SCw
YtJaeBP8kHBM++1H3vpI4+oGuYuULNTottTBAoixLTOhRbcrVvNhp3rMlEZn6+DU/mGX+5mdzI/e
/sHblPdyJO9LnvJ7fAFQSwMEFAACAAgAoEUkSQZn/RbvAAAADAYAAHgAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEt
ZWxlbWVudHMvZXZlbnRfb3JkZXJfbG9hZHN0YXJ0X3Byb2dyZXNzLXN0ZGVyci50eHRVVAkAA3tB
zFd7QcxXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP9inmaC/SpRFqEA9uDy1UKCyiIB5ms9M0NJ0s
yWzFtzcrnvS0VvCyx4SZb/58IamoBVAwW2il9PUC6C0VhbrywaCHKCZSG6I4ti/zuSqKV7hdUt3Z
Ow2JuHmglNDSk5N9iUI2xHcNl9x5P51UvyY7dtIjq0x3gde8CxqetyWYwExG8l6uOaF3zbcpN4Py
y1f8TbA2V9znpoOG3OjpLLBglDLwztkuYp/20084tp761Qq58RQ1lGj21MAMiLHOM6FGc8hW03mn
ekwUe2dLZ0T/YOf7mVxMR2//4G3IexnJI/kvyEP+0g9QSwMEFAACAAgAoEUkSddtQd/yAAAADAYA
AGUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfcGF1c2Utc3RkZXJyLnR4dFVUCQADfEHM
V3xBzFd1eAsAAQT1AQAABBQAAADtlMFKxDAQhs/uU8zRvUjLdkGDeLB7UFAQiiiIh2k6mw0bJyWZ
Kr69U/EgeHFdYS89Jsx88+cLSUM9QAXFqakqszwDestlWZ2EaDFAEpuoj0k8u6fFoirLZzhfUTu4
CwOZuLulnNHRg5dNjUIupncDxzyEMJ81fyZ79jIiG6X7yNe8jgYe72qwkZms6J7WvGLw3fcpS1MU
O+WXr/g30TmtuNSmrQFtDLQXWDBJHXnt3ZBwTPvpJ770gcbVFXIXKBmo0W6oA2UztjoTWrRbtZr3
O9V9pjQ6W3kr5gdb72d2NJ+8HcDbr9/LRJ7I/0Te5S/9AFBLAwQUAAIACAChRSRJVuebM+gAAACk
BAAAcAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1i
ZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wYXVzZV9ub2F1dG9wbGF5LXN0ZGVy
ci50eHRVVAkAA35BzFd+QcxXdXgLAAEE9QEAAAQUAAAA7ZPBSgQxDEDP7lfk6F5kyo4gRTw4e3BB
QRhEQTxkOtlu2W46tBnFvzcj3jzpICJ4TEhe0lfS0gBQQ3Vm61NbGaCXYkx9EpPDCFlcpiFlCewf
V6vamCc4X1M3+gsLhbi/oVLQ032QXYNCPuVXC8c8xrhctN8mBw4yIVulh8Qb3iYLD7cNuMRMTjSn
Nc8YQz9jSiH5WP86ea8Vl9q0t6CNkWaBBbM0ibfBjxmnbd/9pMMQaYqukPtI2UKDbkc9VECMnc6E
Dt1erZZ5r7orlCdn6+DEfmLr/yyOlv/efsHbT93LXyR/5cbfAFBLAwQUAAIACACiRSRJfhLhlfEA
AAAMBgAAZAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mv
ZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5LXN0ZGVyci50eHRVVAkA
A39BzFd/QcxXdXgLAAEE9QEAAAQUAAAA7ZRBS8RADIXP7q/I0b1IayvIIB7sHhQUhCIK4iGdZmeH
HTNlJlX896bizZOWhUX2mJB8L/MeTEsDQA3FuanPTHEK9J7Lsj4J0WKAJDbREJN4ds9VVZflC1ys
qBvdpYFM3N9Rzujo0cumQSEX04eBYx5DWC7aP5M9e5mQrdJ95BteRwNP9w3YyExWtKczbxh8P0Ml
k3yffxud04krXdoa0MVAs8CCSZrIa+/GhNO1X/7E1yHQVF0j94GSgQbthnoogBg71YQO7VZdzfNe
9ZApTZ6tvBXzg635LI6WsxR2lft/TWSHfu1V1tWBvHfk3/yln1BLAwQUAAIACACiRSRJiNs8QegA
AACkBAAAbwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mv
ZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5X25vYXV0b3BsYXktc3Rk
ZXJyLnR4dFVUCQADgEHMV4BBzFd1eAsAAQT1AQAABBQAAADtk0FLxTAMgM++X5Gj7yIbqyBFPLh3
UFAQhiiIh6zL6yuvJqPNFP+9nXjzpNOLeExIvqRfSUcjgIHqxJpjWzVAL7muzVEUhxGSukSjJA3s
H5rG1PUjnG6on/yZhUw8XFPO6Oku6K5FJS/p1cIhTzGuV923yYGDzsiu0IPwJW/Fwv1NC06YyWnJ
lZpnjGFYMCWTfqx/Jd6XivPStLdQGiMtAismbYW3wU8J523f/cjTGGmOLpCHSMlCi25HA1RAjH2Z
CT26fbGal73qNlOanW2CU/uJXf5ndbD+9/Yj3syv3ctfJ3/lxt8AUEsDBBQAAgAIAKNFJEmNUdwc
7wAAAAwGAABnABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGlj
cy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BsYXlpbmctc3RkZXJyLnR4
dFVUCQADgUHMV4FBzFd1eAsAAQT1AQAABBQAAADtlMFKAzEQhs/2KebYXmSXpiBBPHR7qKBQWERB
PMxmp2lonCzJbMW3Nyue9LRW8LLHhJlv/nwhqakDUFBcabXShQJ6S2WpLn0w6CGKidSFKI7t83Kp
yvIFrjfU9PZGQyJu7ykltPTo5FChkA3xXcOce+8Xs/rXZMdOBmSd6S7wLe+DhqddBSYwk5G8l2tO
6F37bcpqVH75in8XrM0V69x01JAbPZ0FFoxSBd4720cc0n76Ca+dp2G1RW49RQ0VmgO1UAAxNnkm
NGiO2Wo671QPieLgbOOM6B/sfD+zi8Xk7R+8jXkvE3ki/wV5zF/6AVBLAwQUAAIACACkRSRJQZVr
pu8AAABmBgAAcgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRp
Y3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5aW5nX25vYXV0b3Bs
YXktc3RkZXJyLnR4dFVUCQADg0HMV4NBzFd1eAsAAQT1AQAABBQAAADtlMFKxDAQhs/uU8zRvUjL
dkWCeLB7UFAQiiiIh2k6mw0bJyWZKr69U/Gkp7KCHnpMmPnmzxeShnqACoozU61NsQZ6y2VZnYRo
MUASm6iPSTy7p9WqKstnON9QO7gLA5m4u6Wc0dGDl12NQi6mdwPHPISwXDT/kOzZy4hslO4jX/M2
Gni8q8FGZrKie1rzisF336acTsovX/FvonNacalNewPaGOggsGCSOvLWuyHhmPbTT3zpA42rK+Qu
UDJQo91RBwUQY6szoUW7V6v5sFPdZ0qjs423Yn6w9X4WR8vZ2x94m/JeZvJM/g3ylL/0A1BLAwQU
AAIACACkRSRJRtcuv+8AAAAMBgAAaAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wcm9n
cmVzcy1zdGRlcnIudHh0VVQJAAOEQcxXhEHMV3V4CwABBPUBAAAEFAAAAO2UwUoDMRBAz/Yr5mgv
sktXLEE8uD1YUBAWURAPs9lpGprOLMms4t+bFW+edBF76DHDzJvJC5OGeoAKiqWpzk1xAfSWyrI6
C2IxQFQbqZeont3zYlGV5Qtcrqgd3JWBRNzdUUro6NHrtkYlJ/HdwCkPIcxnza/Jnr2OyCbTvfCa
N2Lg6b4GK8xkNcdyzisG303okki/xr8V53LGdS7aGciFgSaBFaPWwhvvhojjtJ9+ZN8HGk83yF2g
aKBGu6UOCiDGNveEFu0uW03TbvWQKI7OVt6q+cbO7zM7mR+9/YO3v9qXI/kQycuDIP/kL/0AUEsD
BBQAAgAIAKVFJEmpY15p8QAAAKQEAABzABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3By
b2dyZXNzX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQADhUHMV4VBzFd1eAsAAQT1AQAABBQAAADd
k0FLw0AQhc/2V8zRXiShEeoiHkwPFRSEIAriYbKZbpduZ8PuRPHfOxFPeoqlBz3uMvO9N2+YhnqA
Coqlqc5NsQR6y2VZnYVoMUASm6iPSTy758WiKssXuFxRO7grA5m4u6Oc0dGjl22NQi6mdwOnPIQw
nzW/Jnv2MiIbpfvIN7yJBp7ua7CRmazon9a8YvDdASqZ5Mv+bXROK661aWdAGwN9B19MAQsmqSNv
vBsSjm4/84n7PtD4WiN3gZKBGu2WOiiAGFvVhBbtTlPNh4gfbSqSh0xpXMbKWzE/TOviZyfzP5zb
scebdC//nTzlxj8AUEsDBBQAAgAIAKVFJEnHD8f+8wAAAAwGAABqABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2V2ZW50X3RpbWV1cGRhdGUtc3RkZXJyLnR4dFVUCQADhkHMV4ZBzFd1eAsAAQT1AQAA
BBQAAADtlE1LxEAMhs/ur8jRvUjLVtBBPNg9uKAgFFEQD+k0OzvsbKbMpIr/3lS8iKf6AQp7zJA8
efOGSUM9QAXFiamOTXEK9JzLsjoK0WKAJDZRH5N4dg+LRVWWj3C2pHZw5wYycXdNOaOjOy+bGoVc
TC8GDnkIYT5rvkz27GVENkr3kVe8jgbub2qwkZms6JvmPGHw3ccuZTFJv7zLv4rOacaFFm0NaGGg
b4EFk9SR194NCUe1b/7EXR9ojC6Ru0DJQI12Qx0om7HVntCi3aqr+U9ORXKbKY3LWHor5pNoXfzs
YP6Pffvt8ab8lz15T/4R8pRb+gpQSwMEFAACAAgApkUkSQfNEdPxAAAAZgYAAHUAHABpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvZXZlbnRfdGltZXVwZGF0ZV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkA
A4hBzFeIQcxXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP9inmaC/S2BUkSA/dHlqoICyiIB5ms9M0
NJ0syazi25sVb952FaH0mDDzzZ8vJBW1AAXMbnVxo5UCek9KFVc+GPQQxURqQxTH9mU+L5R6hbsV
1Z1daEjEzT2lhJaenOxLFLIhfmi45M776aQaTHbspEdWme4Cb3gXNDw/lGACMxnJe7nmDb1rRkxJ
JN/xt8HaXLHMTQcNudHTKLBglDLwztkuYp/2y084tp761Rq58RQ1lGj21MAMiLHOM6FGc8hW07hT
PSaKvbOVM6J/sPP9TC6mZ2//4O2v3suZPJx8feLk4X/pb+b/BFBLAwQUAAIACACmRSRJrLls3YIA
AADAAAAAbAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mv
ZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF92b2x1bWVjaGFuZ2Utc3RkZXJy
LnR4dFVUCQADiEHMV4hBzFd1eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLmJsBAniUhcHQcig
IA4xPeNBuCvJVfHtra/g+vPzeRwALCw3zq6dWQG+qzF2kSWGDEVjwUGKEqdr21pjbrDd431MOwcV
uT9irSHhmfTZBcUk5eNgxmPO88b/LROT/kg/6SR84Ic4uJw6iMKMUac2Pa+QqW++UEsDBAoAAAAA
AJdFJEkAAAAAAAAAAAAAAABaABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2ludGVyZmFjZXMvVVQJ
AANtQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQKAAAAAACXRSRJAAAAAAAAAAAAAAAAZAAcAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9pbnRlcmZhY2VzL1RleHRUcmFjay9VVAkAA25BzFc+Q8xXdXgL
AAEE9QEAAAQUAAAAUEsDBBQAAgAIAJdFJElV2VCvyQAAAN0BAAB5ABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2ludGVyZmFjZXMvVGV4dFRyYWNrL2FjdGl2ZUN1ZXMtc3RkZXJyLnR4dFVUCQADbUHM
V21BzFd1eAsAAQT1AQAABBQAAAClkDFvwjAQhWfyK24sS0SEkSqrYmgYWqlMqOqAGC72YSzcc2Rf
hPj3dYCNqcp4T3rfu/d21AMoWLxqpbRaAV1y06g6RIMBkphEfUzi2e2XS6WaA7x98jGuNYToXJEh
CybJdV1Xu3+jNtQNrrAyyZZyRkdfd+p7MZ01FGMgOwU8PtdGPno3JBQf+cfLqY2/faDx+kC2gZKG
Fs2JLCyAGLuSCR2aM7HN01p9Z0rjXhtvRD+xNbxUs/mkBLaP4W69UMjFdC1cHkKYV39QSwMEFAAC
AAgAl0UkSeZ0kp+CAAAAwAAAAHUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNlcy9U
ZXh0VHJhY2svYWRkQ3VlLXN0ZGVyci50eHRVVAkAA25BzFduQcxXdXgLAAEE9QEAAAQUAAAAncyx
CsIwEIDhvU9xoy5i6QkSxKUuDoKQQUEcYnqmgXBXkqvi2xtfwfXn57M0ASCstwbR4AboXdoWV0m8
S5DVZ5oka+Rw6zrE9g67Az3msDdQiIcTleICXaKOvVMKkj8GFjyntGzs33LkqD/SVj0KH/kpBq7n
Hrwwk9fa6vNyKQ7NF1BLAwQUAAIACACnRSRJeQ4y9uAAAADkAwAAdwAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy9uZXR3b3JrU3RhdGVfZHVyaW5nX2xvYWRzdGFydC1zdGRlcnIudHh0VVQJAAOKQcxX
ikHMV3V4CwABBPUBAAAEFAAAAO2RwUoDMRCGz+5TzNFepGFTkCAe3B4ULBQWURAPs8k0DY2TJZlV
fHuz0psn7VGPAzPfx/x/TyOAhuWl0SujWqD3opS+iMlihCw205iyBPbPbauVeoGrNQ2TvzZQSDZU
Cnq6T97XjZt6dDBQDyO5pv89WDBLl3gX/JRRQuLHIPsuvY6R5ukW2UXKBjq0e3KwBGIcqhMGtAdi
V06RkzwUyne8S+tgxXxjGzhvzhanGf5zOxr0jwzsjsF9/YVCPuWPyuUpxr9GDhxkRvaVXrudczfw
tO3AJmayc9915w1jcM0nUEsDBBQAAgAIAKdFJElcuisCggAAAMAAAABuABwAaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlh
LWVsZW1lbnRzL25ldHdvcmtTdGF0ZV9pbml0aWFsLXN0ZGVyci50eHRVVAkAA4pBzFeKQcxXdXgL
AAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy5iaAQJ4lIXB0HIoCAOMT3Tg3BXkqvi21tfwfXn5/M4
AlhYb53dOGMB39UYu8oSQ4aiseAoRYnTrW2tMXfYHfAxpb2DityfsNaQ8EI6dEExSfk4WPCU87Lx
f8vEpD/SzzoJH/kpDq7nDqIwY9S5zc8rZOqbL1BLAwQUAAIACACoRSRJZa8/hOMAAABMBQAAcgAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9wYXVzZWRfZmFsc2VfZHVyaW5nX3BsYXktc3RkZXJyLnR4
dFVUCQADi0HMV4tBzFd1eAsAAQT1AQAABBQAAADtk0FLAzEQhc/ur5hjvUhDt1CCeOj20IKCsIiC
eJhNpmloOlmSWcV/36x489bibY8D732Pecy01APUMF/peqnVEugrK1XfhWgwQBKTqI9JPLv3xaJW
6gPuN9QN7kFDJnminNHRY3SuKNbFdNRQjIFs1V4OFkzSRN57NyQUH/nVy6GJpz7QOG2RbaCkoUFz
IAtzIMauZEKH5khs8zXhJC+Z0o73ceON6D9sDbPq5va6hKm3ixLY/hb3sxcKuZi+C5eHECbyRP4P
smcvI7It9PJD431reHtuwERmMuNfFc0nBm+rM1BLAwQUAAIACACpRSRJ6izmS+cAAAD+BAAAcgAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9wYXVzZWRfdHJ1ZV9kdXJpbmdfcGF1c2Utc3RkZXJyLnR4
dFVUCQADjUHMV41BzFd1eAsAAQT1AQAABBQAAADtkzFLA0EQhWvzK6bURrLkIrJICi9FBAXhEAWx
mNubbJZsZo7dOcV/757YiOU1V1juMPPtm/eYhnqACpbXtlpbswb6yMZUl1EcRkjqEvWSNLB/Xa0q
Y97gZkvt4DcWMnH3QDmjp+eghxqVvKRPC+c8xHixaH6Rr2ZBDhx0RDaFHoTveC8WXh5rcMJMTkut
9LxjDN0k/foj/168Lx23ZehooQxGmgRWTFoL74MfEo5qv/2RUx9pfO2Qu0jJQo3uQB0sgRjb8ie0
6I7F1Txtq6dMafRsG5zaP+ySz+Jsnrn/JzK/ROZw419QSwMECgAAAAAAmUUkSQAAAAAAAAAAAAAA
AGoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvVVQJ
AANyQcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACZRSRJd4aWGv4AAAD7AQAAkQAcAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1yZXNvdXJjZS9wYXVzZS1tb3Zl
LXRvLW90aGVyLWRvY3VtZW50LXN0ZGVyci50eHRVVAkAA3FBzFdxQcxXdXgLAAEE9QEAAAQUAAAA
pZA/a8MwEMXn+lPc2AwNNlKoLUKgcYYWWigxpYPJINtn2UQ9GUmmfz59r6Fduvq2g3vvd+/Vaa6k
VLJYi3xzgi0PlMe7fQU7HujtHIZnpG4kc0SLOmCFUUGdftz2hShyUciNSE+wt649QwqDDkCObr7Q
O/DYQ+tmiiCSCicACX84wPeQZXLNMm3Bx9bj5HxkTC2ElBm/csBmNjsFAeMThqANPjpj+OLCUsBC
i90S46h9LB31o5m9jqOj1zEOpXubLP5s95o6i15BqdsBO06HpBtmQqPbM5cSlqV6CegfqHeHseVK
/3sruE6uVosI1P0Wd8mlIxrnP9mXZmtXyTdQSwMEFAACAAgAmUUkSXNU8ywhAQAAFQMAAI8AHABp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvcGF1c2UtbW92
ZS13aXRoaW4tZG9jdW1lbnQtc3RkZXJyLnR4dFVUCQADckHMV3JBzFd1eAsAAQT1AQAABBQAAADN
kk1LAzEQhs/2V8xRD5atm2I3SMFuDwoKpYsolB7S7CQbGiclyfr1650VvXgtgnNLmHnemXemwQOA
gGImhZCiAnxNk4kY+6CVh5h1xEOI2ZHdlKUQky1cLXHX27mEhNTeY0rK4qPLXa0y2hDfJZxS7/3Z
qPmHZEcuD8iG6S7QLZkg4WlVgw5EqDP/cc6L8q4dbX7449m0ZAYH1OvrRQNzDjC+T92KO2WdNXpU
CRvMEjbF26WpyuqimhkzLbaw4L72UECnElCg8w+MASIa1uwpgzjKqPzt012wljO+tCRwocf2GHBW
MdeBjLN9VIMtX4sIzwePw+tGUesxSqiV7rDl6ZDUjjVhp/SeTUnHTfWQMA7LWTrNlv5m8yGMTv7y
wD4BUEsDBBQAAgAIAJlFJElXu2Ew2wAAAAYDAACPABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3Bs
YXlpbmctdGhlLW1lZGlhLXJlc291cmNlL3BhdXNlLXJlbW92ZS1mcm9tLWRvY3VtZW50LXN0ZGVy
ci50eHRVVAkAA3JBzFdyQcxXdXgLAAEE9QEAAAQUAAAAzZExSwRBDIVr71ek1EZuuRFkEAv3CgUF
YREFscjO5uaGG5NlJqv4782KnYXFNlcm5H15eeloBHCwvvTO+Ys10GdtGneeJWCGoqHQKEUTx9fN
xrnmDa621E/x2kMlHh6oVoz0nHTfolKU8uXhlKecz1bdEZITJ52RndGT8B3vxMPLYwtBmCmo9Wzm
A3MaFvnXX/v3EqNN3Jjo4MGEmRaBFYu2wrsUp4Kz25985H3MNFe3yEOm4qHFsKcBjM3Y207oMRws
1brsqqdKZc5sm4L6P2z7z+rkOP/+H/kbUEsDBBQAAgAIAJlFJEnyLYAEgwAAABoBAACBABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L21lZGlhLWVsZW1lbnRzL3BsYXlpbmctdGhlLW1lZGlhLXJlc291cmNlL3BsYXliYWNrUmF0
ZS1zdGRlcnIudHh0VVQJAANyQcxXckHMV3V4CwABBPUBAAAEFAAAAM3MsQrCMBCA4b1PcaMu0tIT
JIhLXRwEIYOCOMT0jIFwV5Kr4tsb38L15+ezNAEgtBuDaNYt0Lt0Ha6SeJcgq880SdbI4dr3iN0N
tnu6z2FnoBCPRyrFBTpHfQ5OKUj+GFjwnNKysX8oR476I23Vo/CBH2LgchrACzN5ra0+L5fi2HwB
UEsDBBQAAgAIAKlFJEmkO4htggAAAMAAAAB4ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3ByZWxv
YWRfcmVmbGVjdHNfbm9uZV9hdXRvcGxheS1zdGRlcnIudHh0VVQJAAONQcxXjUHMV3V4CwABBPUB
AAAEFAAAAJ3MsQrCMBCA4b1PcaMuYmhECeJSFwdByKAgDjE940G4K8lV8e2tr+D68/N5HAAsLDfO
rpxZA76rMXaRJYYMRWPBQYoSp2vbWmNusN3jfUw7BxW5P2KtIeGZ9NkFxSTl42DGY87zxv8tE5P+
SD/pJHzghzi4nDqIwoxRpzY9r5Cpb75QSwMEFAACAAgAqUUkSZ69awLjAAAATAUAAHMAHABpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRl
bnQvbWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfY2FucGxheS1zdGRlcnIudHh0VVQJ
AAOOQcxXjkHMV3V4CwABBPUBAAAEFAAAAO2TQUsDMRCFz+6vmKO9SEO3UIJ46PZgQaGwiIJ4mE2m
aWg6WZLZiv/erHjz1uJtjwPvfY95zLTUA9QwX+l6qdUK6DMrVd+FaDBAEpOoj0k8u/fFolbqA+43
1A3uQUMmeaac0dFTdK4o1sV01FCMgWzVXg4WTNJE3ns3JBQf+dXLoYmnPtA4PSLbQElDg+ZAFuZA
jF3JhA7Nkdjma8JJXjKlLe/jxhvRf9gabqub2XUJU28XJbD9Le5nLxRyMX0VLg8hTOSJ/B9kz15G
ZFvo5YfG+9bwtmvARGYy418VzRmDt9U3UEsDBBQAAgAIAKpFJEm5rjs97QAAAGYGAAB6ABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBsYXl0aHJvdWdoLXN0ZGVy
ci50eHRVVAkAA5BBzFeQQcxXdXgLAAEE9QEAAAQUAAAA7ZRBSwQxDIXP7q/IUS+yZUdYi3hw9qCg
IAyiIB4ynWy3bE2HNqP4782IF/E4CKN4bEi+vrwHaagHqGC5ttWJNWug12JMdRyTwwhZXKY+ZQns
H1erypgnONtQO/hzC4W4u6FS0NN9kF2NQj7lNwuHPMR4tGi+kE9nQQ4cZEQ2Sg+Jr3ibLDzc1uAS
MznRmva8YAzdJP3yKf86ea8dFzq0t6CDkSaBBbPUibfBDxlHtR/+pOc+0vi6RO4iZQs1uh11sARi
bPVPaNHt1dUybau7Qnn0bBOc2G9szWdxMM/c/2oiP+jXL876nzy3W/oOUEsDBBQAAgAIAKtFJEkG
xtvA7gAAAMAGAAB2ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2xv
YWRlZGRhdGEtc3RkZXJyLnR4dFVUCQADkUHMV5FBzFd1eAsAAQT1AQAABBQAAADtlMFKxDAQhs/u
U8zRvcjWrSBBPNg9rKAgFFEQD9N0Nhs2OynJVPHtnYo3b7aChx4TZr7884Wkpg6ghNWlKS/M+Qro
PRdFeRaixQBJbKIuJvHsXtbrsihe4WpDTe+uDWTi9p5yRkdPXvYVCrmYPgycch/CclH/Q7JnLwOy
VrqPfMu7aOD5oQIbmcmK7mnNGwbfjsov3/HvonNacaNNBwPaGGgUWDBJFXnnXZ9wSPvlJx67QMNq
i9wGSgYqtHtqQdmMjZ4JDdqDWs3jpnrMlAZnG2/F/GDr/SxOlrO3SbwVf/ZeZvJMnoL8+790yvyf
UEsDBBQAAgAIAKxFJEnS5gnO6wAAAKQEAAB6ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5
U3RhdGVfZHVyaW5nX2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRVVAkAA5NBzFeTQcxXdXgLAAEE
9QEAAAQUAAAA7ZPBSgMxEIbP9inmaC/StCtIEA9uDwoKwiIK4mE2O01D42RJZhXf3lnxpKe1B0F6
TJj55s8XpqEeoILFma1O7dIAvRVjqpOYHEbI4jL1KUtg/7RaVcY8w/ma2sFfWCjE3S2Vgp4egmxr
FPIpv1s45iHG+az5NTlwkBHZKD0kvuZNsvB4V4NLzORE77TmFWPovk1ZTsovX/FvkvdacalNOwva
GGkvsGCWOvEm+CHjmPbTT3rpI42nK+QuUrZQo9tSBwsgxlZnQotup1bLfq+6L5RHZ+vgxP5g6//M
juYHb3/gbcq+/HfylB3/AFBLAwQUAAIACACsRSRJ19xdte0AAAAMBgAAcwAcAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRp
YS1lbGVtZW50cy9yZWFkeVN0YXRlX2R1cmluZ19wbGF5aW5nLXN0ZGVyci50eHRVVAkAA5RBzFeU
QcxXdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEEDP9ivmaC/SdSNIEA9uDy1UEBZRKB5ms9M0NJ0syazi
35sVb57s1tseM8y8mbwwqakDULC41epGX5dAH6ko1JUPBj1EMZG6EMWx3ZalKoo3uFtS09t7DYm4
faSU0NKLk32FQjbETw2X3Hs/n9Unkx07GZB1prvAa94FDa9PFZjATEZyLOe8o3ftiC6J5Gf8TbA2
ZzzkooOGXOhpFFgwShV452wfcZj22084dp6G0wq59RQ1VGj21MICiLHJPaFBc8hW07hbPSeKg7Ol
M6J/sfP7zC7mk7ezeFP/ti8TeSKfg/yXv/QLUEsDBBQAAgAIAK1FJElquYRqgwAAABoBAABsABwA
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1j
b250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfaW5pdGlhbC1zdGRlcnIudHh0VVQJAAOV
QcxXlUHMV3V4CwABBPUBAAAEFAAAAM3MsQrCMBCA4b1PcaMuYmwECeJSFwdByKAgDjE940G4K8lV
8e2tb+H68/N5HAAsLDfOrt3KAr6rMXaRJYYMRWPBQYoSp2vbWmNusN3jfUw7BxW5P2KtIeGZ9NkF
xSTl42DGY87zxv+hTEz6I/2kk/CBH+LgcuogCjNGndr0vEKmvvkCUEsDBBQAAgAIAK1FJEkgM3kv
1QAAAMICAACEABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGlj
cy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3NyY19yZWZsZWN0c19hdHRyaWJ1dGVf
bm90X3NvdXJjZV9lbGVtZW50cy1zdGRlcnIudHh0VVQJAAOVQcxXlUHMV3V4CwABBPUBAAAEFAAA
ANWQP0/DMBDFdz7FjTCkdtJUGG8VFerAgKIyVQyufSEW/hPsC5+fQ2FmQwLd8n5676R3d5ZK9zvd
7TZb2b/A8XR6GvB9wUow+tcj0fyNB+8GtOg/cMA651Tx3oRwMfZNQ1kNBxPnmVYfetnDNZaSCzRt
d7dVNzCy/gppIUK2Jky5klZKSjFRDKJiNIm8rQLjBZ1D19icCBOJiM6bBgNGpirGnK/OP3dnPCxx
fvDJhOfhcZ/4gJgJ985xxarBrALa7nYjeVpe4ywsJfxOSfWPH6z+6oM/AVBLAwQKAAAAAACZRSRJ
AAAAAAAAAAAAAAAAVQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy90cmFjay9VVAkAA3FBzFc+Q8xX
dXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAJlFJEkAAAAAAAAAAAAAAABjABwAaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlh
LWVsZW1lbnRzL3RyYWNrL3RyYWNrLWVsZW1lbnQvVVQJAANxQcxXPkPMV3V4CwABBPUBAAAEFAAA
AFBLAwQUAAIACACZRSRJvCncS+wAAAChAQAAggAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy90cmFj
ay90cmFjay1lbGVtZW50L3RyYWNrLWFwaS10ZXh0dHJhY2tzLXN0ZGVyci50eHRVVAkAA3FBzFdx
QcxXdXgLAAEE9QEAAAQUAAAApZBBS8QwEIXP9lfMUQ8urQ26DbLgdg8KCrJF9lD2MEmmadmYlCRF
8dc7Cl687rsNzHvfzOvLtRRCimZ1u26OcM+Cdv+w7WDDgsEtaXwlbyZv9+QIE3WUJfTl592gRNUo
YwyWR9i6oE9QwogJfPDXXxQDRBpAh8VnqIuOZgABfzigj1RVYsU2dBCzjjSHmBnT17W4EXzKjtRi
NxIS5RdKCS09B2t545clgY2OzDnBGWNugx8mu0TMU/CHKY9teJ8d/UyP6I2jKKFFPZLh78ijYiYo
1CcuJZ331Vui+OSHsJs0V/o/W8JlcXFVfANQSwMEFAACAAgArUUkSa9OxWG8AAAA7AEAAGMAHABp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvdmlkZW9fMDA4LXN0ZGVyci50eHRVVAkAA5VBzFeVQcxXdXgL
AAEE9QEAAAQUAAAAtZAxiwIxEIVr/RVTanO47goSxMLdQkErEQu5YjYZYzBOlmQWuX9/UezsTq58
MO/7mLenDqCCyVxVMzWdAd1TUVRfPmj0EEVH6kIUx/ZUllVRfMOioba3SwWJZEcpoaVtsDZfrHLp
qiAXPZnh/u9gwSh14LOzfURxgY9OLnW4dZ4eaY1sPEUFNeoLGZgAMbbZCS3qK7FJn8hJDonihs+h
cVrUG1vBaDgYf2Rg8xru+RcK2RB/Mpd77/+T/AtQSwMEFAACAAgArUUkSZxgME2DAAAAwAAAAGwA
HABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVk
LWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdmlkZW9fdm9sdW1lX2NoZWNrLXN0ZGVyci50eHRVVAkA
A5ZBzFeWQcxXdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy5ibBQJ4lIXB0HIoCAOMb3Gg3BX
klTx7Y2v4Prz81kcATQst0avzWoD+M5K6UUU7yKk4hOOkgpxuLWtVuoOuwM+prA3kJH7E+bsAl6o
PDtXMEj6GJjxFOO8sX/LxFR+pK06CR95EAPXcwdemNGX2urzcpH65gtQSwMECgAAAAAAmUUkSQAA
AAAAAAAAAAAAAFIAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvdGhlLWF1ZGlvLWVsZW1lbnQvVVQJAANyQcxXPkPMV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACACZRSRJSOmgUt0AAADQAgAAbgAcAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtYXVkaW8t
ZWxlbWVudC9hdWRpb19jb25zdHJ1Y3Rvci1zdGRlcnIudHh0VVQJAANyQcxXckHMV3V4CwABBPUB
AAAEFAAAANWQP08DMQzFdz6FRxiuyZWgptkqKtSBAZ3KVDGkictF5M+ROHx+cjpmmJBAXt6zn6Wf
feJSCaHu+ErwzQscjsenAd8rFoKLez0QTV927+yABt0HDlimFAvea+/P2rwpyMvAwtjyzS1zEFzA
NeacMnT9ensrb+DS9BxSjPlktB9TISUl52yk4FnBoCM5UxiGM1qLtjMpEkZiNGKnq3WpQ49h7sTq
/dXpe/5m9zVMDy5q/zw87mI7IiTCnbUNsyjQi4B+vVnxVn1ba1mo2f8eqPxfjy7Z/IT/J/48c34C
UEsDBAoAAAAAAJlFJEkAAAAAAAAAAAAAAABTABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS1jYW52YXMtZWxlbWVudC9V
VAkAA3JBzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAJlFJEkUOXgjggAAABoBAABwABwA
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1j
b250ZW50L3RoZS1jYW52YXMtZWxlbWVudC8yZC5jYW52YXMucmVhZG9ubHktc3RkZXJyLnR4dFVU
CQADckHMV3JBzFd1eAsAAQT1AQAABBQAAADNzLEKwjAQgOG9T3GjLmLtDRrEpS4OgpBBQRxiesaD
cCnJVfHtjW/h+vPzWRoBEJZrg2hwA/QubYuLmLyLkNVnGlNWlnDtOlzhDbZ7uk9hZ6CQDEcqxQU6
sz57pxRS/hiYyRTjvLF/KLOw/khbdU5ykEcycDn14JMIea2tPi8XeWi+UEsDBAoAAAAAAJtFJEkA
AAAAAAAAAAAAAAAqABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIv
VVQJAAN2QcxXPkPMV3V4CwABBPUBAAAEFAAAAFBLAwQUAAIACACORSRJwhf1FaIAAABPAgAARgAc
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmZhY3Rvcnlfb3Bl
bjExLXN0ZGVyci50eHRVVAkAA1tBzFdbQcxXdXgLAAEE9QEAAAQUAAAA7Y+xCsIwFEX3fsUb28WA
iJRs2nYQFbEFO0qavCGQ9oX0pfj51tLJL3BwvHDO5d6qrm+1hAMz9p6BCZSZ1KARFGjqvUNGAzqG
kUIiHuRij6MoFStRtY1osTtbFg3FoPGTCgoormSimzE7GHyhMZ0YMUwYRHO/WMZTeSyWwo32Pt3m
eQYSOiIHa4GUM9IsipRfjpTrwDTagfe7J2dJ9T/xIyfeUEsDBBQAAgAIAI5FJEm8cWzVmQAAAMUA
AABDABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiaW5kZXhf
Y291bnQtc3RkZXJyLnR4dFVUCQADXEHMV1xBzFd1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvb
xYCIlGzadhAVsQE7Spq8IZD2hfSl+PnW0snxwjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhR
zMSLfBpwErVmLZpOiQ77q2OhKEWDv1VRRHEnm/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sC
JPREHraAlAuiVkXKP0fK7WCe3MjHw5uL7AtQSwMEFAACAAgAjkUkSbxxbNWZAAAAxQAAAEQAHABp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleF9jb3VudDIt
c3RkZXJyLnR4dFVUCQADXEHMV1xBzFd1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGza
dhAVsQE7Spq8IZD2hfSl+PnW0snxwjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpw
ErVmLZpOiQ77q2OhKEWDv1VRRHEnm/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraA
lAuiVkXKP0fK7WCe3MjHw5uL7AtQSwMEFAACAAgAjkUkSbxxbNWZAAAAxQAAAEQAHABpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleF9jb3VudDMtc3RkZXJy
LnR4dFVUCQADXEHMV1xBzFd1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGzadhAVsQE7
Spq8IZD2hfSl+PnW0snxwjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpwErVmLZpO
iQ77q2OhKEWDv1VRRHEnm/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraAlAuiVkXK
P0fK7WCe3MjHw5uL7AtQSwMEFAACAAgAkkUkSbxxbNWZAAAAxQAAAEkAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJvYmplY3RzdG9yZV9jb3VudC1zdGRlcnIu
dHh0VVQJAANkQcxXZEHMV3V4CwABBPUBAAAEFAAAAF2OsQrCMBRF937FG9vFgIiUbNp2EBWxATtK
mrwhkPaF9KX4+dbSyfHCOYfbtO2jlXBixiEwMIG2sx4NggZDQ/DIaMGkOFHMxIt8GnAStWYtmk6J
DvurY6EoRYO/VVFEcSeb/IK50eIHre3FhHHGKNTz5hgv9blagzsTQr4vywIk9EQetoCUC6JWRco/
R8rtYJ7cyMfDm4vsC1BLAwQUAAIACACSRSRJvHFs1ZkAAADFAAAASgAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0b3JlX2NvdW50Mi1zdGRlcnIu
dHh0VVQJAANjQcxXY0HMV3V4CwABBPUBAAAEFAAAAF2OsQrCMBRF937FG9vFgIiUbNp2EBWxATtK
mrwhkPaF9KX4+dbSyfHCOYfbtO2jlXBixiEwMIG2sx4NggZDQ/DIaMGkOFHMxIt8GnAStWYtmk6J
DvurY6EoRYO/VVFEcSeb/IK50eIHre3FhHHGKNTz5hgv9blagzsTQr4vywIk9EQetoCUC6JWRco/
R8rtYJ7cyMfDm4vsC1BLAwQUAAIACACSRSRJBIrpA58AAACKAQAASgAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0b3JlX2NvdW50My1zdGRlcnIu
dHh0VVQJAANkQcxXZEHMV3V4CwABBPUBAAAEFAAAAN2PsQrCMBRF937FG+1iQERKNm07iIrYgB0l
Td4QSPtC+lL8fGvp5Cc4Xjj3cG/dNPdGwpEZ+8DABNpOejAIGgz1wSOjBZPiSDETT/Kpx1FUmrWo
WyVa7C6OhaIUDX5TSRHFjWzyM+YGi2+0thMjxgmjUI+rYzxXp3IRbk0Im11R5CChI/KwCqScEbVU
pPzpSLkO3CQ38GH/4jyr/+HEB1BLAwQUAAIACACURSRJvHFs1ZkAAADFAAAASwAcAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0b3JlX2RlbGV0ZTUt
c3RkZXJyLnR4dFVUCQADZ0HMV2dBzFd1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvbxYCIlGza
dhAVsQE7Spq8IZD2hfSl+PnW0snxwjmH27Tto5VwYsYhMDCBtrMeDYIGQ0PwyGjBpDhRzMSLfBpw
ErVmLZpOiQ77q2OhKEWDv1VRRHEnm/yCudHiB63txYRxxijU8+YYL/W5WoM7E0K+L8sCJPREHraA
lAuiVkXKP0fK7WCe3MjHw5uL7AtQSwMEFAACAAgAlkUkSbxxbNWZAAAAxQAAAE4AHABpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJ0cmFuc2FjdGlvbi1vbmNvbXBs
ZXRlLXN0ZGVyci50eHRVVAkAA2xBzFdsQcxXdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WA
iJRs2nYQFbEBO0qavCGQ9oX0pfj51tLJ8cI5h9u07aOVcGLGITAwgbazHg2CBkND8MhowaQ4UczE
i3wacBK1Zi2aTokO+6tjoShFg79VUURxJ5v8grnR4get7cWEccYo1PPmGC/1uVqDOxNCvi/LAiT0
RB62gJQLolZFyj9Hyu1gntzIx8Obi+wLUEsDBBQAAgAIAJpFJEkEiukDnwAAAIoBAABYABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvdHJhbnNhY3Rpb24tY3JlYXRl
X2luX3ZlcnNpb25jaGFuZ2Utc3RkZXJyLnR4dFVUCQADdEHMV3RBzFd1eAsAAQT1AQAABBQAAADd
j7EKwjAURfd+xRvtYkBESjZtO4iK2IAdJU3eEEj7QvpS/Hxr6eQnOF4493Bv3TT3RsKRGfvAwATa
TnowCBoM9cEjowWT4kgxE0/yqcdRVJq1qFslWuwujoWiFA1+U0kRxY1s8jPmBotvtLYTI8YJo1CP
q2M8V6dyEW5NCJtdUeQgoSPysAqknBG1VKT86Ui5DtwkN/Bh/+I8q//hxAdQSwMEFAACAAgAm0Uk
SbxxbNWZAAAAxQAAAEYAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWRE
Qi93cml0ZXItc3RhcnZhdGlvbi1zdGRlcnIudHh0VVQJAAN2QcxXdkHMV3V4CwABBPUBAAAEFAAA
AF2OsQrCMBRF937FG9vFgIiUbNp2EBWxATtKmrwhkPaF9KX4+dbSyfHCOYfbtO2jlXBixiEwMIG2
sx4NggZDQ/DIaMGkOFHMxIt8GnAStWYtmk6JDvurY6EoRYO/VVFEcSeb/IK50eIHre3FhHHGKNTz
5hgv9blagzsTQr4vywIk9EQetoCUC6JWRco/R8rtYJ7cyMfDm4vsC1BLAwQKAAAAAACnRSRJAAAA
AAAAAAAAAAAACgAcAGluc3BlY3Rvci9VVAkAA4lBzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBAoA
AAAAAKdFJEkAAAAAAAAAAAAAAAATABwAaW5zcGVjdG9yL2RlYnVnZ2VyL1VUCQADiUHMVz5DzFd1
eAsAAQT1AQAABBQAAABQSwMEFAACAAgAp0UkSdAVmDwgDAAA1OIAAEEAHABpbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWstb24tZXhjZXB0aW9uLXRocm93LWluLXByb21pc2Utc3RkZXJyLnR4dFVUCQAD
iUHMV4lBzFd1eAsAAQT1AQAABBQAAADtnVtv2zgWx9/zKQwvBmiBxJbEm2hgHrJtZrazRadostuH
SR8UmUk0I0seXdJ2C3/3JWX5JtmOYko2ZbNoU0fX8z86hxfxZ/IsYn+nLE4GnR9db9gdWOC8O2LJ
Y8g/dz+lQeKNWI89OX7qJKx73h07kTOKu4MfXfZtHLE49sKAH3nDL/HReWA9Zzj8xOLUT16lAYtd
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
8ewNUEsDBAoAAAAAAEBGJEkAAAAAAAAAAAAAAAAGABwAbWVkaWEvVVQJAAOoQsxXPkPMV3V4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACACzRSRJNLBjK9kAAABSAgAAHwAcAG1lZGlhL2F1ZGlvLWRhdGEt
dXJsLXN0ZGVyci50eHRVVAkAA6JBzFeiQcxXdXgLAAEE9QEAAAQUAAAAzZExSwNBEIVr71dMGRvJ
cSeERSy8FAoGAocoiMXc7mSzZDNz7M4l+O/dEzs701gOvPc95r2eRoAWlivT3ppmBXTOdd3eRLEY
IalNNErSwP69adq6+YC7NQ2TvzeQSTeUM3p6Fu+L4qGYDgaKMZKr+r+DFZN2wrvgp4QahF+D7js5
jpHm6xHZRUoGOrR7crAEYhxKJgxoD8QuXxJO+pIpPfFO1sGq+cU2sKiuri9KYPdT3PdfqOQlfRYu
TzH+T3LgoDOyL/SywNyOgbdtB1aYyc6rFM0JY3DVF1BLAwQKAAAAAAC6RSRJAAAAAAAAAAAAAAAA
EwAcAG1lZGlhL21lZGlhLXNvdXJjZS9VVAkAA7BBzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQA
AgAIALpFJEkHwX+yiwAAAJsAAABIABwAbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1z
dGFsbGVkLWhvbGRzLXNsZWVwLWFzc2VydGlvbi1zdGRlcnIudHh0VVQJAAOwQcxXsEHMV3V4CwAB
BPUBAAAEFAAAAA3ISwrCMBAA0L2nmAso+frpTulGcKXFjbiYptMaSJMyaZF4ert7PCXkfitOW2FA
HCtjK6t2Vmmol3G6U+yIGyZ6aW2MrORBamXfcB1iYh8HcCnOnELjR2oxE2SaoS3ggqe4ihwu656f
DxynQJel74lrn6eA5YaFGL6YAbuOOpgTIOQS3YdT9D/izR9QSwMEFAACAAgA7kUkSc5YYO3CAAAA
JAMAACgAHABtZWRpYS9zb3VyY2VzLWZhbGxiYWNrLWNvZGVjcy1zdGRlcnIudHh0VVQJAAMQQsxX
EELMV3V4CwABBPUBAAAEFAAAAO2QMYsCMRCFa/0VU56NuO6CEsTCtVDQSo4rxGI2mY3B3GRJZhH/
vbnDzk657sqB976PeQfqACqYzFU1U9MZ0DUVRTX2QaOHKDpSF6I4tseyrIryBIs1Nb1dKkgke0oJ
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
FsXVyL2iMJwk6+qIvcPgHKfZLct5v26+0sw0vmwEQXRGecAaGyqbw4z4hEqSevfVwu3cZYTwVeXD
MWiAnu+F4ZI52VeTLDMmtFKlVpO18CdzpJz3JqI0qJwmF+rUIZJksEBmTu+XhB5I9hVL7znOKPb6
mKOGSok9BDTKD7Nvqe9XMaQVmk5BSai1+6Gd9Pl2kqTXA8KsW/uNg85QlDYhLZr6H9aaX7lPR4Mr
JqwaASm2alKRozmWmjwV272Hw9rfjddFIhd67VVsfMD7QzeVSGMSo9VbkXDRfFVPsFJyaYxTZITC
SbWimrNvYU0sI2hiy53qQDc+g32PzyCXipzaqVd5vVfaV3d0p1/NW6ipGVWGwWGhwywgwa5BAK7W
kVX+cZbztEijko2Jc38mfJwWzNNSFPpUDs6QvTTkkC34O6l23Yjfd+OQ+E/p667lnVxqdbnnFf9c
wx4aVaGt97aEyRln+z69rmFZ0hM1gpeCVckBiUwtjvrAOTAAqOk/ULKdhEicFbrhKp8Ayq3KRWFb
A6N/6ZwxWUxOvYtO1bvkdXQJYnevZbCk6Y52OuqnDaTOf//fRlW3UdVtVHUbVd1GVbdR1a8xqlK2
xfr+H8nHt8W6bRuntMVnm079T/vqYyvztOHTbXJz1ZOb8zN12w71PbG+yE9w9OInOC0JTzpAb/5m
rtYgk12V6yzDdg5SqGVobjsKtfhLql6Re+vdn+oE7Rw9x3n/A1BLAwQUAAIACAAORiRJyqJUQrsE
AAAmKQAATAAcAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJzaW9uLWNo
YW5nZXMtc2FtZS1wcml2YXRlLXN0ZGVyci50eHRVVAkAA0tCzFdLQsxXdXgLAAEE9QEAAAQUAAAA
7VpNc+I4EL3nlJ+gI1RNquRPDLfE2dTmsMvUJjN3YYvgipFY2Uk2l/3tK2Ewki3JQGBCtjjkELlb
3ep+/dTq4v725gGzV8xGI7rA5PbmL/z3Cy7KGJEE5zlOL+5/lcQdSkrK3kejFOe4xLeoRBNUYHAF
LsXnmBKCkzKj5JGuN9NLWr7+IBk3zGXWq6NRa6nXBz34z2A6nQZBkrpeCvtcszdHGekDzQYzRNIc
3y6NdYut/h8vMEPiMAX363GGGQaI/zm+NwzgIIoiwOOUZuTpYretvtPFAqcAEUDXy98AoW+gtNno
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
4UmTzNxcL7GyH5HMrhn7/eGnfWhFLE7kqayHnidhKw+eeRRpo/u0W5mZvboYfMdyvU4+pQNjVwjp
syV0pF8DyB72m+J929HAWXGQ1QZ+DBmdvfSfgV4m/Q1QSwMEFAACAAgAEEYkSRHDxfPNCwAAB5cB
ADIAHABzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2VuZXJhdG9yLXByaXZhdGUtc3RkZXJyLnR4dFVU
CQADUELMV1BCzFd1eAsAAQT1AQAABBQAAADtnUtX20oSx/es+Ahewjlzz/FDGMOO2CHDmZnAhGT2
stWA5hqJkWVINvezT0vyQ4/ulmSLYMNvkQVW9au6+l/V1VWVq9GnWxE8i+D83LFDe2zPxND3PDEJ
Xd8bTv2ZcFp/tDpW+7Rn9XvdwVm/c9o/+OG5/5uLq9GnUaHN+fkk1/4y8B+HU1d4oezpMN9bd3Bw
9Gi73nGr0GlpV0epnk6s0+6xoSt77Afh98D2ZnbcYdTBwdV69f6T8EafvgnZbhYObW8iplPhHBw5
Y2V3TyK484PHC1Wvt//+pxtG5J/syZ+ud38b+oFuBoqu1TOpON96/enZ5bjOjWGJihau9+z/Ka4l
Y+yI7MJzUo2+u48iODqOFpD6NZ5bQh4TXLqBnNhR++fp3d3dycnE6ViTdrFRzMhrL+GEHCdZ02KB
s4h8LY7f/SXD8uwvdCuXPAyEHYrr8X9l43jXlqMYOOUbVhwvKL1rk0iMC52o2PlX4bej4wxrOv32
cVYkSldYlduXsoEf/JIsEVMRiuUEliKo4q6a0vBVseSSFXd7Trxi/VY82J4zFaN4sHKyxd8riZ3J
eX1/EIFo2fJfx+qdnbRPB4NBS54fRx7jg3pd3fhPT5K/ttdasf1vLc9/aYWmMcpmPZwHgYS/1UiG
BguIWrRIuLJqlxx/Dbgl25VGLzNSjIr0ryLz3bXMK2VwOZPVGJLwOo1+5+fBAgb9x6eI0lGQ+F62
l9v5ZCJmMzmVP1qThJktOd4s4qI7S2uzk367HXW46spxZ092OHn4/LxSWanj1hvnjluE1LrFxSie
OkCto0PJG6vfPR1YvW7fOi4oBwOjS0+aiPmsUyYFpd/QYTtrW69+2NJjvNphiyRqfdQynO3JPded
u4i56VMUtex0z2y7f3LaPjafwetc22a25GTQfUt2dcYd47pnoR2E/0nO4lBO4l6k1Z/ZSo1Vva5t
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
rQ4RlLDQ655EZp5cLeKko9iXQd56hzHk5ztdj6LCnbCCUSPfzP6d8GqZsaQxypRBKcaP3ovO7UyR
N/FE1BCpvoN2wUL4iVXmCZm68v38RYsun5iWqRHXhDOHYeLALq8c328t2o+sd9xzSX3fBhG5/Vue
dUqjdIyf/R8/J5+8fbHBI0YpVAm+2uqWqearQt1L9v7y4/MX/CAs11i0IE038jH0e2PdcXZfdRo+
a/79RcJdzw1XbxZ49exBHhxMz079VvODzlMJse/zN/+OgaSQac0axytfa6A+HENdpyR/XLXuqdNW
iSk+Z1Ui6s6rDkXlF/3Pe24nxd/ee608h7W0eB0r3/8m+sTo0MK8OMn//ffIvkqUWJR3mRJ69TxF
g2Wf9hp6d16s+QFdXo53shmEe8YXBvexaT//nTHhmcOy/BpT0IplsgHoE8vKAL5Ooa8O6roqfcXb
bd9Ux7+WkyeVk1FXex0B+YfvRo2pCt429NMq7dO5Wz2t1uTp5B8Kqy3Nn6a7MCOFWbLzsh1l3Anj
iL1NUZ4zmoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKD
wCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPA
IDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8Ag
MAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAwCAwCg8AgMAgMAoPAIDAIDAKDwCAw
CAwCg8AgMAgMAoPAIDAIDAKDwCDwdxO4VPIl2qXMvw7jxW0Q7lWmgDagDWj/6tB+eX158WYTFMVc
B/U5CEOnuM+Jar3XNNhVzd6xeb6q2w/VKd/vUV5FLYV5wLvK3BEukpS8pxY+z9266MU+nBINvvpb
8nVGCmNCK/QbmvpkZFojw56ObDoQBK4G0VP8yOaHQrmKfE5NUTb9gWKnsWJhUW+KtWs38kN2uK5c
SMnxhzUjwLj0G5qj6ZhO0KmlbVnkU8IULHBERXnMBEfQUMIY9iQydHwt4qSj9Za0+XlEC7b5CS/w
g6NH006mcL95XdTSsQjByV2EQbru6uBK8CheQk/IFJ3ZhI/88olpmZo79VGsnFzx4Ic8qDNMB/m2
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
XMedgo9mTSFUfoXWgo9mqiTSuFzjco3LNS7XuFzjco3LNS7XuFzjco3LNS7XuFzjco3LNS7XuFzj
co3LNS7XuFzjco3LNS7XuFzjco3LNS7XuFzjco3Lj8jaCwCG/CXIimd3YRRNhXcbu8oXUsQXdGv/
h002lf+DdyxzZNc2g+z1oDqR4VSJ1u67h9k70ou902scA9uQRlTy3vfpF6u4cH+3bucfUEsDBBQA
AgAIABdGJEmwVxHa7gYAABNaAABBABwAc3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1pbnRyaW5z
aWMtcHJvcGVydGllcy1wcml2YXRlLXN0ZGVyci50eHRVVAkAA15CzFdeQsxXdXgLAAEE9QEAAAQU
AAAA7VxLc9s2EL775J/AozSTzFAURVG62VTcatpGru30TpGwzYYCVRCy40t+ewG+BBAPUpacpA0O
nrGIXSyw++2HBfhYLi5vAXoCaD7PtgAuLm/APzuQ4yCEEUhTEJ99ggm5slxcLkIcrsMcqCSt99b5
2WATJnBoSZSiDEIQ4SSDQZrlIL5C2SZIEwAxVbQGI9eejl1v7PiziTPzhpquwnWG8B0KYR4WHRaW
l/uZxJVk0DJJ5Bgr3mjqnQ3itdTEFqD7DG0uZJYE8b2dzmm2RuD4Z7d//p5g2ttlGH1O4MMtzpBq
jqfxrjt1hqy7ThJ4IseMthBFIf33LtkAdJUgIjewv0zv7+8nkygeuZE9FJSibLNJ8AqWI6PNe9fe
ZfV4SylGkZ2M2CjMQ2JS69lWhx2RiJP4+hDwzOcJfMo+g1XtsAsYM0qF+waFq67IlQy9EBMgBRjU
HdTul7lKLqlplQxPuDQYspF0xrE91HrkMYRxChaFsW6x6nfjjpyM6+4RIGCF5G/kjmcTe+r7vkWw
GJN8OTusq+tsuyVQDKHVIPSdBbNnC+tsdI062CFEcq2xpFGomKXSKL3S6JXYUnBSGS6WJjRmMg2c
imzkkoZyhtCJzLNfO9AwGnkdaCD5sRAn8iaDcarBqJKjHkljgwiuWIqbz1HFddlmSyVjiUgG+V5u
d1EE8pwM5b0VlVG2iL2chjfJWf6feLZNO2y6ipN8G+Lo8cNTQ9yMa8drm+cBSseqyRVUzWS2NTgn
vnE9Z+q7Y8dzxRVA4+hOCgCFn1UrhrBMnogFZrb75izA2ngzFqCI2nMA59kxibmKEKhz2SyimiNn
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
2P4bI22o6lPVp6pPVZ+qPlV9qvpU9anqU9Wnqk9Vn6o+VX1+nvosHlU0VWj5oQanVR5NRlB6m5cL
ySuVeYDyfl+nWHWffDswrcQPkEq9pZwlLfN5hOOfcXyNo70fM99CTTjiaMDLnDkBgdDv8SWUZfoN
6zhIXdWhBtUM+MSCeb0IvSWTTQCu+ed3yDNZlhWDpCInB/OyJCwgvraeC3guXzqvdiBdSvNZFVBQ
VVBVUFVQVVBVUFVQVVBVUFVQVVCtQPWo3ypUlwPqckARriJcRbgKqgqqCqoKqgqqCqoKqgqqCqoK
qp8Pqur37+r37+r37+r3742/fxe+IrL+WuCqrSgOdrK3yb7ADPvmtaS1QJJl6BOz8r4w+kLQqpBm
lYW29vMaJ+/+XR6opaIxMjUh0ATvM+79C1BLAwQUAAIACAAYRiRJ+Y98hdQAAABAAgAALQAcAHN0
b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUCQADX0LMV19CzFd1
eAsAAQT1AQAABBQAAAC1kb0OgkAQhHsqH4HyrjAB5EfpBEJCZaL4AOexJBdhTw8kVj67QEwkgFrZ
bma+nZ1NouAAqgHl+/ICGAV7uN6gqkOGHIoCMu2Iop0kURCxmp1YBZ+U+lJfaMn/eNlLH0pE4LWQ
GBay6nWmbXgr211Z641reu50x9vj+3zkj5Usw0IA1t3GMc1aa6RkAqk+E/wHigxIju1ZdO54gY08
w+4CinWgLWapYlixHpuKEhShXyLIL8ZYqLbwQYW8SzmBzKV6TGaE6sS4e3meOw7PTNM1aPufJ1BL
AwQUAAIACAAZRiRJV6RdE/wHAACdgAAAOgAcAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgt
cG9wdWxhdGlvbi1wcml2YXRlLXN0ZGVyci50eHRVVAkAA2FCzFdhQsxXdXgLAAEE9QEAAAQUAAAA
7VxLc+I4EL7PKT/BR6jaVBljjMmNQFKb2tpJapKZPQusJN4Bm7WdZOayv30kCxvZevgBBMj0IVXB
7taj9XVL6k/yzfTyGs2TMPp5ceHhBU7wFCVohmJsnBtnn26ml5MwCPA88cPgIbzH0SuOVJKat18D
/78XTGSypxcXwqNO1+iYP4aPj4+Dwdyz+p7ZJZqdJfKDriEp4BkF3gJP08qqxda/b1c4QrQzMWnX
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
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVkYXRhYmFzZS1yZXF1ZXN0LWV2ZW50LXN0
ZGVyci50eHRVVAkAAy5CzFcuQsxXdXgLAAEE9QEAAAQUAAAAlVTLbsIwELxz4hN8g0hFCg0Q8BFC
JaRKtIV+gGNvwCLYqW1oe+m3dwMkokoI6iEHr2d2Zh/OIpquwBzBUKozUNH0DT4OYN2MKQ5pCqK1
iKZPjDttvikVkIKDiDkWMwukR9r59UwrBdxJrda6SFaPbLh9VxKFEVNEKa2Euh7p+l9hkiTD0I95
IHwPmd09k8ojNQm2TIkUopPYfdjlvMzAsLwYi77WWzBAGH79wcgPxpPHyYhgn4RUm9b/Ur3oLANB
mCK6CD8QpT+Ja9K453p2MAaUK5UaCAhJtNlfGOeulLzTDLoirmWexzVlfIeWVrgK0Fq9PkuXo66j
lG7ALc3cIjGVdltkWKhEo4Ao5t2+Ra8KkVMITySRKZBOu0PQrJB211CpkCKqWr7aP55qCxVi3UB/
7i1hf3RawlvPoHBSaiBwef3QKDWXF6f3WY4UNRCt/mZZHTgHa9FKj/DzPAnq2XyQ0uIe+WEwGA2D
MAx9f5wnLFNh6zLm+HZ+zEk49etq4iD2vVu13Pg//AJQSwMEFAACAAgA/UUkSWA29DJWAAAAmQAA
AEIAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtcmVxdWVzdC1wcml2
YXRlLXN0ZGVyci50eHRVVAkAAy5CzFcuQsxXdXgLAAEE9QEAAAQUAAAA83RxCk4tKkstsrLKL0jN
c3EKSi0sTS0ucU7MS07NyUlN4fJ0cXJLTC7JL6q0skpJzUktSXVJLElMSixOVdBVEABJO+fn5aUm
l2Tm54XkwwwjXiUOawFQSwMEFAACAAgA/UUkSTXyLrgQAQAAIQMAADoAHABzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtcmVxdWVzdC1zdGRlcnIudHh0VVQJAAMuQsxXLkLM
V3V4CwABBPUBAAAEFAAAAJVSyW6DMBC9c+on+AhSK5GkTRqOYFXi1KpJP2Cwh8YKGRPjdLn02+uS
pZUwoB44MH6b3kzO0xWaNzRJIrFCixwsFNAgu2FXwQup/QFznp6nSdIZhREL449FWZZ3i7gQMxlH
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
cIUrXOEKV7jCFa5whStc4QpXuMIVrnCFK1zhCle4whWucIUrXOEKV7jCFa5whStc4QpXuPr4rsJs
vY7Ls9akPsdJ4tffK0Wt87dscEhxeNy8qrl70bzkuzH2K+pUWE34EG9fG9RDPTQUVktq+j0an+Rf
351TJkZNhE75w+LUjWlbkX8T1547rjdz5vPZ9NI703Q1Tp+yH2KxN3OVRko1tSDjSDNDYE3PELsK
0igR+89NFwrZ8buVyIUVyL+J69nOhTu3XWsj0kiuiGFb8HU+j7cHX5Nb2jk87ymzyK+WWT6Qhfdy
8ItUBmwSUQpNP5SNpN1OUWab1tp5M89z22XCJCvEcaGJ1y60Dn4uhV+VvNnl9VHEzLvoncwOtLqi
qK+8dJA2+6QfpKFIEtHdnXdjO3+rav4CUEsDBBQAAgAIAANGJElNmJVAxQkAAPcEAgAwABwAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2dldC1rZXlyYW5nZS1zdGRlcnIudHh0VVQJAAM1QsxXNULM
V3V4CwABBPUBAAAEFAAAAO3aQXPiOBqA4XtO/ATfBqqmqww2NnBLO9O9qdpaeieZuRtbCd4YmzVO
sn2Z376yAWOwLENPeiZT8x6oFKBPkqVHn7GU25uPdyJ7EdlsFvq5v/A3wkuTRAR5lCZenG5EaHww
hrbpWrYztlzXHU/sq1+S6L/P4vbm400jZjYLTuI/ZenKiyOR5LKm3mltlnPVX/lRMjAalXZW1a/V
5Ewm5uBKUUeUvKRPYr4WmV9UdJ2E95mfbPyy2vtoJbL+4Or2MAzpWiQ3H38Wsp5N7vlJIOJYhKqa
1SWLnr15fe1DlGou7FOUyZbaY5d+EsZi/74aoo1s8n4pMmH48jW0HdOa2K5pG7J/YZQ8Flf3STaT
Zl+lGhGLvKpjf/EHD/dp5UtZUvOtoseNj/oDo2/+z314eBi75iKwQnOgHa7dJZeNvc3ITEdTpxqZ
y6r6kq7XcoL9xKhm8UcjSV+NXNdGV6+95yyTK6RqSRMgizyk2WoXsR2VKm4LL1woI7fT9dEPnmSX
7iQFcXX3739GeVGq/uls9ijyefbTRgbG0Wa5r+E2eUhlA/ucI1tqCW82ZJQfyXfGQxQL44feD4bs
bBhtnjRXGkbhTbPLNX9BkWAagaoJ/a0L4dApEbYtg31PqjZkwXl96c9m2S4HpKt1UTJUFEmT41ru
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
QiJuMPswiqbpd/3G+QaFtcB/rF4A/spgDa5kc9SgfWWyul47R3wpkwr1NcRKlM6YCjTX4vJDiMLk
uSkwS61p4sRWiCzTIpboA2vsnlxra/BdFj0VfJdEvtTqjoKGprQX45ocWYVs48gL5Mur+4+8woGO
OGuicaa8gBZIKKYBL6IRWpf4BeHR6kktoaooqrJTBPrzBRpED1dnqoOPOgO2wgcEv1sRiIXOY3pI
4ePjVek0tQkl45AcS9tjS5ZQENEvO1ib8s1T76SdoGXPo0jvDOt+Z0FPo1h5mHBZuaaWmAYvEND8
TKcRNTvYXa1i/kKgqd9122DlHOS0PqVu59EYKkkZZ2idrfPRaP5vk+1XCf6yKLl7tzTQFzbUglx1
NfoVCJTGQk19kdJUSodjTu3t2CXUBNfm9trcfkxze3y7qTuvufa+1973/9T7/ir3R5fbibfofdPn
EMLiueMRLRoFog149WD65meOihc/AoflKB1VCaJUUPA+Tw1U2o4fOI2c2tdSAj976zSNwhzSq8+l
dCCkFcU/m3JHI7P3llq66YuL67uJc7ybuISHAK45PvkhQNNG9m0PBto2wA0v7Ft0tde7/bPd7V/c
3nzyS4MGdbfmTHUNieo49TMkh5bmLHX1OhdXV1qveb3Vj/oqsKRTrxJHo6+gSw8oEGZ9RCC49gVE
O/gQ4z/ga92KNamJP7f1QLOuUb3K/KC0b0zYaLKLCBVI8M4nOxoItDZA8Hp3eu0fr/3j9e704u9O
33JNyBc88VZsJAeu69T2pwO377brTwcDd1SZ1EF7RzugbEil/6nyntRKEz/Qn636/Z9QSwMEFAAC
AAgAA0YkSfsQ1l0xBgAA2zQAAEoAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiZGF0YWJh
c2UtZGVsZXRlb2JqZWN0c3RvcmUtZmFpbHVyZXMtc3RkZXJyLnR4dFVUCQADNULMVzVCzFd1eAsA
AQT1AQAABBQAAADtW0tzozgQvufkn6Db2FWTKgwYY98SezLrqq11dpzsnYfsMMHCAzjZXOa3bwsM
CJCEcciOp8qHqSmLVnerH5+6JWUxv13h8AWH02mww2R++w3/2OMonlnEwb6P3atH4sHIYn47t2LL
tiIsokTXqHe16Jhff2t5ZIA4k5yAEOzEXkBmfhBh9y4MtjPfwySmE1F/qCtjTTdG2nhsjBV9wBPs
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
dU/lbnaeK6Z/C/elHmv1Z0R++Ws0W1Sq3B/yDpD7YjQvZ28XdSeP1ufMRtnbqjl54QIltWE6Hg/i
U9SPV02N9+wfolJR8PNg252hHGpUxvrte+Fh5z21Bco7dO+34/O5aXak4O2myXHem3OgQvWn8HUJ
anadP2MPrAp5/76oWnrI3PMuh+G0qBxPBL7TYKeD7cXnKH77sskum60WWHmulq6VZZRKtK7rfr+g
umq7ecAftNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
QgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EIL
LbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
QgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EIL
LbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
QgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EIL
LbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
QgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EIL
LbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
QgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EIL
LbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy20
0EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBC
Cy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgst
tNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQQgsttNBCCy200EILLbTQ
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
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
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
uKfrLY188ZeRdE69wDpzvXWT0V6Lb/a8wd7vB9LdM87uSpnVaHmVH0wLZzK78ufi9VFs/SN2sU73
lc51fLbEZ0t8tvRHfbZEPnqrfERyIbmQXEguJBeSC8mF5EJyIbmQXEgub5pc3mZ9kW3INmQbsg3Z
hmzz9tmGp0FkObIcWY4sR5Yjy5HlyHJkObIcWY4sR5bbN8sR9/87LqcYTjGcYjjFcIrhFMMphrjE
JS5xiUtc4hKXuMQlLnGJS1ziEpe4xCUucYlLXOISl7jEJS5xiUtc4hKXuMQlLnGJS1ziEpe4xCUu
cfl2Ed8u4ttFfLuIbxfx7SK+XcS3i8jqf+2sTkomJZOS+TPA/Blg/gwwfwb4jf4McOFdlU8Wmz9i
m3VgfTWbVGNoGHqxjO0Fkdwt1DOKhe7N75acJiXP16t8p8bQGNeOcklg2pBz8BtQSwMEFAACAAgA
CUYkSXmiiZtmBgAA4jQAAEMAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3Rv
cmUtZGVsZXRlLTItcHJpdmF0ZS1zdGRlcnIudHh0VVQJAANBQsxXQULMV3V4CwABBPUBAAAEFAAA
AO1bS3PiOBC+c8pP8BGqNlUGG/O4ERhmqa0dUpPM3mVbEO8YmbVNmLnsb5+WjW3ZetgQyCQVDqkK
VrfU6v7665YMi9ndAw6fcTgeuyhGNorwNCAEO7EXkKkfRNjVbrWuqQ8M0+obg8GgPzRb34j33w4v
ZnczTmc8dir68zDYTH0PkxhmuqnOZlit9gZ5pKNxk9ZO1WZmsoZDvdMSzOGR5+A7Xm5xiOhEE+I+
hohEKJn20dvgsN1RmBAoFOdeiN3WonChQ63kJhFZ9T/3rN3R2vqPwWq16g902+5aeke7oZPPYcUg
/AkBwj6OcSZPPUCHC9c/BnkohZKKUYGFNQY6hpsYKPfcEyKuj2fJYvVih895nCKw6/EJh1hD8Nc1
Ld0YjnojS9ti4npk3TpuqvtguwUoI6LlAf1DI8Fei1Vr1Fk93YUhgDFfSaEAIqsg3Bw0Uq/kekkM
2q4t1EzDdYec72DSA0BB5U3Xc2e8/EUg6hQQFWIwsyRfAwRhx2R29xXDvFE8HofpP9Ngs6WSrkAk
IOVZHnaOg6MITLnVnNSZGqwXUS96UYlbdH1IJ8yncr1oi2Ln6dNzTiBMwhk28AebbgAUItscHWMT
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
rrG1GFc9YWaCZTax8i+yeseW9Mb3Bdf9yj6o7hcwLYFZSdv2zBb5LKMcayoESiegvilQoqEamkOP
aKsQkoMuCg4KKZCtHvFTGhrLxwMlFnPDHk9syxkOTHMfiQ9TmRd6f4ZXLmKhQzqXT9+DJKWjmHIF
IK80YLzvY0ourQihajyoanLkAhldj4Shi7Po6VsDjjmTQUWhalLbSioyIx6sp3PhwLwmCvAMFa7p
61mYabp6YaKHd6EDClTn548vqdjKUNTuNngxVY6AkK0YVAKUN9vg8uG48vEoVGNKqZTcPX6tuc6y
P64c0RTsfr0p5CXUQlpm8X/oKsLEmiglrYT6ph4lor0GgqKtnnZzwUHLv5ZZFESYnzrXYwR6Lqu6
9qFAg0DPdet+2axcNiuXzcpls3LZrHyYzcoZJDnebAJW3be8BmE4y67rT/knDNgo/PXhK8Iv3GzQ
lXyOuvdx9cnqXgwcFF/qpFJ9jbFSpXOnQs21unwXREHyDP5Rtq1EXJp5m4Ifpd6yUarPHoeDiXPK
i1BVL5AhTegFEpZIs75S2CD93Zg28GkVpE3m8OTv4z3QrFWFE6jqrJmmmPIngxUT1D/ihojQJpEo
DGurJ80Eh0IFTl+P4N8XMJhe2jRHsTUw1SnsHti+D4mPO9PV3Sv9zYoBrTxOne2pXn9nLJ2ilkwy
D8kHCtZkICMTRHhlB410b0+7N3WMIx/kKqid69yvKeARwco3JB+LZ+qIGXBJRcnP9IqlodPdNA7c
9h0N/1Cg7frIAVjrH5pQEvDbo4G+92nC/eNcELTnv4LXcg9x827IbXi4EviHoWvjqUUjO+A2bAcy
G6HT1z1P/L7p/Vv4m/bv60OLa+rOa74Xihf1K1faqcvA2ej1q+zKCp1a1wwqlHsh4Q7uYvob/GgF
9vtjp9jufFnZWtQBeS9blKKJJundZBcyDMjozmM7XOlZGEdwOYheDqLHHEQvB8bLgfFsB8bK3YTF
W92ntYrPjc8Xhv/YJYtRIskZOo5de7WXfs5ZN+o7VaMN+eFC9oX3Yq8yNY+hM1YCTfHVeucnUEsD
BBQAAgAIAAlGJEkU/APXBgYAALIuAAA/ABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9i
amVjdHN0b3JlLWdldC1mYWlsdXJlcy1zdGRlcnIudHh0VVQJAANCQsxXQkLMV3V4CwABBPUBAAAE
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
B3VQB3VQB3VQB3VQxwF2DrBzgJ0D7Cg2ig11UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1
UAd1UAd1UAd1UAd1/HkN4EQSoQ7qkETgRBKhDuqQROBEEqEO6qAO6qAO6qAO6qAO6qAO6qAO6jjA
zgF2DrBzgB3FRrH5lThwsp2AOqiDOqiDOqhj+8f2DziRRKiDOqiDOqiDOrZ/wAmcSCLUQR3UQR3U
QR3UQR3UQR3UQR3UQR3UQR3UQR3UQR3U8V8YwAmcSCLUIYnACZxIItRBHdRBHcfhOQ7Pcfjv6zi8
WtiFmzq9jdSr63lmer9gqhTvHQc8lKr2/vDFnC0/bF7I9Rzr0Sh1mAr8gTw2KxvVJLXdbHyau1uS
q304JhpFqEv22xVJB6scRf30dG000I3hYDQa9idGq8JV138JnuVsA8qF7xS6SbHpNOVs0NAw5a2h
7ZNSOE9urnMXIuX4/ZNUgmqpn55uaAOlq5ouljKVyYYUN6ug3M91syKhKmPYrrGZhRfzIDyQeg9q
8jPfXKtyhR8F9Uiequn7BXVJmq9V5+IhluFnGUaqoali9igzNzrdlKUdH9WLaLmz7sbQMPRdG9sL
Irlv1DN2jRbW21yaieX1Wgj2WgyNce1ClCBNO3Lq7IPi1M3kdeF5srzHWc+t3fofUEsDBBQAAgAI
AAtGJElwZGPgugsAAC5uAQAzABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LTItcHJp
dmF0ZS1zdGRlcnIudHh0VVQJAANFQsxXRULMV3V4CwABBPUBAAAEFAAAAO2dTXOjOhaG91nlJ7CM
q6arsMHYzs6NOxnX1FynOrl31hiUhGkMHsBO9+b+9hEfBoE+wIl9u5P7LrIwOpKOpEcH6YgcLRef
70m8J/H1teekztpJiB2FIXFTPwrtIEqIp33ShqY+MUxrbEwmk/HUvPg99P+3I8vF5wWX5/rabeW/
iaONHfgkTGlJl+3SDOviauP44UDjCu0s6oopyZpO9cGFoAw/3EffyGpLYicraB56D7ETJk5e7IO/
IfHV4GJZd0O0JeHi81dCy0lS2wldEgTEE5Uslsw0UzQpUihy48e0JkYXN2s1V4hIlz+5Z1cD7Ur/
Pnl8fBxP9PV6aOkDqhgVuKE1RvEPOuAkICk5yOd60+R6KB+iCg2hpCJVoGGHgq7h5QrKe+7ZCb2A
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
Sfit/B7WDgAAxj4CADIAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtY3Vyc29yLTMt
c3RkZXJyLnR4dFVUCQADTULMV01CzFd1eAsAAQT1AQAABBQAAADtnUFz2kgahqv2yMk/ocsXQ9Vk
hAFjzC3BDuXKZsniTHxMCaljayMkrSTsyWV/+7aEJBqQBEycsSfzHLZmLb5utbrf5+tXmupvri/f
3MjwQYbDoR9I7/LNVP53IaN4ZHqWdF1pN37zHHXl+vLNpRmbMzOSVZHilThqXK/6s7P4ke950ood
3xu5fpTGnfba591e/6x7fn5+Nuht32PVZji0Ntq/Df35yHWkFyd33Oyt228056bjtUTJwHd01dR6
6g8G7VZNV+bMD+OPoelFZtrh5tNXzGbTnpV2F8jwix/OX5f1etgKvJdzP/ymot+Y1lfHu7uJ/bBq
vMtYPVCLyNo0W1Vdhuryg5zM/qOmNL301g8/yTBKpvfe9O5k+jTJpKz1qsYemsn//ejMZfjWCdXA
m+3fz798+XJ23p7NelY7v6XWt9KTdGUsp9LyQ3urU8ufz5144i2nPx+xZ8vf83FeeXHoyOjWie8/
me5CvpPfkl5WSvvo52u37Ezrv2w4pm2vxnJQy7UH2Vrcksfa93HqhL8xLm35K55q18Bp/Oc33qkA
poapeZapefJ7PIZOrOfCt47nRPfJDlqZ5GzH/nDYNup4D/5XOck3pNeerTVKt6dmnQfwaxqm+1pN
W7VB2q7M/y6GEKmhfryXoRSm+t9pr9/uDnrn7Z5QG76ttt5ks3mrbqOmK1+HvI/cgZTtaOWRNb+W
jHjrUrOl79tW1263VMudj5ze7Glm5qJz0S9m5rCuPvhBoIyH6YliFX8Rnv8o4rp77Br1aBGGyk0W
d6ppkDm+rMVyVop26RpUecXlculerHHz738qXLYc2p2MJ+FVpBq6Cp68h2vvi69ukPtzdaeK5ts3
Eukl9Zf44rhSnBydCDVY24m+1nN5uT1k3TUlZnyrYdmC/m+XCE/7qQirMMhHUtxDBU50L52ksKWp
9udBEmmXhPjeei83C8uSUaSG8kpYy/UUD0sjLJxo7f2k3R4kHRZdqakLzNi6v3ooXkI0K9ydKSus
E5/4/qqHS98JNIZF80jNjdJw/2LQ6Xb7ra3Xk5qJ3gm7TOe56tVk6zXuiXjvnnZ+OO/6PX4Y74mi
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
DMRADMRADMRADMRADMRADMRADMRADMRADMRADMRADMTw/TGc/pONzohWQfb+YtNbjbVb0Pxl5TW7
jv1s+WlNtW3DK6GHN1wrHRpe6qw7f8tNXu0Tq5vDa5bLhTBmM2N6Pp6MOn5G9alp/hM3Qwwcy/dt
tdZh5y/B5nXH0vBWam3bcrLVNComxlvlXXonvC7j8pum7vJrNjZr2ZVfz61ek1lZ09acyurAmSge
6nMWjZLXW7Pvj1d6+Vu+zkMUh1GWemoKoVYSfbsQ7/rvevPsKy8Wtpe+gCr88ElG4l5+S392YgWu
eNjtjldOyNYTt/P0DM2PsTU381b1WVlJmx/Px0p57crK2nrc/GX7llbbtxxZtW17ti4qHVp/1FSu
g2H6ScSF1B2d62b7EF+Ch1i6V35oX3u+/CydMHLjV2Xh4kc37pSMXNQdYeuPozpq5qItibAaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Ea
q7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7Eaq7H6TWpmuN16+15p654835+n
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
p6y4I3d4/t/+QliOHknyYBbswbrrNliBgPGsV3iBd7WR0dgda40gcZstjC17cBmJl9dhLVJWT8Cl
rj4K70RiCNve6hAEkCRX7BFOT0G/X5z9xdn/BWfPJ4om1spnD8WoGU1B0HiaLIXM7BXOOeVJPcif
i+0YmURQlb9PyKf2p1Yhmh1t/Sg/RJKYvQHP2fS5/Rmb8ZAcsC0vRy4i0uL6xV9GJsMpTnorxSwf
wX4C0t8gfYLkEKfCqT/Pm5sR7+QMmx6E/gCPB1q0I52UFa7qVMPMRn7CLU+nkskmAtf8q1+YIynL
6klSkTOTeS4Ja4rgpZ7P9Jx/dF2XkXRujGdV4IdR9QY9ENvtolTuI9+iOJ7m4+Zu/TscNnZaVfdS
p1V72dBcFGs0XZRXF5tfrDe0WEolXZtlFr5uukKbpTR7CRpX9VcqL/K12qCPJ5yP3o/9dDcwut5R
Rcpa76hIKCWGbY0MnqZ8xhtSbx1lTenpsk8xD6F6KK7QMvVj1blfYyWTruiKaeTXau3qdR7bS3F3
B67rVC6hss89VaGeKwvtvHcf8g9D82MhqGgM3JE2EJovTMYPNvWPbFXIjmtrt/4DUEsDBBQAAgAI
ABJGJEl2vU3DGwYAAG4zAABDABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5zYWN0aW9u
LXNjaGVkdWxlci0xLXByaXZhdGUtc3RkZXJyLnR4dFVUCQADVELMV1RCzFd1eAsAAQT1AQAABBQA
AADtW0lzm0gUvuvkn8BRqhpXIUBoudmS7VFNTeSKnbk30JKZINA0yEou89vzWAQNvQBaRprEhxxE
v63f8nX3e858dv+CyTsmk4mDImShEE8D38d25Ab+1AtC7Ci3St9Qh7phDvThcDgYGZ0vvvvPFs9n
9zOGZzKxK/yPJFhPPRf7EUi6qUrTzU53jVy/pzBCa0V1KUnmaKT2OhwZrv8efMWLDSYoFnTnO68E
+SFKxL66a0y6vc68cEOwwf7s/jMGOWE0Rb6NPQ87PMl8ytgyyZYCiSGPLgFNlC12vGtGCM+Wf5lv
3Z7SVb8Nl8vlYKhaVt9Ue2AYEDyCxoB8h4BjD0d4T5/YDctFKF+DPDW4lJJVjoU1Btq6kxgo9twb
8h0PzxJl9WTZ7zzuIdj1+oYJVhD86xumqo/G2thUIIiO66867UQ9B5sNxBr5Sh7Q3xQ/2CmRTEed
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
25hzL4bVjemC4Ou6579q41r5qMtNbN1S2fq71T/ZvHeqHt8wNage2zzYOam8oCYptt3YuIucreCL
t8u1e36adI47h53Y6zu9B+3fTr71YiS7g/54fBk/6z2TnfieJ9tuS03UbT1246NsO6gM49vdLZXf
x628GiqPNV/P1WENX7CrQ5oprdZcjaCP4cur30eT6eQ83WQUn0h2fkmy4sFkUjw6Z3TUjowatyxv
ZoEez5EX/1tzltZR+56zFLOQxo/SjRlZd5LVNKX5DN3ew9bE68fduvIKqPdcm4il58rOSl91i03P
I74XOvtzzX9iZls71o61Y+1YO9aOtWPtWDvWjrVj7Vg71o61Y+1YO9bO/+fa2fyzybbVc1F/xFet
n/U73reCNj/blkebb0XpwMY/ma0Oal5Jpeuw+nPkoPh5/ueMyDCJL82/PE9+2vnp2fzQ2d/vLkfF
X8qScfY55AXF2f8/pp8Ok9ubm/UjD1J48fhf/mESG+7yxrMb96x45PnzSZj+JUzfhMnteFr602ax
6J5M7fLNBlkaL/1tOLtN539z3Z1m87eqUouxEH2Gp9S7ccr7AFfef/sTzXdy89h6JHeOa8Z8vnFw
TYI+9J3XPM+/9vd6GNLzxvt59wBUUUUVVVRRRRVVVFFFFVVU/zepmluZW5lbCVgBiyqqqKKKKqqo
oooqqqiiiiqqqKJqxGrE+gONWKml1h8G1AK1QMAKWAErYAWsEQGqqKKKKqqooooqqqiiiqq5lbmV
uZW5lYAVsKiiiiqqqKKKKqqooooqqqiiiiqqRqxGrP6LAWqp9YcBtUAtELACVsAKWAFrRIAqqqii
iiqqqKKKKqqGAYYBhgECVsCiiiqqqKKKKqqooooqqqiiam5lbmVuJWAFrC6AKqqooooqqqiiiiqq
qKKKqrmVuZW5lYAVsLoAqqiiiiqqqKKKKqqooooqqqiiasRqxGrEKmAFrC6AKqqooooqqqiiiiqq
hgGGAYYBAlbA6gKooooqqqiiiiqqqKKKKqrmVuZW5lbmVgJWwKKKKqqooooqqqiiiiqqqKJqbmVu
ZW4lYAWsLoAqqqiiiiqqqKKKKqqooooqqqgasRqxGrEKWAErYFFFFVVUUUUVVVRRRdUwwDDAMEDA
ClgBiyqqqKKKKqqooooqqqiiiqq5lbmVuZWAFbACVsAKWAErYG22UEVVF9AFdAEBK2B1AVRRRRVV
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
xTL48+jvP4I/gj+CP4I/gj+CP4I/gj+CP4I/gj+CP4I/gj+CP4I/gj+CP+L+I+4/4v4j+CP4I/gj
+CP4I/gj+CP4I/gj+CP4I/gj+CP4I/gj+CP4I+4/Nur+43H+/iP4I/gj+CP4I/gj+CP4I/gj+CP4
I/gj+CP4I/gj+GMj+CMoYh0UsQnERdV0/aP/crTajr0fz/m4nb4uIAuucfZc49BA/sOv+H4EmC6v
35JrWqDag22MxmrPcXm6fbotcT78F8SNQ9z23yy2Hpe3YThFPK8JXKdOggWquVmAGW4gDiNF/SUu
JN4MmMDH2QGc3RJMaA2/H404D+KdIhGNX43FC7l23F/J+8GhXeOWWEWSV2CPmpb3qGIafsrfTRNP
E5EvchSP+D8T/xvxXhY+c6x6Ju9hVMjW+5XicUlIADUPNQ81fyRqHhL20BIW/CTeshuhUkEVClOF
T1JzBzncV2YVxWVBWaqRLyPq4h71y5H6b9Id4Dz+ubAmB6U0Q0McP1mJ3iSTrayj4uYkANkD2QPZ
U1327CdgysqlglqmnDqC7KlN9hz6RmFTtAXk3p6ENu+MK2gqI18ha6r4jCloro7sRJMlZiVvLaVL
9+ghX8wW0Jol9e6xZRnPUiXXq4FLqe2qRLaOZN/RSdhzUY5nllFs6LnuhFT5OR+XQCRAJEAkQCSa
mYg9YzmPXDJyycglI5eMXDJyycglI5eMXDKUG67Q4gotcsnIJSOXjFxyo9PCRRuvLGZP4C9WoZKh
kqGSoZKhkqGSoZKR30R+EyoZKhkqGSoZiVj8rtNJqeQKqvegd7KhkqGSoZKrquSDa1uuCt+MfGzY
c7JY7J7mPd9ZJX8fWlX6Wu7PTquKrJf72Wm1q1X6rcNyL3ay05DwjWi0rZM2JfeNmzgV5QfLfYCV
bNY4PzU105zSn2jw8+z6UzzoCNz2PL3hVPftCq54mlvP/1BLAwQUAAIACAApRiRJHip4+x8EAADH
LgAANgAcAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tYmFkLXZlcnNpb25zLXByaXZhdGUtc3RkZXJy
LnR4dFVUCQADfULMV31CzFd1eAsAAQT1AQAABBQAAADtWUtzozgQvvuUn8ARqmaqBAiMfUvIpNaH
WU9NMnsXIMeagOQVJN78+xEGYwFCebrineGQA7ifX0sf3Z3F5cU15g+Yz+dsg+nlxXf87z3OixDR
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
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYogh
hhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYY
YoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiOGzM8ySov4smcbJPojbyDzF3KvNs5kLrF+jfFAzyME2sgZMvBuRE7N8
/eqqpqH1ugrZ1+FkFryJk78H3w9iNnj81BxGbVBYiV1sg+oVXd3xNEj/GqTvgulsMmc1miXJHNiX
4Ht208/Fct3ZKI7SMMombRYtxtc6SuNlV2WIYTrXG9Tc15NsFy65j3ep/+qG5pUsxtYj2Ylrpn5b
CK7RHlYEVYBfhbXW6/Aczm+fOkGHab9thLEbwDzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wz
zzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM888
88wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPM
M88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPP
PPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzz
zDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wz
zzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888z/CcwXpnAcTIJ0w740
6GR56ZtF1LtgFCfjF1Q249yw9lXNeOcWKl9vJlEIbfBWCGuumMLE1hTM6nrD6FNQVQSHNed70K5d
u3bt2rVr165du3bt2rVr165du3bt2rVr//O0H/Ih4M3TPvA57CPA3Q/Kdj8BvKn5xOpZPtjzOfQf
8Tm0D5oP9bidmXQ7vtJwiz/PL1YKyfoc3k3C6ed9JDeBH4odVo4k6+p6PM7KYv7j12yFc03lMcRb
GqUP0R9m6SDJrlX38fnbXLtEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQoUaJEiRIl
SpQoUaJEiRIlzhPjhyCq+VL4KnVQH/GkAwOj+P4+TItfsf4WTib9xesfdr9R3fg97dLX5Lff8K7O
WHzx/JfWSbd93un2OqcXl2eXF91XFd/MD6LslVmw+z3zqnMG0df4SzBYz8V1NM4lLWbm6JnOWvzA
fO/7Gvxod/YbDi3EDbe6GFRD7udhNJ4E6583kzbNJvfD5yAJWsPs30m3c3nW7pxe9loZvnEYfcpL
KA+1+bTEClz9mEoXXKz0ngMj/cqkmoMjo4bgfGTFuDM7FUeYviVhmo9+E0YZ9OCw40zVQz9kEvNn
TRprL+usspdi7XUuLi6eXFEvy2f9FRdHRYaF1bqN8ov+I3tKzWmffrmamzVf7x1kxZGhZS915u+C
T2FUe6imEsjekhiOx7/9Hk7TrHFQPFxTceXsDe8uTio7aKyl9+kwSYPyW+nHjM4gyq79MD+Qd1Cl
Xf+0td9zCjEcr7ve6e/F7eo7484dEmvwvViiDw0nxNYxJRq7mVXHtp7yLrt+ANv3Ppt/UCu91ryo
m7D6ddiGNJf75nHwj/r7oaUeskquP6C7bTykyN4+bvoOOy/5tu6BOtf2Ak/jYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYogh
hhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYY
YoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYogh
hhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYY
YoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGxaSoP0umcbIP4jYyTzH3
avNs5gLr1ygf1AxysI2sARPvRuTELF+/uqppaL2uQvZ1OJkFb+Lk78H3g5gNHj81h1EbFFZiF9ug
ekVXdzwN0r8G6btgOpvMWY1mSTIH9iX4nt30c7FcdzaKozSMskmbRYvxtY7SeNlVGWKYzvUGNff1
JNuFS+7jXeq/uqF5JYux9Uh24pqp3xaCa7SHFUEV4FdhrfU6PIfz26dO0GHabxth7AYwzzzzzDPP
PPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzz
zDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wz
zzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM888
88wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPM
M88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPP
PPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzz
zDPPPPPMM888838C84UpHE2CYXmsyfKK/XljLvwFVcxoZ2j7imZUcSu1bc0ySuH19MqhzQVUmvCa
GhpVx1Ws7CFl0f+x+88XRylzuxaLHitFVVdTVehuQfUbFDxLrdja/4it3d79x3kcxff3YfqqMMvf
wsmkv3g9F7ocddV0Zf1Gm5H3h9EomEyCcamnaRo/zG+ksWE7iNWrJ932eafb65xeXHRPz3qvdvbT
eBrsBrUvikH3w+93QX8eebtapp2Mk167VkJp21pcqOHm/h9QSwMEFAACAAgAL0YkSYFY2wyvFAAA
CWoHADIAHABzdG9yYWdlL2luZGV4ZWRkYi9wcmVmZXRjaC1pbnZhbGlkYXRpb24tc3RkZXJyLnR4
dFVUCQADikLMV4pCzFd1eAsAAQT1AQAABBQAAADt3V9z2liaB+B7X/kjqHITp6q7CtsYY9+lyWTW
VbtDNknvXmOk2EywYAXEk5v97CvJGAT6A3bc25maZ6q6eoDz03s455HAXbxw9e63T1HyLUouLyfT
KH7328fofxbRbN4bxMNoPI7Cg9/jUXrP1bvf3g3mg+vBLKobGfwaHB5crY8XLsf3JnEcDeejSdwb
T2b5uON26/y03Tk96V50js875RrrzOXlcCv/Ppnc9cajKJ5nFbePdtI9OLobjOI3QcXEdxzqqHCk
s/b5yZvyxD4ng3g2WM5scD1J5v89mt9OFukyjMfXg+HXhur58MIB8gU7Cq8rB0+j5MskuXtblUkH
bswj3Y9kkP3fz6O7KHk/StJFPmr94/zLly9nZ8PwuD1svTn4j+huknxPo7+lsxzFN5/mk6RuUtsF
hpO7u9G8Hz9s7fJQxeOUl+XoTXaU9T5+njy6eDhYIbE8Xv/67+nQ5bTCaBzNo4/RcJKEVY8PwrD+
wf3DBa5Pn1YzjofjNZdvkro1m3xf/ryFEhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYW
FhYWFhYWFhYWFhYWFn5a+D4ZzYuftH8/ikez26jpw/ThKPzQ0E5RkRjF3yZfo/5jX8XbOCyE8i6L
ozcNBScNwbw9oyF7O4jDcfR4ezWFWTrVz7dREgWD9J/j9unFWev05KITTKM4HMU3WSvD+7RMulyP
C/x4jMeWjqpmjOqRDY9WzLh019GbYvvJyWnYepN1uux6ynmxl1mZ8263u1qZpx3qw2Q6jcJgEAer
XfwliCf3wbypxq5Z9xZJEsXzVaWGwLLzZ5l4WJVVrrFn6GG7in05B5/+89/T06XU9XMTzfvJX2Zp
cJyePI9HuIq/TNICj41baaWaeLlQkN+V3gq+jMZR8PrwdZBONhzNvjafl+/KUy725GRdWqVg1Yb+
7y6Ex50cYd1p8DiTVY10YL/Y5nZ5mSz73SZ302xkWDFkEm8e5dNiOIxms3QqvwbDh/0M0nqzbCNH
s2Lj2lmn1coOuDpUunTTwXx4+5dvq+60QkfX6XXrzcYZn7Xk1T25vF2vcA4HR4fp2rQ7J+fd9ulJ
p/2muOTFwc862aN8neu6Bkv9fS90vl+02n/4+V6s8Yed75mo9dm+sbKn6Z7XnfrZ4m6cj2ny+KQz
7LTOztPYD14GGk/h/lbpl9nRs+7Jn7nax9fHraZX+HTNkvl/PZzKvXQSN8W3JDv6WZNoMI/qsuWe
1pNOq1u779fRzSguxK82t+K5b21qvGxXa3xn8SDjiRfU9TwLN9IyvWzRspeXtcrgfjS/XV1Oi9fS
03Y7WLf6BusrXbbD2ZX25PqiddI5brXa5w/X0T03tqI1dvP244KUXhd+n94kgzD6WxSFUbjP68HZ
aSe9DEX3Fff/fG88n/iqVWhzzc+Fwvv7NHN0GBy+Kbcgb498Xhf0zsOumpzruper5lH/4I4e4dL4
ho7g8tjm1vFeKVBzVldtQvonWHa29T89nmdX74L2Rfusnb7rbXf3+lur96OLERwNl031b5qvqGnN
XtW21FyWejspVQ0qwngBdw/d4RtLdz8aj3ulvu/Dlyy4U3epCb6xQ36vDvinNrnvYl0ZqqPdPPhp
0y3QrjzsPqvxJNNVVTbfG5ymf4M++0W+4QypYlA6QyoIV876sGZMPyn955gy9i+j7NR7fI/w8730
ba1K4eWv4n1A9mSWfxO+/TKPko33GQ+Lkr83OPyhF9V5w75Vv13ZGBI9/j2w62KxGrgFpXImaam3
YZj9oZXe/BYF8+ZL3ObFeeM/AE4XmZwwLIWW7yc/FB4XFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU
FBQUFBQUFBQUFBQUFBQUFBQUFEyWLZe9RTKbJHXR/saIms/aP3x/wb9ln0AfxTe1LYWFPozKz103
NhNUJcrNBGcX3XZVM0EUp/csopf62oTi9wvs+/SrC271SzQcquKXQluddnOvR8PhfuS5/3grz16h
n6tRouFHUbN2gMHGN3q8UA/rrl9W3Vn4KU2w/yzLXfgqlD9s4Zv7oNIZPJa+2rdv/E/q7am5Yn/K
WoR3NEflY0p9T9vJl2rue3wN29WxU3ytK93XvG2rYQ2t9ashzWfe6hW18dtFPi6v20n+78Nfgoee
oGCWt4Y+9KKet85Pdhwl/x6h9DBfo+81B+mk+153kNU3ETUfodPdryX2w9PWutgsWM/xQ90bmMJj
RRiFrvRlL9oTus3ax603zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMrsK
xb1FMpsku9SuRxbdFu5tXs3CwPo9Kg5q1ttfj+wlUfq045tgmN8O7kfz2yCVFKTR5Ptl8Orw1cHD
0GA0C65HcZgNHk/uoyTX9PrwdTCIw2Axna7v2QtS/+lPfj9M/Y213ubUr96z/J7Ly1k0/2s0/xjN
FuMMTrooSUYoP29eDN5jseEkTpd+Eb1fxPn8gqP55KFUmVp6Zqc+o5rn9Sy9G4fcBbhUv/qB5p3c
HFuPZGtcM+arjcE1F8F9K695Xj33ee2H9KpxP7cHoIoqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKK
KqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqq
qKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqii
iiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooq
qqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqo
oooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKK
Kqqooooqqqiiiiqq/zJU+9d/Tye/XMQwGkfzldbSpJOHQ7/LR32MhpMk/Im0h4Vp7cIebj2Fyvub
SWwMbfC2MawZ+sbC1jhfHm8Q30Tpnib5vw9/CSb5NgazbFDQvmiftc+73ePOQS+J0oWMbzI9Gd37
0fw2SA8dpFNIvl8Grw5fHSxVj2bB9SgOs8HjyX2U5Fv3+vB1MIjDYDGdru/ZMbd8/unk8q2vnFr6
v07zQX6PF7Mo/G08uX4/Gi8POVNXXXXVVVddddVVV1111VVXXXXVVVddddVVV1111VVXXXXVVVdd
ddVVV1111VVXXXXVVVddddVVV1111VVXXXXVVVddddVVV1111VVXXXXVVVddddVVV1111VVXXXXV
VVddddVVV1111VVXXXXVVVddddX96eru8/MI7573Vfj7/TjC9k8IbP82wrua7/J/kZ888MMaz/9h
jT/m9wSenvADH/tqX6/MfD2/0nQ3b2cHKw1Jaw6ux6PZ7S7wq4GfNwtWziQt9TYM05Muu/ktCooP
lecwWf9aSenHS6aLeT9Jj1X3syUfCo8LCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCmbByTSKaz4Uvoz260c8qx1hOLm7G803P2J9PxqPe/n9n7c/Ud34Oe3Sx+TXn/Cu
TuQfPP81OG63zk/bndOT7sXZRbd9UPHJ/ChO71lE258zr+piiL9Nvkb9x7V4G4eFUL4yRy/UyfED
673rY/DD7dVvaFqYNDzVfFIN2dtBHI6jx9urRZuli/v5NkqiYJD+c9w+vThrnZ5cdIIUX9ZiUbXu
88HX6G/RP+YfF3GcbvTWVi37QpYdSJN4/D2YLabTSTKfBcfFD+7/kjds3KeVx0k0CL8Ht4Nv6RSK
9sqL09yfsSRevwqlA+a2djTA9CpDNY0ww+bBT5vuukuleg77rEaxTaXxtE2LVVbZPG1Pu93us0/G
n4t2/RHzLpPBvLicV3Fxn5+/As3U3u4sXN9pVNq8OqLX0c0o3tXHszrgwbbImteLijHpK991et5/
bmzW+ZLubj9OA9OsmW+vk+HtH7Y9OzoYR+Fj6a16Pxfs8l4WWsAaBH2aDzZ2qwpFPqa039vJqqas
57yGPr692vUqWnwbVrqveVNXw+r3YT2k+exdvdlr7tgdxDdRuoVJ/u+alt3W+ckP9/12UhV1BxmE
4T5H6KQX+33OyA9PW+v9Wic/1L23Ljz2E7b9Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wy+89vNg3FvUUymyS71K5HFt0W7m1ezcLA+j0qDmrW21+P7CVR+rTjm2CY3w7uR/Pb
IJUUpNHk+2Xw6vDVwcPQYDQLrkdxmA0eT+6jJNf0+vB1MIjDYDGdru/ZC1L/6U9+P0z9jbXe5tSv
3rP8nsvLWTT/azT/GM0W4wxOuihJRig/b14M3mOx4SROl34RvV/E+fyCo/nkoVSZWnpmpz6jmuf1
LL0bh9wFuFS/+oHmndwcW49ka1wz5quNwTUXwX0rr3lePfd57Yf0qnE/twegiiqqqKKKKqqooooq
qqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqo
oooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKK
KqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqq
qKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqii
iiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooq
qqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqr/MlT7139PJ79cxOE4GpTnmjwcsZc9WBj+E0Efbk1t
l/VhxVOpfaxZRml4Pb3y0Gb3pQWvob993HSvJ/mtYJbfbF+0z9rn3YuT7l7nRe/HFqB4dpSS683I
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
PxvJu3ejwy3KvHfx887/mB3/k3DpiRoLk52BJzGQkr/uZgJMRe1zrfUUfOx0/xH8tVQO+yXvLS6X
x9KTMb4xMZf1oq29p1Y/PGC/+1TvP4UpfdnqtIONZUY8SeDJq79+OhzOvFKTflNv33auKeRdoHeB
cbih627TNc/L2hzM3f33uoC7sbfR+Hsg/I26MaMG5UPnOfi53e82g96/m/373yOIRAqhZEqmZEqm
ZEqmZEqmZEreESXnd+xiUacjdmVrb5K+a3CckimZkimZkimZkimZkimZkimZkil5H5Scj776kimZ
kimZkimZkimZkimZkimZkg9SyXmQuwlRZ+p3i+O2KZmSKZmSKZmSKZmSKZmSKZmSKZmS97QveWUL
Zxp8DQGbl0zJlEzJlEzJlEzJlEzJlEzJlEzJVu+iZEqmZEqmZEqmZEqmZEqmZEqmZEo2L9mIa0qm
ZEqmZEqmZEqmZEqmZEqmZPOS92Be8vLe3YykrXFNyZRMyZRMyZRMyZRMyZRMyZSsL1lfsr5kSqZk
SqZkSqZkSqZkSqZkSqZkSt69ecn57Lo0181LpmRKpmRKpmRKpmRKpmRKpmRKpuQfZMR17rHT6y6m
PUPfHLLfJ2/up+hfScm7nZDMzuzMzuzMzuzMzuzMzuzMbvy38d96tvVsUzIlUzIlUzIlUzIlUzIl
UzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlH5ySD2v9KbJfebZ2
HFY7szravqS0WdJmSTM7szM7szM7szM7szM7s+vZtrKZlc2sbMbszM7szM7szM7szM7szM7szK7P
egvf7Mo/an1dSs++EVhjpLlvdhmNbjQ6JVMyJVMyJVMyJVMyJVMyJVMyJVMyJVMyJVMyJVMyJVMy
JVMyJRv/bfz39x//TcmUTMmUTMmUTMmUTMmUTMmUTMnW/7b+NyVTMiVTMiVTMiVTMiVTMiVTMiVT
MiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiX/sPOSKZmSKZmSKZmS
KZmSKZmSKZmSKZmS9SXrS6ZkSqZkSqZkSqZkSqZkSqZkSqZkfcnfZ43rTUo6Y2XsZUFNyZRMyZRM
yZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRsxLUR10ZcUzIlUzIlUzIlUzIlUzIl
UzIl60vWl6wvmZIpmZIpmZIpmZIpmZIpmZIpWV+yvmR9yZRMyZRMyZRMyZRMyZRMyZRMyZRMyZRM
yZRMyZRMyZRMyZRMyZRMyZRMyd9ZyUZcUzIlUzIlUzIlUzIlUzIlUzIlU7J5yeYlUzIlUzIlUzIl
UzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIlUzIl79OI6xy+XZrj5iVTMiVTMiVTMiVTMiVT
MiVTMiVT8mEreWXf5pz1vFIXb76Jz5RMyZRMyZRMyZRMyZRMyZRMyZRsxPXejLjOPXZ6Bbpn0TeH
1vfJm/sp+ldS8m4nJLMzO7MzO7MzO7MzO7MzO7Nbcdt3qfRs69mmZEqmZEqmZEqmZEqmZEqmZEre
xizpzXQ4z9p6DQEb/03JlEzJlEzJlEzJlEzJlEzJlEzJvt5sxW1KpmRKpmRKpmRKpmRKpmRKpmRK
1pesL5mSKZmSKZmSKZmSKZmSKZmSKdlaYr7evBH6bmQtMUqmZEqmZEqmZEqmZEqmZEqmZEo24trq
XZRMyZRMyZRMyZRMyZRMyZRMyZSsL3m/+pLNS6ZkSqZkSqZkSqZkSqZkSqZkStaX/IrzkvUlUzIl
UzIlUzIlUzIlUzIlUzIlU7K+ZH3JlEzJlEzJlEzJlEzJlEzJlEzJlPxj9CWvbNecs55Xwmu+T03p
S6ZkSqZkSqZkSqZkSqZkSqZkSqZkq3cZcU3JlEzJlEzJlEzJlEzJlEzJh67kzUyW3ZX+xx9olHiG
i3a8d3wj34narZQm+hxPIGZndmZndmZndmZndmZndmbXs30447/z9Tcf0PsXDtazTcmUTMmUTMmU
TMmUTMmUTMlW3F53RnXmqPE1xnZTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVTMiVT
MiVTMiX7LpXvUvkuFSVTMiVTMiVTMiVTMiVTMiVTsr5kK25bcZuSKZmSKZmSKZmSKZmSKZmSKZmS
KZmSKZmSKZmSKZmSKZmSKZmSKZmSKdm8ZPOSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmS
KZmSKZmSKZmSKZmS92bENSVTMiVTMiVTMiVTMiVTMiVTMiVT8mH3Ja8m33y+XZrr6aCmZEqmZEqm
ZEqmZEqmZEqmZEr+kZV8WLIi+5W/SBWH1c64n6E3UudTMiVTMiVTMiVTMiVTMiVTsr7kw13j2veS
OVhfMiVTMiVTMiVTMiVTMiVTMiVbvcu8ZEqmZEqmZEqmZEqmZEqmZEqmZErWl7yZ7yVTMiVTMiVT
MiVTMiVTMiVTMiVTsnnJByv7bBcdznpk+5LSRG+WNLMzO7MzO7MzO7MzO7Mzu57trfl36bcWW1jD
a7rHeqk+b7OkOVjPNiVTMiVTMiVTMiVTMiVTMiVT8tJKzu3ddadjz9B3b/uuF4wY2EvRv5KSdzsh
mZ3ZmZ3ZmZ3ZmZ3ZmZ3Zmd3KZlY2M2dbzzYlUzIlUzIlUzIlUzIlUzIlU/I2lLzplc2WHzW+hqQp
mZIpmZIpmZIpmZIpmZIpmZIpmZK3vA5Y/h7olSYv794qdZRMyZRMyZRMyZRMyZRMyZRMyZSsL1lf
MiVTMiVTMiVTMiVTMiVTMiVTMiX7lvSWvyVNyZRMyZRMyZRMyZS8E0p+jQ2kTdqkTdqkrT/6VVYA
I23S3gNp52zVfL/HugepB+nqH3/Y/SkzO1mNTW3t9TuPida0YbUNkwR8+XVSMqrl0lllOky91ekF
s4GK1elAD7W/boPLKOT1Sw07s8dJpZhacOaK8eBAjfR7+D9QSwMEFAACAAgAM0YkSffhOCxsDgAA
8WkEAC0AHABzdG9yYWdlL2luZGV4ZWRkYi9zdHJ1Y3R1cmVkLWNsb25lLXN0ZGVyci50eHRVVAkA
A5JCzFeSQsxXdXgLAAEE9QEAAAQUAAAA7d1LU9tIAgDgOyd+gmouA1VJlTHGGG4JmcxStTVk89i7
sQXxxsisbJLJZX/7tm2wZSzJdnCISb7DVAap1ZL6/alb8umrl+/i9HOcHh+3m4PmebMfn/SSJG4N
Or3kpNvrx+3oebRXqxzu1+r71cZRfe+wvvUh6fz3Jj599fLV3DHHx617x79Oe1cn3U6cDEJM2/dj
qza2dq6anWQ3mot0YVQ7mZgOaofV3a2cODrJ596n+Ow6TpvDiF4k7fdpM+k3R9G+71zF6c5uySX0
Sg583UnjdsmxH5tJuxvf/T25hH64+Pcf4zSOmuG/vdr+0UFlv3pUj67jpN1JLrdCJK/DaXrp15Ar
cTceTOIY3vZw9zS93/cm+ZcbsmRvzhXPbdrZjXYqfx9eXFwcHLTa1f12ZTccufCWRydbT8ocNhqN
ScqsFtWb3vV1KL/NJJrk4rMo6X2JBmXnWHTVJzdpGkrg5EwlB4QgF7306vaIcapMjhvlwU77PPfI
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
0iM90iM90iM90iM90iM90m866S0uNy9uXhyiIRqiIRqiIRqiIRqiIRqivaHtDW2IhmiIhmiIhmiI
hmiIhmiIhmiIhui1zy4vDW6IhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiIhmiI
hmiI9k60b4VDNERDNERDNERDNERDNERDNERDtJlo70RDNERDNERDNERDNERDNERDNERDNESvOBNd
7Np1UNwPbvnBLT+4hfRIj/RIj/RIj/RIj/RIj/RIb17cvLh5cfPiEA3REA3REA3REA3REA3REO0N
bW9oQzREQzREQzREQzREQzREQzREQ/SvgWgz0RAN0RAN0RAN0RAN0RAN0RAN0RBtObfl3BAN0RAN
0RAN0RAN0RAN0RAN0RBtJtpMNERDNERDNERDNERDNERDNERDNERDtJloiIZoiIZoiIZoiIZoiIZo
iIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoP3HlJ64g
GqIhGqIhGqIhGqIhGqIhGqIh2ky0mWiIhmiIhmiIhmiIhmiIhmiIhmiINhNtJhqiIRqiIRqiIRqi
IRqiIRqiIRqizUSbiYZoiIZoiIZoiIZoiIZoiIZoiIZoiP5eiF4RxkuDG6IhGqIhGqIhGqIhGqIh
GqIhGqIh2nJuy7khGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIhGqIh
GqIhGqIhGqIhGqIhGqIhGqIhGqIfG9E+LAbREA3REA3REA3REA3REA3REA3RPizmw2IQDdEQDdEQ
DdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQ
DdEQDdEQDdEQDdEQDdEQDdEQDdEQDdEQvaGIXgXGPiwG0RAN0RAN0RAN0RAN0RAN0RAN0b7O7evc
EA3REA3REA3REA3REA3REA3REG0m2kw0REM0REM0REM0REM0REM0REM0REP0D0F0MYxX5DVEQzRE
QzREQzREQzREQzREQzREQ7SZaDPREA3REA3REA3REA3REA3REA3REO3r3L7ODdEQDdEQDdEQDdEQ
DdEQDdEQDdE+LLbirLXl3BAN0RAN0RAN0RAN0RAN0RAN0RBtObfl3BAN0RAN0RAN0RAN0RAN0RAN
0T87on+u9cXg/80z4lnUrUL9p5IZmwz+R0L0Zj9XQHqkR3qkR3qkR3qkR3qkR3rz4haXmxc3L25e
HKIhGqIhGqIhGqIhGqIhGqItLre4HKIhGqIhGqIhGqIhGqIhGqIhGqLNRJuJhmiIhmiIhmiIhmiI
hmiIhmiIhmgz0WaiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIfqb
EL0ijH+iT7NDNERDNERDNERDNERDNERDNERDNESbiYZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZo
iIZoiIZoiIZoiIZoiIZoiIZoy7khGqIhGqIhGqIhGqIhGqIhGqIhGqL9xJWfuIJoiIZoiIZoiIZo
iIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiPZOtHeiIRqiIRqiIRqiIRqiIRqiIRqiIdpM
tJnojefo0wT/IyF6szMS6ZEe6ZEe6ZEe6ZEe6ZEe6b8zaDd/ovYXegxR5trH/HDbU8kMc/grWNss
PdIjPdIjPdIjPdIjPdIjvVl6S90tdcdkS90hGqIhGqIhGqIhGqIhGqIh2lJ3S90hGqIhGqIhGqIh
GqKLEP0YO0AcxEEcxEEcxEEcxH8NiK84ZvlxnbZOy1tV3qpaZ3sULjSZ8POkmbTibjeep1AYZl7n
AtIOO+yw46faMW2Lb7dOO7lGrXpQnw3T6vb68f1AlcZsoKvm1/P4ZBjy9HbUc++IvXqlsA+c65FH
EWml17VDxzjd8X9QSwMEFAACAAgAM0YkSeV8ZgPEBQAAOiUAAC4AHABzdG9yYWdlL2luZGV4ZWRk
Yi90cmFuc2FjdGlvbi1hYm9ydC1zdGRlcnIudHh0VVQJAAOSQsxXkkLMV3V4CwABBPUBAAAEFAAA
ANVaS3OjOBC+5+SfoNvYVZMqDBhj3xw7qXXV1jo7zuwdg5ywwcIrSDJz2d8+LTAg0AOInZqZQyqF
6Jf68XVLeL262WL6iul8Hh8xWd18wf+94CRdesTHUYSDq68khJX16mblpd7OS7CKEl2jwdW6khec
6JcxIdhPw5gsozjJ6Ma2MbVsxzLdmTOeOqKOimc+9xv8dzQ+LKMQk5RpbEoz3avhwQvJCEkMbxE1
5CRN7Kk5km0+JK/xM94cMfWYoAUJHqhHEi8T+xAeMB2OeDdcxK3qLcUaQ+5CCpo4W3y2a0GIzJb/
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
OroQM9r94hL92s7fFi3Q1LFeOzFNlY12E9MUXW5v6CmlC/Da++HmsIYz+pNt0/9QSwMEFAACAAgA
NkYkSZREaytXBgAAaE0AAEYAHABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1jb29yZGlu
YXRpb24tYWNyb3NzLWRhdGFiYXNlcy1zdGRlcnIudHh0VVQJAAOXQsxXl0LMV3V4CwABBPUBAAAE
FAAAAO1cX3OiSBB/z5MfYd5WqzZVgIjom9FNnVVXZ25N7h1hTNggeIDJ5eU++/aA4AAzgyiuuuFh
awvo6e7pP7/p6Zk4ndzNsf+G/eHQMkJjYQR47LkuNkPbc8eOF2AL3SJZlfpdVesq+kCT+9rNk2v/
u8HTyd2kMGY4NHPj731vNXZs7IbAqZXnpug37ZVhux1UYFrKqk1x6ql9pXPD4GG7b94rnq2xbxBG
I9d69A03MCK2j/YK++3OzbQxQ84M3hq7k7vvGPgE4dhwTew42GJxZlMSzT4dP74LPYHh720fJPHH
vhiu5eDkOXVhACIfX7CPkQH/ZLU76EldZaAh0M+y3ecL0waY3IMYz/+AHMMODlMeiSt22fPopdnI
pBR8ZWhceNXuoLb0X3+5XPZ6pqV0LakjdN52ypGweizT13U9tUw1Vg/eeg3hZrgo9eJX5HrvKBTJ
KNN6vPF9wJNUkmAAkCw9f7UdEVslHRengbVgjozddWeYr6DSHEIB38z//tMOCRX9djh8xuHM/xbA
QMcOXhIOU3fpgYAEoUESZ3hREIpewRNa2g5GX1pfEChr2cGrYKaWbU2KKlPxZxI4LgxkOfT/siCU
tSgIeWmQaJLKAMIZDUTDob9FJG+1JpQWg8Rzs1zmG9PEQQCq3CIz9icCeQFxpB3QK1RPkyTCMGUF
plsbofny7S1dhnazkbsLqdNkfJPxTcZ/2ownZRJvclEJReUwarfANqqm9HW1q2hqsRIVGLo02XFk
Z14lVyjda8r3gaSePN9pGSfLdxJRu2zPWLYLPuelPjFuJh9hpKxopib1+jDsSBgQpvAsJ7oej/Z0
5ZzWlhcysTaXDdjMD/+JU3kMSjxjqrIv2ar62Agxb2xxu6pokn7wHpMXLwv8bLsU/dTdZ9nIjxJW
FnFkVATUnYbUA4gZE6OR5WUXlejdDl9SOKWxtKuqaLeLRzukIx4mSKssBpKiyZKk9mMc3dOx8Wyp
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
AwQUAAIACAA6RiRJ7RfvtN8DAAADFAAAQQAcAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb25jaGFu
Z2VyZXF1ZXN0LWFjdGl2ZWRvbW9iamVjdC1zdGRlcnIudHh0VVQJAAOgQsxXoELMV3V4CwABBPUB
AAAEFAAAAM1YS3PiRhC+c+InzG2hKlulN4KbLdYVqlJhE3tzH0kNTFnMkJFsZy/57ekZQOg5Mmtv
xQcOGvr5dfc3La2Wt/cgn0EuFilL7xhn+e5XytOM8e1fIHMmeLSjfAsPkvKcJgUekM9kPPrG2d9P
sFreLmlBY5pDJDgH/f+QKaWPP9uzZq4XuE44D6zAG032lPEpaRkeMjfq0GD8WTzC+gCSqohueFqJ
/4HtQU6mo9Uld3EAvrz9E9BOXkSUJ5BlkHZZ7pbUkFTspS1QokzkWq6atj0LzEAmDf07KfZRxoAX
HSDaTmgAccDUpGLJ92bO9CPBWvGiRY/utcM7JlFuYv0z22w2vp+ktpdYUwMOwhC9NmbQ3an+g/Nz
iUOOcT7sQAKh+LM9d+5brjMPCCaVYruqFO7QjZDfsTUgg6K0cc7wUvQHUTZRp6Th346IW0eTaRUs
x02tKWoOpqydvQ8yszAMS2SuM/VVHA5YbcpJWcVfCBcvpDD5GIo6epISx6D0ZFBAkY2Q+5PGEZVS
T9dgksbdHKZlb2nyiCHdYyvA6P6P31ihpKqni8UWirX8kqNihpR3trDiG4EOzsSCnnrU246IPsIn
smEZkE/jTwSDTVn+aObcZTvkSv8likVail0F/XeoCe1AN2HfGJwjKX2g4LrKF4uFPBGH2B+UZNoh
Injdyv1TkkCeYyifSXKsJ3k+3iuE5VVi9QPLUgZLUwjdgRbJ7stzyZ4V/nFja1qbeMVtfclp3qvM
MJmMERsvcGah5zqB16ZTA9CDww4a5z76bd0/7zTvc8v76fNe9fHT5l111GXaa8i66s7pGX0Fbm0e
UdN2giSw/BmqvZEGjCO8brh+n4r6ofN/om3HtvGGR8xk0be8DuxbEmgBpsW3vnM5gRX21j2GLeMV
9VW9FD+6X/X0S9ObcbM4dsaVhHqJs/KAbiIFmrpeLl1JXlixK+m0yqWu55HLKkouTKcqrJjWieeW
E9iW5c2OPPrKwnZsivXnMyCte+HbYStpCr8DpJC+5j7w3QBpCF46zj/e4nnlrXX9qt1USsR+z4p6
5V5YlkX63FyxNzhc82N39/V80nRfW2Zaf7aK0JWj6W2rmaxpOTwTX6dSz7wnZuHrwkVC+GqK4TVo
kElCsyzGIKeDXwc6vdSp1cUV/i3voD28F3W1QS2bUmjUhKingztk1vImFnKg2TfY3mt+ptiPxxwN
VCrs0UGjKpnTSn2zKUDWaPoIiqbW8Q9wUk8pX/e1qnmFiEOtz0LP8YO6jH6zaQrhPV8T2tPvMegv
KasT8TQ08KWmN/aer0PGl4T2Z5RmiU65ja808x9QSwMECgAAAAAA70UkSQAAAAAAAAAAAAAAAA8A
HABzdG9yYWdlL3dlYnNxbC9VVAkAAxJCzFc+Q8xXdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAOhF
JEko2Xk2sAAAAO4AAAAtABwAc3RvcmFnZS93ZWJzcWwvYWx0ZXItdG8taW5mby10YWJsZS1zdGRl
cnIudHh0VVQJAAMDQsxXA0LMV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0i
BC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdD
gCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA7
0vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsDBBQAAgAIAOhFJEko2Xk2
sAAAAO4AAAA1ABwAc3RvcmFnZS93ZWJzcWwvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXN0
ZGVyci50eHRVVAkAAwNCzFcDQsxXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXge79iTqFQbdAh2luU
XSIELT3v6hjCOiPjbtG/T6NO3ebxvgeTZFmaabiRsQ7BM/ggBEzQUiXYIXnjwATPy4epQuggWgOx
B0OAIizxTBXsQoeDOhpvVFLmqkR7br3KOUiFUzqwoLpwHdzInmjrUVoz4GcyHauq76PNdheDBsvs
4DvS+ie07lEali7tkfZUFyht84omvPjXyfQazMfmetI699LSHebx7A1QSwMEFAACAAgA6EUkSSjZ
eTawAAAA7gAAAEYAHABzdG9yYWdlL3dlYnNxbC9jaGFuZ2UtdmVyc2lvbi1uby1jcmFzaC1vbi1w
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
IFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYX
gwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsDBBQAAgAIAOpF
JEko2Xk2sAAAAO4AAAA/ABwAc3RvcmFnZS93ZWJzcWwvZXhlY3V0ZXNxbC1hY2NlcHRzLW9ubHkt
b25lLXN0YXRlbWVudC1zdGRlcnIudHh0VVQJAAMHQsxXB0LMV3V4CwABBPUBAAAEFAAAAGXOQQuC
QBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl
2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61Fa
M+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewN
UEsDBBQAAgAIAOtFJEko2Xk2sAAAAO4AAAAuABwAc3RvcmFnZS93ZWJzcWwvaGFzaC1jaGFuZ2Ut
d2l0aC14aHItc3RkZXJyLnR4dFVUCQADCULMVwlCzFd1eAsAAQT1AQAABBQAAABlzkELgkAQBeB7
v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5NkWZppuJGxDsEz+CAETNBSJdgheePA
BM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5SIVTOrCgunAd3MieaOtRWjPgZzId
q6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ9BrMx+Z60jr30tId5vHsDVBLAwQU
AAIACADrRSRJht9nf7YAAADcAQAAPwAcAHN0b3JhZ2Uvd2Vic3FsL211bHRpcGxlLWRhdGFiYXNl
cy1nYXJiYWdlLWNvbGxlY3Rpb24tc3RkZXJyLnR4dFVUCQADCULMVwlCzFd1eAsAAQT1AQAABBQA
AADlz78KwkAMBvDdp8gkLagnOIi3idZFRGj9M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnr
EQJDiELABI5KwQYpGA8mBp7eTRljA8kciAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZU
B66i79kDbdVLazp8V4ZhVrZtsliuUtBgmT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPa
aV0EcXSDcTrK/urbF1BLAwQUAAIACADrRSRJROpW1rkAAADKAgAARAAcAHN0b3JhZ2Uvd2Vic3Fs
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1zdGRlcnIudHh0VVQJ
AAMJQsxXCULMV3V4CwABBPUBAAAEFAAAAO3PvwrCQAwG8N2nyCQtqCc4iLeJ1kWk0PpnvmtTKVyT
kt4pvr2t6OQbiFtCfh/kS7IszTScyFiH4Bl8EAImqKkQbJC8cWCC5+nNFCE0EM2B2IMhQBGWeKTO
7EKDndoab1RyydUF7b72KucgBQ7bhgXVgcvgenZHW/bSmg5fkWGYFW0bLZarGDRYZgfvkNYfoXWL
UrE0aYu0pvKMUlePaMCTb50Mr8G4vxx3WudearrCOB4l/7Y/2/YJUEsDBBQAAgAIAOtFJEko2Xk2
sAAAAO4AAAAvABwAc3RvcmFnZS93ZWJzcWwvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLXN0ZGVyci50
eHRVVAkAAwpCzFcKQsxXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXge79iTqFQbdAh2luUXSIELT3v
6hjCOiPjbtG/T6NO3ebxvgeTZFmaabiRsQ7BM/ggBEzQUiXYIXnjwATPy4epQuggWgOxB0OAIizx
TBXsQoeDOhpvVFLmqkR7br3KOUiFUzqwoLpwHdzInmjrUVoz4GcyHauq76PNdheDBsvs4DvS+ie0
7lEali7tkfZUFyht84omvPjXyfQazMfmetI699LSHebx7A1QSwMEFAACAAgA60UkSSjZeTawAAAA
7gAAACgAHABzdG9yYWdlL3dlYnNxbC9udWxsLWNhbGxiYWNrcy1zdGRlcnIudHh0VVQJAAMKQsxX
CkLMV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+j
Tt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS
5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBco
bfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsDBBQAAgAIAOtFJEmG32d/tgAAANwBAABIABwAc3Rv
cmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1pc29sYXRlZC13b3Js
ZC1zdGRlcnIudHh0VVQJAAMKQsxXCkLMV3V4CwABBPUBAAAEFAAAAOXPvwrCQAwG8N2nyCQtqCc4
iLeJ1kVEaP0z37WpHFyTkt4pvr2t6OQjuOUjvw+SLM+PuYYzGesRAkOIQsAEjkrBBikYDyYGnt5N
GWMDyRyIAxgCFGFJR+rCPjbYqa0JRmXXQl3R7l1QBUcpcUgbFlQHrqLv2QNt1UtrOnxXhmFWtm2y
WK5S0GCZPXxKWn+F1i1KzdIcW6Q1VRcUVz+TAU9+dTacBuN+c9ppXQRxdINxOsr+6tsXUEsDBBQA
AgAIAOtFJEnH76jOugAAALgDAAA5ABwAc3RvcmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1jcmVh
dGlvbi1jYWxsYmFjay1zdGRlcnIudHh0VVQJAAMKQsxXCkLMV3V4CwABBPUBAAAEFAAAAO2PMQrC
QBBFe08xlSSgrmAhbicaGxEh0aTeTSYS2MyEcVfx9iailTcQu/nM+/BfkqbHVMOZjHUInsEHIWCC
hkrBFskbByZ4nt5MGUIL0RyIPRgCFGGJRypnF1q8qq3xRiVFpgq0+8arjIOUOKQNC6oDV8H12B1t
1ZPWXPFVGY5Z2XXRYrmKQYNldvAuaf0htO5Qapb22CGtqcpRmvoRDfDkm06GaTDuP6ed1pmXhi4w
jkfJ3/Zv+xO2T1BLAwQUAAIACADsRSRJKNl5NrAAAADuAAAANQAcAHN0b3JhZ2Uvd2Vic3FsL29w
ZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zdGRlcnIudHh0VVQJAAMLQsxXC0LMV3V4CwABBPUB
AAAEFAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4
kbEOwTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6
sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH
5nrSOvfS0h3m8ewNUEsDBBQAAgAIAOxFJEko2Xk2sAAAAO4AAAA0ABwAc3RvcmFnZS93ZWJzcWwv
b3Blbi1kYXRhYmFzZS1leHBhbmQtcXVvdGEtc3RkZXJyLnR4dFVUCQADC0LMVwtCzFd1eAsAAQT1
AQAABBQAAABlzkELgkAQBeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5NkWZpp
uJGxDsEz+CAETNBSJdgheePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5SIVT
OrCgunAd3MieaOtRWjPgZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ9BrM
x+Z60jr30tId5vHsDVBLAwQUAAIACADsRSRJht9nf7YAAADcAQAAOQAcAHN0b3JhZ2Uvd2Vic3Fs
L29wZW4tZGF0YWJhc2Utc2V0LWVtcHR5LXZlcnNpb24tc3RkZXJyLnR4dFVUCQADC0LMVwtCzFd1
eAsAAQT1AQAABBQAAADlz78KwkAMBvDdp8gkLagnOIi3idZFRGj9M9+1qRxck5LeKb69rejkI7jl
I78PkizPj7mGMxnrEQJDiELABI5KwQYpGA8mBp7eTRljA8kciAMYAhRhSUfqwj422KmtCUZl10Jd
0e5dUAVHKXFIGxZUB66i79kDbdVLazp8V4ZhVrZtsliuUtBgmT18Slp/hdYtSs3SHFukNVUXFFc/
kwFPfnU2nAbjfnPaaV0EcXSDcTrK/urbF1BLAwQUAAIACADsRSRJht9nf7YAAADcAQAARQAcAHN0
b3JhZ2Uvd2Vic3FsL29wZW4tZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mt
c3RkZXJyLnR4dFVUCQADDELMVwxCzFd1eAsAAQT1AQAABBQAAADlz78KwkAMBvDdp8gkLagnOIi3
idZFRGj9M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnrEQJDiELABI5KwQYpGA8mBp7eTRlj
A8kciAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZUB66i79kDbdVLazp8V4ZhVrZtsliu
UtBgmT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPaaV0EcXSDcTrK/urbF1BLAwQUAAIA
CADsRSRJKNl5NrAAAADuAAAAOQAcAHN0b3JhZ2Uvd2Vic3FsL3ByaXZhdGUtYnJvd3Npbmctbm9y
ZWFkLW5vd3JpdGUtc3RkZXJyLnR4dFVUCQADDELMVwxCzFd1eAsAAQT1AQAABBQAAABlzkELgkAQ
BeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5NkWZppuJGxDsEz+CAETNBSJdgh
eePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5SIVTOrCgunAd3MieaOtRWjPg
ZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ9BrMx+Z60jr30tId5vHsDVBL
AwQUAAIACADtRSRJROpW1rkAAADKAgAARwAcAHN0b3JhZ2Uvd2Vic3FsL3JlYWQtYW5kLXdyaXRl
LXRyYW5zYWN0aW9ucy1kb250LXJ1bi10b2dldGhlci1zdGRlcnIudHh0VVQJAAMNQsxXDULMV3V4
CwABBPUBAAAEFAAAAO3PvwrCQAwG8N2nyCQtqCc4iLeJ1kWk0PpnvmtTKVyTkt4pvr2t6OQbiFtC
fh/kS7IszTScyFiH4Bl8EAImqKkQbJC8cWCC5+nNFCE0EM2B2IMhQBGWeKTO7EKDndoab1RyydUF
7b72KucgBQ7bhgXVgcvgenZHW/bSmg5fkWGYFW0bLZarGDRYZgfvkNYfoXWLUrE0aYu0pvKMUleP
aMCTb50Mr8G4vxx3WudearrCOB4l/7Y/2/YJUEsDBBQAAgAIAO1FJEmG32d/tgAAANwBAABAABwA
c3RvcmFnZS93ZWJzcWwvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktc3Rk
ZXJyLnR4dFVUCQADDULMVw1CzFd1eAsAAQT1AQAABBQAAADlz78KwkAMBvDdp8gkLagnOIi3idZF
RGj9M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnrEQJDiELABI5KwQYpGA8mBp7eTRljA8kc
iAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZUB66i79kDbdVLazp8V4ZhVrZtsliuUtBg
mT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPaaV0EcXSDcTrK/urbF1BLAwQUAAIACADt
RSRJKNl5NrAAAADuAAAAKAAcAHN0b3JhZ2Uvd2Vic3FsL3NxbC1kYXRhLXR5cGVzLXN0ZGVyci50
eHRVVAkAAw1CzFcNQsxXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXge79iTqFQbdAh2luUXSIELT3v
6hjCOiPjbtG/T6NO3ebxvgeTZFmaabiRsQ7BM/ggBEzQUiXYIXnjwATPy4epQuggWgOxB0OAIizx
TBXsQoeDOhpvVFLmqkR7br3KOUiFUzqwoLpwHdzInmjrUVoz4GcyHauq76PNdheDBsvs4DvS+ie0
7lEali7tkfZUFyht84omvPjXyfQazMfmetI699LSHebx7A1QSwMEFAACAAgA7UUkSYbfZ3+2AAAA
3AEAAEEAHABzdG9yYWdlL3dlYnNxbC9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2staXNvbGF0ZWQt
d29ybGQtc3RkZXJyLnR4dFVUCQADDkLMVw5CzFd1eAsAAQT1AQAABBQAAADlz78KwkAMBvDdp8gk
LagnOIi3idZFRGj9M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnrEQJDiELABI5KwQYpGA8m
Bp7eTRljA8kciAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZUB66i79kDbdVLazp8V4Zh
VrZtsliuUtBgmT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPaaV0EcXSDcTrK/urbF1BL
AwQUAAIACADtRSRJKNl5NrAAAADuAAAAMgAcAHN0b3JhZ2Uvd2Vic3FsL3N0YXRlbWVudC1lcnJv
ci1jYWxsYmFjay1zdGRlcnIudHh0VVQJAAMOQsxXDkLMV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF
4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl2CF5
48AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+Bn
Mh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsD
BBQAAgAIAO1FJEmG32d/tgAAANwBAABDABwAc3RvcmFnZS93ZWJzcWwvc3RhdGVtZW50LXN1Y2Nl
c3MtY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtc3RkZXJyLnR4dFVUCQADDkLMVw5CzFd1eAsAAQT1
AQAABBQAAADlz78KwkAMBvDdp8gkLagnOIi3idZFRGj9M9+1qRxck5LeKb69rejkI7jlI78PkizP
j7mGMxnrEQJDiELABI5KwQYpGA8mBp7eTRljA8kciAMYAhRhSUfqwj422KmtCUZl10Jd0e5dUAVH
KXFIGxZUB66i79kDbdVLazp8V4ZhVrZtsliuUtBgmT18Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2
nAbjfnPaaV0EcXSDcTrK/urbF1BLAwQUAAIACADuRSRJKNl5NrAAAADuAAAAKgAcAHN0b3JhZ2Uv
d2Vic3FsL3N1Y2Nlc3MtY2FsbGJhY2stc3RkZXJyLnR4dFVUCQADD0LMVw9CzFd1eAsAAQT1AQAA
BBQAAABlzkELgkAQBeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5NkWZppuJGx
DsEz+CAETNBSJdgheePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5SIVTOrCg
unAd3MieaOtRWjPgZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ9BrMx+Z6
0jr30tId5vHsDVBLAwQUAAIACADuRSRJKNl5NrAAAADuAAAAQwAcAHN0b3JhZ2Uvd2Vic3FsL3N1
Y2Nlc3MtY2FsbGJhY2std2hlbi1wYWdlLWRlZmVycy1sb2FkaW5nLXN0ZGVyci50eHRVVAkAAw9C
zFcPQsxXdXgLAAEE9QEAAAQUAAAAZc5BC4JAEAXge79iTqFQbdAh2luUXSIELT3v6hjCOiPjbtG/
T6NO3ebxvgeTZFmaabiRsQ7BM/ggBEzQUiXYIXnjwATPy4epQuggWgOxB0OAIizxTBXsQoeDOhpv
VFLmqkR7br3KOUiFUzqwoLpwHdzInmjrUVoz4GcyHauq76PNdheDBsvs4DvS+ie07lEali7tkfZU
Fyht84omvPjXyfQazMfmetI699LSHebx7A1QSwMEFAACAAgA7kUkSSjZeTawAAAA7gAAACkAHABz
dG9yYWdlL3dlYnNxbC90ZXN0LWF1dGhvcml6ZXItc3RkZXJyLnR4dFVUCQADEELMVxBCzFd1eAsA
AQT1AQAABBQAAABlzkELgkAQBeB7v2JOoVBt0CHaW5RdIgQtPe/qGMI6I+Nu0b9Po07d5vG+B5Nk
WZppuJGxDsEz+CAETNBSJdgheePABM/Lh6lC6CBaA7EHQ4AiLPFMFexCh4M6Gm9UUuaqRHtuvco5
SIVTOrCgunAd3MieaOtRWjPgZzIdq6rvo812F4MGy+zgO9L6J7TuURqWLu2R9lQXKG3ziia8+NfJ
9BrMx+Z60jr30tId5vHsDVBLAwQUAAIACADuRSRJKNl5NrAAAADuAAAAPgAcAHN0b3JhZ2Uvd2Vi
c3FsL3RyYW5zYWN0aW9uLWNhbGxiYWNrLWV4Y2VwdGlvbi1jcmFzaC1zdGRlcnIudHh0VVQJAAMQ
QsxXEELMV3V4CwABBPUBAAAEFAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427R
v0+jTt3m8b4Hk2RZmmm4kbEOwTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoa
b1RS5qpEe269yjlIhVM6sKC6cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2
VBcobfOKJrz418n0GszH5nrSOvfS0h3m8ewNUEsDBBQAAgAIAO5FJEmG32d/tgAAANwBAAA9ABwA
c3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtc3RkZXJy
LnR4dFVUCQADEELMVxBCzFd1eAsAAQT1AQAABBQAAADlz78KwkAMBvDdp8gkLagnOIi3idZFRGj9
M9+1qRxck5LeKb69rejkI7jlI78PkizPj7mGMxnrEQJDiELABI5KwQYpGA8mBp7eTRljA8kciAMY
AhRhSUfqwj422KmtCUZl10Jd0e5dUAVHKXFIGxZUB66i79kDbdVLazp8V4ZhVrZtsliuUtBgmT18
Slp/hdYtSs3SHFukNVUXFFc/kwFPfnU2nAbjfnPaaV0EcXSDcTrK/urbF1BLAwQUAAIACADvRSRJ
ht9nf7YAAADcAQAAQwAcAHN0b3JhZ2Uvd2Vic3FsL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNr
LWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAkAAxFCzFcRQsxXdXgLAAEE9QEAAAQUAAAA5c+/
CsJADAbw3afIJC2oJziIt4nWRURo/TPftakcXJOS3im+va3o5CO45SO/D5Isz4+5hjMZ6xECQ4hC
wASOSsEGKRgPJgae3k0ZYwPJHIgDGAIUYUlH6sI+NtiprQlGZddCXdHuXVAFRylxSBsWVAeuou/Z
A23VS2s6fFeGYVa2bbJYrlLQYJk9fEpaf4XWLUrN0hxbpDVVFxRXP5MBT351NpwG435z2mldBHF0
g3E6yv7q2xdQSwMEFAACAAgA70UkSSjZeTawAAAA7gAAADQAHABzdG9yYWdlL3dlYnNxbC90cmFu
c2FjdGlvbi1lcnJvci1jYWxsYmFjay1zdGRlcnIudHh0VVQJAAMRQsxXEULMV3V4CwABBPUBAAAE
FAAAAGXOQQuCQBAF4Hu/Yk6hUG3QIdpblF0iBC097+oYwjoj427Rv0+jTt3m8b4Hk2RZmmm4kbEO
wTP4IARM0FIl2CF548AEz8uHqULoIFoDsQdDgCIs8UwV7EKHgzoab1RS5qpEe269yjlIhVM6sKC6
cB3cyJ5o61FaM+BnMh2rqu+jzXYXgwbL7OA70vontO5RGpYu7ZH2VBcobfOKJrz418n0GszH5nrS
OvfS0h3m8ewNUEsDBBQAAgAIAO9FJEko2Xk2sAAAAO4AAAAvABwAc3RvcmFnZS93ZWJzcWwvdHJh
bnNhY3Rpb24tcHJvdG90eXBlLXN0ZGVyci50eHRVVAkAAxJCzFcSQsxXdXgLAAEE9QEAAAQUAAAA
Zc5BC4JAEAXge79iTqFQbdAh2luUXSIELT3v6hjCOiPjbtG/T6NO3ebxvgeTZFmaabiRsQ7BM/gg
BEzQUiXYIXnjwATPy4epQuggWgOxB0OAIizxTBXsQoeDOhpvVFLmqkR7br3KOUiFUzqwoLpwHdzI
nmjrUVoz4GcyHauq76PNdheDBsvs4DvS+ie07lEali7tkfZUFyht84omvPjXyfQazMfmetI699LS
Hebx7A1QSwMEFAACAAgA70UkSYbfZ3+2AAAA3AEAAEUAHABzdG9yYWdlL3dlYnNxbC90cmFuc2Fj
dGlvbi1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAkAAxJCzFcS
QsxXdXgLAAEE9QEAAAQUAAAA5c+/CsJADAbw3afIJC2oJziIt4nWRURo/TPftakcXJOS3im+va3o
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
V3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAgAAAPtEJEmPq5WaBwAAAAcAAAARABgAAAAAAAEAAACk
gTc0AABfd3B0X2NlcnRzL3NlcmlhbFVUBQADSUDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAgAA
APtEJEnOmo6DBwAAAAcAAAAVABgAAAAAAAEAAACkgYk0AABfd3B0X2NlcnRzL3NlcmlhbC5vbGRV
VAUAA0lAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACbRSRJW9Vd9RZ7AQBvGg4ADgAYAAAA
AAABAAAApIHfNAAAYWNjZXNzX2xvZy50eHRVVAUAA3VBzFd1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAAAPRSRJAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UE9sAEAY29tcG9zaXRpbmcvVVQFAANu
QMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAA0UkSQAAAAAAAAAAAAAAABQAGAAAAAAAAAAQ
AO1Bg7ABAGNvbXBvc2l0aW5nL3JlZ2lvbnMvVVQFAANWQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAA0UkSWlx8PKtAAAAFAMAAEUAGAAAAAAAAQAAAKSB0bABAGNvbXBvc2l0aW5nL3JlZ2lv
bnMvd2Via2l0LWZsb3ctcmVuZGVyZXItbGF5ZXItY29tcG9zaXRpbmctc3RkZXJyLnR4dFVUBQAD
VkDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA9FJEnEqCmhwAAAAPIGAAA8ABgAAAAAAAEA
AACkgf2xAQBjb21wb3NpdGluZy9zaG93LWNvbXBvc2l0ZWQtaWZyYW1lLW9uLWJhY2stYnV0dG9u
LXN0ZGVyci50eHRVVAUAA25AzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAABRSRJAAAAAAAA
AAAAAAAAEgAYAAAAAAAAABAA7UEzswEAY29tcG9zaXRpbmcvdmlkZW8vVVQFAANSQMxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAAUUkSeE3JKitAAAA3gMAADIAGAAAAAAAAQAAAKSBf7MBAGNv
bXBvc2l0aW5nL3ZpZGVvL3ZpZGVvLWNsaXAtY2hhbmdlLXNyYy1zdGRlcnIudHh0VVQFAANSQMxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAACkUkSQAAAAAAAAAAAAAAAA0AGAAAAAAAAAAQAO1B
mLQBAGRpc3BsYXlsaXN0cy9VVAUAA2NAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAKRSRJ
o1f96FAAAACOAAAAMgAYAAAAAAABAAAApIHftAEAZGlzcGxheWxpc3RzL2V4dGVudC1pbmNsdWRl
cy10cmFuc2Zvcm1zLXN0ZGVyci50eHRVVAUAA2NAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAAKRSRJ8paV1UcAAABJAAAAKQAYAAAAAAABAAAApIGbtQEAZGlzcGxheWxpc3RzL2xheWVyLWRp
c3BheS1saXN0LXN0ZGVyci50eHRVVAUAA2NAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACO
RiRJRiTFscM9AABp1AAAIgAYAAAAAAABAAAApIFFtgEARHVtcFJlbmRlclRyZWUtMzQ3MDYtY3Jh
c2gtbG9nLnR4dFVUBQADO0PMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABpFJEkAAAAAAAAA
AAAAAAAIABgAAAAAAAAAEADtQWT0AQBlZGl0aW5nL1VUBQADhEDMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAClFJEkAAAAAAAAAAAAAAAATABgAAAAAAAAAEADtQab0AQBlZGl0aW5nL3Bhc3Rl
Ym9hcmQvVVQFAAOdQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGkUkSX6p8SDpAAAAggEA
ADAAGAAAAAAAAQAAAKSB8/QBAGVkaXRpbmcvcGFzdGVib2FyZC9jb3B5LXJlc29sdmVzLXVybHMt
c3RkZXJyLnR4dFVUBQADhEDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAChFJElXGBNJ2gAA
AFABAAAsABgAAAAAAAEAAACkgUb2AQBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9wbHVnaW4t
c3RkZXJyLnR4dFVUBQADnEDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAChFJElXGBNJ2gAA
AFABAAAyABgAAAAAAAEAAACkgYb3AQBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9wbHVnaW4t
eGh0bWwtc3RkZXJyLnR4dFVUBQADnEDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAClFJEl3
TYsd4wAAAHcBAAAsABgAAAAAAAEAAACkgcz4AQBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9z
Y3JpcHQtc3RkZXJyLnR4dFVUBQADnUDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAClFJElK
Lj4w4gAAAHsBAAAyABgAAAAAAAEAAACkgRX6AQBlZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9z
Y3JpcHQteGh0bWwtc3RkZXJyLnR4dFVUBQADnUDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AGRGJEkqhIZYlQoAAIU3AAANABgAAAAAAAEAAACkgWP7AQBlcnJvcl9sb2cudHh0VVQFAAPsQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAg0UkSQAAAAAAAAAAAAAAAAUAGAAAAAAAAAAQAO1B
PwYCAGZhc3QvVVQFAANFQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAANEUkSQAAAAAAAAAA
AAAAAAwAGAAAAAAAAAAQAO1BfgYCAGZhc3QvY2FudmFzL1VUBQADs0DMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAC9FJEl3Khe8rgAAAN4DAABMABgAAAAAAAEAAACkgcQGAgBmYXN0L2NhbnZh
cy9jYW52YXMtY3NzLXNpemUtYWZ0ZXItaGVpZ2h0LWNoYW5nZS13aXRoLWRpc3BsYXktZmxleC1z
dGRlcnIudHh0VVQFAAOpQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgANEUkSWZHfIaEAAAA
GgEAACYAGAAAAAAAAQAAAKSB+AcCAGZhc3QvY2FudmFzL2NhbnZhcy1saW5lRGFzaC1zdGRlcnIu
dHh0VVQFAAOzQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAg0UkSQAAAAAAAAAAAAAAAAkA
GAAAAAAAAAAQAO1B3AgCAGZhc3QvY3NzL1VUBQADRUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAINFJEmtTfNosQAAAM4BAAA2ABgAAAAAAAEAAACkgR8JAgBmYXN0L2Nzcy9wZXJzcGVjdGl2
ZS1vcmlnaW4taW5pdGlhbC1pbmhlcml0LXN0ZGVyci50eHRVVAUAA0VBzFd1eAsAAQT1AQAABBQA
AABQSwECHgMKAAAAAAB7RSRJAAAAAAAAAAAAAAAACQAYAAAAAAAAABAA7UFACgIAZmFzdC9kb20v
VVQFAAM6QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAL0UkSQAAAAAAAAAAAAAAABoAGAAA
AAAAAAAQAO1BgwoCAGZhc3QvZG9tL011dGF0aW9uT2JzZXJ2ZXIvVVQFAAOpQMxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAL0UkSSjZeTawAAAA7gAAAD8AGAAAAAAAAQAAAKSB1woCAGZhc3Qv
ZG9tL011dGF0aW9uT2JzZXJ2ZXIvZGF0YWJhc2UtY2FsbGJhY2stZGVsaXZlcnktc3RkZXJyLnR4
dFVUBQADqUDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAHtFJEkAAAAAAAAAAAAAAAAQABgA
AAAAAAAAEADtQQAMAgBmYXN0L2RvbS9XaW5kb3cvVVQFAAM6QcxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAjkYkSUYkxbHDPQAAadQAADYAGAAAAAAAAQAAAKSBSgwCAGZhc3QvZG9tL1dpbmRv
dy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtY3Jhc2gtbG9nLnR4dFVUBQADO0PMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAHtFJEmRUL2V4gMAAAUMAAAzABgAAAAAAAEAAACkgX1KAgBmYXN0
L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWNsb25lLXN0ZGVyci50eHRVVAUAAzpBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAA1RSRJAAAAAAAAAAAAAAAACwAYAAAAAAAAABAA7UHM
TgIAZmFzdC9mb3Jtcy9VVAUAA7VAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA1RSRJLl/Y
73sBAAD4OQAAMwAYAAAAAAABAAAApIERTwIAZmFzdC9mb3Jtcy9WYWxpZGl0eVN0YXRlLXBhdHRl
cm5NaXNtYXRjaC1zdGRlcnIudHh0VVQFAAO1QMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA
dUUkSQAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1B+VACAGZhc3QvZnJhbWVzL1VUBQADLUHMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHVFJEko2Xk2sAAAAO4AAAAvABgAAAAAAAEAAACkgT9R
AgBmYXN0L2ZyYW1lcy9zYW5kYm94ZWQtaWZyYW1lLXN0b3JhZ2Utc3RkZXJyLnR4dFVUBQADLUHM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADtFJEkAAAAAAAAAAAAAAAANABgAAAAAAAAAEADt
QVhSAgBmYXN0L2hpc3RvcnkvVVQFAAPCQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAO0Uk
SSjZeTawAAAA7gAAAEAAGAAAAAAAAQAAAKSBn1ICAGZhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLXdl
YmRhdGFiYXNlLW5vLXRyYW5zYWN0aW9uLWRiLXN0ZGVyci50eHRVVAUAA8JAzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMKAAAAAABERSRJAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UHJUwIAZmFzdC9p
bWFnZXMvVVQFAAPQQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOUUkSeSbzHzUAAAANAEA
ADkAGAAAAAAAAQAAAKSBD1QCAGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9t
LWJmY2FjaGUtYWN0dWFsLnR4dFVUBQADvUDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADlF
JEmkehOFQwEAAEsCAAA3ABgAAAAAAAEAAACkgVZVAgBmYXN0L2ltYWdlcy9hbmltYXRlZC1naWYt
cmVzdG9yZWQtZnJvbS1iZmNhY2hlLWRpZmYudHh0VVQFAAO9QMxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAOUUkSYNm1D/XAAAAOgEAADsAGAAAAAAAAQAAAKSBClcCAGZhc3QvaW1hZ2VzL2Fu
aW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUtZXhwZWN0ZWQudHh0VVQFAAO9QMxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOUUkSUIh0fMbCAAA9hkAAD8AGAAAAAAAAQAAAKSBVlgC
AGZhc3QvaW1hZ2VzL2FuaW1hdGVkLWdpZi1yZXN0b3JlZC1mcm9tLWJmY2FjaGUtcHJldHR5LWRp
ZmYuaHRtbFVUBQADvkDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAERFJEkhj704MgAAADMA
AAAsABgAAAAAAAEAAACkgepgAgBmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtY3JvcC1ib3gtc3Rk
ZXJyLnR4dFVUBQAD0EDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFZFJEkAAAAAAAAAAAAA
AAAJABgAAAAAAAAAEADtQYJhAgBmYXN0L3hzbC9VVAUAA/NAzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACABURSRJcv1l8oUAAADpAAAAJQAYAAAAAAABAAAApIHFYQIAZmFzdC94c2wvdHJhbnNm
b3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUBQAD8EDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AFRFJEnOCSgCjQAAAPAAAAAnABgAAAAAAAEAAACkgaliAgBmYXN0L3hzbC94c2x0LWJhZC1pbXBv
cnQtdXJpLXN0ZGVyci50eHRVVAUAA/BAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABURSRJ
z49mDlAAAACgAAAAJAAYAAAAAAABAAAApIGXYwIAZmFzdC94c2wveHNsdC1jb250ZW50VHlwZS1z
dGRlcnIudHh0VVQFAAPwQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAVkUkSYFKd61LAAAA
rAAAADQAGAAAAAAAAQAAAKSBRWQCAGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50
LWNyYXNoLXN0ZGVyci50eHRVVAUAA/NAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACORiRJ
f81Pdr4BAAACAwAAEQAYAAAAAAABAAAApIH+ZAIAZnVsbF9yZXN1bHRzLmpzb25VVAUAAzxDzFd1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABXRSRJAAAAAAAAAAAAAAAABQAYAAAAAAAAABAA7UEH
ZwIAaHR0cC9VVAUAA/VAzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAB3RSRJAAAAAAAAAAAA
AAAACwAYAAAAAAAAABAA7UFGZwIAaHR0cC90ZXN0cy9VVAUAAzFBzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAABbRSRJAAAAAAAAAAAAAAAAEQAYAAAAAAAAABAA7UGLZwIAaHR0cC90ZXN0cy9j
YWNoZS9VVAUAA/1AzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABaRSRJJWblKPEAAACJBAAA
MAAYAAAAAAABAAAApIHWZwIAaHR0cC90ZXN0cy9jYWNoZS9tZW1vcnktY2FjaGUtcHJ1bmluZy1z
dGRlcnIudHh0VVQFAAP8QMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAW0UkScuj2jWDAAAA
wAAAAD0AGAAAAAAAAQAAAKSBMWkCAGh0dHAvdGVzdHMvY2FjaGUvbmV0d29yay1lcnJvci1kdXJp
bmctcmV2YWxpZGF0aW9uLXN0ZGVyci50eHRVVAUAA/1AzFd1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAABXRSRJAAAAAAAAAAAAAAAAEgAYAAAAAAAAABAA7UEragIAaHR0cC90ZXN0cy9jYW52YXMv
VVQFAAP1QMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAV0UkSQAAAAAAAAAAAAAAABgAGAAA
AAAAAAAQAO1Bd2oCAGh0dHAvdGVzdHMvY2FudmFzL3dlYmdsL1VUBQAD9UDMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAFdFJEnrOvvSbwAAAKQAAAA7ABgAAAAAAAEAAACkgclqAgBodHRwL3Rl
c3RzL2NhbnZhcy93ZWJnbC9vcmlnaW4tY2xlYW4tY29uZm9ybWFuY2Utc3RkZXJyLnR4dFVUBQAD
9UDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFhFJEkAAAAAAAAAAAAAAAAvABgAAAAAAAAA
EADtQa1rAgBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L1VU
BQAD+EDMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFhFJEll0RmIfwAAAJUAAABRABgAAAAA
AAEAAACkgRZsAgBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94
L3JlZmVyZXItaGVhZGVyLXN0cmlwcGVkLXN0ZGVyci50eHRVVAUAA/hAzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACABXRSRJZdEZiH8AAACVAAAAagAYAAAAAAABAAAApIEgbQIAaHR0cC90ZXN0
cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJp
cHBlZC13aXRoLW1ldGEtcmVmZXJlci1hbHdheXMtc3RkZXJyLnR4dFVUBQAD9kDMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAFdFJEll0RmIfwAAAJUAAABrABgAAAAAAAEAAACkgUNuAgBodHRw
L3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXItaGVhZGVy
LXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLWRlZmF1bHQtc3RkZXJyLnR4dFVUBQAD9kDMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFhFJEll0RmIfwAAAJUAAABpABgAAAAAAAEAAACkgWdv
AgBodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXIt
aGVhZGVyLXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLW5ldmVyLXN0ZGVyci50eHRVVAUAA/dA
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABYRSRJZdEZiH8AAACVAAAAbwAYAAAAAAABAAAA
pIGJcAIAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZl
cmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVmZXJlci1uby1yZWZlcnJlci1zdGRlcnIu
dHh0VVQFAAP3QMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAWEUkSWXRGYh/AAAAlQAAAH4A
GAAAAAAAAQAAAKSBsXECAGh0dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNh
bmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQtd2l0aC1tZXRhLXJlZmVyZXItbm8tcmVmZXJy
ZXItd2hlbi1kb3duZ3JhZGUtc3RkZXJyLnR4dFVUBQAD90DMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAFhFJEll0RmIfwAAAJUAAABqABgAAAAAAAEAAACkgehyAgBodHRwL3Rlc3RzL2NvbnRl
bnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXItaGVhZGVyLXN0cmlwcGVkLXdp
dGgtbWV0YS1yZWZlcmVyLW9yaWdpbi1zdGRlcnIudHh0VVQFAAP4QMxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAWEUkSWXRGYh/AAAAlQAAAG4AGAAAAAAAAQAAAKSBC3QCAGh0dHAvdGVzdHMv
Y29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBw
ZWQtd2l0aC1tZXRhLXJlZmVyZXItdW5zYWZlLXVybC1zdGRlcnIudHh0VVQFAAP4QMxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DCgAAAAAAV0UkSQAAAAAAAAAAAAAAABMAGAAAAAAAAAAQAO1BMnUCAGh0
dHAvdGVzdHMvY29va2llcy9VVAUAA/VAzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABXRSRJ
AKmMxscAAABTAgAAQQAYAAAAAAABAAAApIF/dQIAaHR0cC90ZXN0cy9jb29raWVzL2RvdWJsZS1x
dW90ZWQtdmFsdWUtd2l0aC1zZW1pLWNvbG9uLXN0ZGVyci50eHRVVAUAA/VAzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMKAAAAAABgRSRJAAAAAAAAAAAAAAAAFQAYAAAAAAAAABAA7UHBdgIAaHR0cC90
ZXN0cy9pbnNwZWN0b3IvVVQFAAMDQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAYEUkSQAA
AAAAAAAAAAAAAB0AGAAAAAAAAAAQAO1BEHcCAGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsv
VVQFAAMDQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYEUkSehC7vLPBwAAdisAADcAGAAA
AAAAAQAAAKSBZ3cCAGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2UtdGltaW5n
LXN0ZGVyci50eHRVVAUAAwNBzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABqRSRJAAAAAAAA
AAAAAAAAEQAYAAAAAAAAABAA7UGnfwIAaHR0cC90ZXN0cy9tZWRpYS9VVAUAAxdBzFd1eAsAAQT1
AQAABBQAAABQSwECHgMKAAAAAABdRSRJAAAAAAAAAAAAAAAAGgAYAAAAAAAAABAA7UHyfwIAaHR0
cC90ZXN0cy9tZWRpYS9jbGVhcmtleS9VVAUAAwJBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CABdRSRJB5sLZT8BAAA0AwAAOQAYAAAAAAABAAAApIFGgAIAaHR0cC90ZXN0cy9tZWRpYS9jbGVh
cmtleS9jbGVhci1rZXktaGxzLWFlczEyOC1zdGRlcnIudHh0VVQFAAMCQcxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DCgAAAAAAYkUkSQAAAAAAAAAAAAAAABUAGAAAAAAAAAAQAO1B+IECAGh0dHAvdGVz
dHMvbWVkaWEvaGxzL1VUBQADCEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAF1FJEnlCrx5
ywEAAEUFAABAABgAAAAAAAEAAACkgUeCAgBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtYWNjZXNz
aWJsaXR5LWRlc2NyaWJlcy12aWRlby1zdGRlcnIudHh0VVQFAAMCQcxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAXUUkSbxP16bFAQAARQUAADoAGAAAAAAAAQAAAKSBjIQCAGh0dHAvdGVzdHMv
bWVkaWEvaGxzL2hscy1hdWRpby10cmFja3MtaGFzLWF1ZGlvLXN0ZGVyci50eHRVVAUAAwJBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABgRSRJyt5YaNABAAD5BQAAQQAYAAAAAAABAAAApIHF
hgIAaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlvLXRyYWNrcy1sb2NhbGUtc2VsZWN0aW9u
LXN0ZGVyci50eHRVVAUAAwNBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABgRSRJfhdbhsUB
AABFBQAAMAAYAAAAAAABAAAApIEQiQIAaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLWF1ZGlvLXRy
YWNrcy1zdGRlcnIudHh0VVQFAAMDQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYEUkSXGu
bKouAQAA3gMAACwAGAAAAAAAAQAAAKSBP4sCAGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy1wcm9n
cmVzcy1zdGRlcnIudHh0VVQFAAMEQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYUUkSbXa
N58oAQAAhAMAADAAGAAAAAAAAQAAAKSB04wCAGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy12aWRl
by1yZXNpemUtc3RkZXJyLnR4dFVUBQADBUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGFF
JElkJJ6AbwEAAN4GAAA6ABgAAAAAAAEAAACkgWWOAgBodHRwL3Rlc3RzL21lZGlhL2hscy92aWRl
by1jb250cm9scy1saXZlLXN0cmVhbS1zdGRlcnIudHh0VVQFAAMGQcxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAYkUkSXOAR02eAgAACjgAADwAGAAAAAAAAQAAAKSBSJACAGh0dHAvdGVzdHMv
bWVkaWEvaGxzL3ZpZGVvLWR1cmF0aW9uLWFjY2Vzc2liaWxpdHktc3RkZXJyLnR4dFVUBQADCEHM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAF1FJEkjp2JczAAAADcCAAAyABgAAAAAAAEAAACk
gVyTAgBodHRwL3Rlc3RzL21lZGlhL21lZGlhLWRvY3VtZW50LXJlZmVyZXItc3RkZXJyLnR4dFVU
BQADAUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAF1FJEmYLtV15QAAAKwCAAAqABgAAAAA
AAEAAACkgZSUAgBodHRwL3Rlc3RzL21lZGlhL21lZGlhLWRvY3VtZW50LXN0ZGVyci50eHRVVAUA
AwJBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABgRSRJyan/R+oAAADGAwAAOQAYAAAAAAAB
AAAApIHdlQIAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1wbGF5LXN0cmVhbS1jaHVua2VkLWljeS1z
dGRlcnIudHh0VVQFAAMEQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAb0UkSQAAAAAAAAAA
AAAAAB4AGAAAAAAAAAAQAO1BOpcCAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL1VUBQAD
IkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGZFJEkkqpxIUAEAAJcEAABCABgAAAAAAAEA
AACkgZKXAgBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBlbmQt
YnVmZmVyLXN0ZGVyci50eHRVVAUAAxBBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABnRSRJ
hisqDzwBAAB6AwAAUAAYAAAAAAABAAAApIFemQIAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtdi1iaXRyYXRlLXN0ZGVyci50eHRVVAUA
AxJBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABsRSRJtsLk+IsAAACbAAAAOQAYAAAAAAAB
AAAApIEkmwIAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS1z
dGRlcnIudHh0VVQFAAMbQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAbUUkSYXhccioAAAA
BwMAADsAGAAAAAAAAQAAAKSBIpwCAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLXJlbW92ZS1zdGRlcnIudHh0VVQFAAMeQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAb0UkSYMiQIWkAAAA0QEAAEYAGAAAAAAAAQAAAKSBP50CAGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLXNvdXJjZWJ1ZmZlci1tb2RlLXN0ZGVyci50eHRVVAUAAyJB
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABhRSRJrXs3d+wAAABfAQAALQAYAAAAAAABAAAA
pIFjngIAaHR0cC90ZXN0cy9tZWRpYS9wZGYtc2VydmVkLWFzLXBkZi1zdGRlcnIudHh0VVQFAAMF
QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYUUkSSZPvgnAAAAAkgEAAC8AGAAAAAAAAQAA
AKSBtp8CAGh0dHAvdGVzdHMvbWVkaWEvcmVsb2FkLWFmdGVyLWRpYWxvZy1zdGRlcnIudHh0VVQF
AAMGQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYkUkSSCM78NGAQAAdAIAAC8AGAAAAAAA
AQAAAKSB36ACAGh0dHAvdGVzdHMvbWVkaWEvdGV4dC1zZXJ2ZWQtYXMtdGV4dC1zdGRlcnIudHh0
VVQFAAMHQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAY0UkSSnDwRwIAQAAeAMAADYAGAAA
AAAAAQAAAKSBjqICAGh0dHAvdGVzdHMvbWVkaWEvdHJhY2staW4tYmFuZC1obHMtbWV0YWRhdGEt
c3RkZXJyLnR4dFVUBQADCUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGRFJEnK/yHHhgEA
AGwHAAAmABgAAAAAAAEAAACkgQakAgBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLWF1dGgtc3RkZXJy
LnR4dFVUBQADDEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGVFJEmrQzOx4QAAAKwCAAAt
ABgAAAAAAAEAAACkgeylAgBodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLWVycm9yLWFib3J0LXN0ZGVy
ci50eHRVVAUAAw1BzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABlRSRJHI2AXBIBAADjAQAA
NgAYAAAAAAABAAAApIE0pwIAaHR0cC90ZXN0cy9tZWRpYS92aWRlby1lcnJvci1kb2VzLW5vdC1l
eGlzdC1zdGRlcnIudHh0VVQFAAMOQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZUUkSe3e
hezDAAAAJAMAACwAGAAAAAAAAQAAAKSBtqgCAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9hZC10
d2ljZS1zdGRlcnIudHh0VVQFAAMOQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZUUkSU5m
Ck3fAAAAbAMAAC8AGAAAAAAAAQAAAKSB36kCAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxheS1w
cm9ncmVzcy1zdGRlcnIudHh0VVQFAAMOQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZ0Uk
Sc9lfP2FAAAAwAAAAD0AGAAAAAAAAQAAAKSBJ6sCAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcGxh
eS1zdGFsbC1iZWZvcmUtbWV0YS1kYXRhLXN0ZGVyci50eHRVVAUAAxJBzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACABoRSRJVWSo9LsAAACSAQAAKwAYAAAAAAABAAAApIEjrAIAaHR0cC90ZXN0
cy9tZWRpYS92aWRlby1xdWVyeS11cmwtc3RkZXJyLnR4dFVUBQADE0HMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAGlFJEnRqr+D9gAAAFgFAAAqABgAAAAAAAEAAACkgUOtAgBodHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLXJlZGlyZWN0LXN0ZGVyci50eHRVVAUAAxZBzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACABqRSRJbRP+/+AAAABSAgAAKwAYAAAAAAABAAAApIGdrgIAaHR0cC90ZXN0cy9t
ZWRpYS92aWRlby11c2VyYWdlbnQtc3RkZXJyLnR4dFVUBQADF0HMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAIlFJEkAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQeKvAgBodHRwL3Rlc3RzL21p
c2MvVVQFAANRQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAaUUkSV6E9GnmAAAAYgEAAC0A
GAAAAAAAAQAAAKSBLLACAGh0dHAvdGVzdHMvbWlzYy9jb3B5LXJlc29sdmVzLXVybHMtc3RkZXJy
LnR4dFVUBQADFUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGlFJElBdEE/xAAAAP4AAAA/
ABgAAAAAAAEAAACkgXmxAgBodHRwL3Rlc3RzL21pc2MvZGVsZXRlLWZyYW1lLWR1cmluZy1yZWFk
eXN0YXRlY2hhbmdlLXN0ZGVyci50eHRVVAUAAxZBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CABpRSRJrsRxicMAAAD+AAAAWwAYAAAAAAABAAAApIG2sgIAaHR0cC90ZXN0cy9taXNjL2RlbGV0
ZS1mcmFtZS1kdXJpbmctcmVhZHlzdGF0ZWNoYW5nZS13aXRoLWdjLWFmdGVyLXZpZGVvLXJlbW92
YWwtc3RkZXJyLnR4dFVUBQADFkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAIlFJEkVNTWS
egAAALwAAAAqABgAAAAAAAEAAACkgQ60AgBodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0
LXN0ZGVyci50eHRVVAUAA1FBzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACBRSRJAAAAAAAA
AAAAAAAAFAAYAAAAAAAAABAA7UHstAIAaHR0cC90ZXN0cy9zZWN1cml0eS9VVAUAA0JBzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACABjRSRJJ1UbLcoAAADdAQAAVQAYAAAAAAABAAAApIE6tQIA
aHR0cC90ZXN0cy9zZWN1cml0eS9jYW52YXMtcmVtb3RlLXJlYWQtcmVtb3RlLXZpZGVvLWJsb2Nr
ZWQtbm8tY3Jvc3NvcmlnaW4tc3RkZXJyLnR4dFVUBQADCkHMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAGNFJEkeCCpu2gAAAKwCAABIABgAAAAAAAEAAACkgZO2AgBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2NhbnZhcy1yZW1vdGUtcmVhZC1yZW1vdGUtdmlkZW8tbG9jYWxob3N0LXN0ZGVyci50eHRV
VAUAAwpBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABkRSRJt/r93+EAAACsAgAARwAYAAAA
AAABAAAApIHvtwIAaHR0cC90ZXN0cy9zZWN1cml0eS9jYW52YXMtcmVtb3RlLXJlYWQtcmVtb3Rl
LXZpZGVvLXJlZGlyZWN0LXN0ZGVyci50eHRVVAUAAwtBzFd1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAABjRSRJAAAAAAAAAAAAAAAAHgAYAAAAAAAAABAA7UFRuQIAaHR0cC90ZXN0cy9zZWN1cml0
eS9jbGlwYm9hcmQvVVQFAAMJQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAY0UkSVCyjNiC
AAAAGgEAAD4AGAAAAAAAAQAAAKSBqbkCAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL2Ns
aXBib2FyZC1maWxlLWFjY2Vzcy1zdGRlcnIudHh0VVQFAAMJQcxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAAfUUkSQAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1Bo7oCAGh0dHAvdGVzdHMvc2Vj
dXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUBQADPUHMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAGRFJEnHGusw1gAAAPgBAABLABgAAAAAAAEAAACkgQe7AgBodHRwL3Rlc3RzL3NlY3Vy
aXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9hdWRpby1yZWRpcmVjdC1hbGxvd2VkLXN0ZGVyci50
eHRVVAUAAwtBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABjRSRJmTWdhdYAAAD4AQAATAAY
AAAAAAABAAAApIFivAIAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kv
YXVkaW8tcmVkaXJlY3QtYWxsb3dlZDItc3RkZXJyLnR4dFVUBQADCkHMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAGRFJEk+XxaYpwAAAIoBAABYABgAAAAAAAEAAACkgb69AgBodHRwL3Rlc3Rz
L3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9ibG9iLXVybC1kb2VzLW5vdC1tYXRjaC1z
b3VyY2Utc2VsZi1zdGRlcnIudHh0VVQFAAMLQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA
ZUUkSQAAAAAAAAAAAAAAAEQAGAAAAAAAAAAQAO1B974CAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29u
dGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvVVQFAAMOQcxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZUUkSWPwDeTnAAAAJgMAAHkAGAAAAAAAAQAAAKSBdb8C
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1
cmUtcmVxdWVzdHMvdXBncmFkZS1pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWluLWZyYW1lLXN0
ZGVyci50eHRVVAUAAw5BzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABlRSRJAAAAAAAAAAAA
AAAAPQAYAAAAAAAAABAA7UEPwQIAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvdXNlckFnZW50U2hhZG93RE9NL1VUBQADDkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAGRFJEnoSDru5AAAAEMCAABTABgAAAAAAAEAAACkgYbBAgBodHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ctYXVkaW8tc3Rk
ZXJyLnR4dFVUBQADDEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGVFJEk4+idJvAAAAJIB
AABTABgAAAAAAAEAAACkgffCAgBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBv
bGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ctdmlkZW8tc3RkZXJyLnR4dFVUBQADDUHMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGVFJEl+2lXnggAAAMAAAABrABgAAAAAAAEAAACkgUDE
AgBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFk
b3dET00vZGVmYXVsdC1zcmMtb2JqZWN0LWRhdGEtdXJsLWFsbG93ZWQtc3RkZXJyLnR4dFVUBQAD
DkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHpFJEmTUVVT3QAAAFICAABLABgAAAAAAAEA
AACkgWfFAgBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS92aWRlby1y
ZWRpcmVjdC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAAzdBzFd1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAB6RSRJv0WoKLwAAACSAQAATAAYAAAAAAABAAAApIHJxgIAaHR0cC90ZXN0cy9zZWN1cml0
eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdmlkZW8tcmVkaXJlY3QtYWxsb3dlZDItc3RkZXJyLnR4
dFVUBQADN0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHpFJEk5KY9u3QAAAFICAABmABgA
AAAAAAEAAACkgQvIAgBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS92
aWRlby13aXRoLWh0dHAtdXJsLWFsbG93ZWQtYnktY3NwLW1lZGlhLXNyYy1zdGFyLXN0ZGVyci50
eHRVVAUAAzhBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAB6RSRJhpauy4IAAADAAAAAWQAY
AAAAAAABAAAApIGIyQIAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kv
d29ya2VyLWJsb2ItaW5oZXJpdHMtY3NwLWJsb2Nrcy1ldmFsLXN0ZGVyci50eHRVVAUAAzhBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAB8RSRJY6qsbIIAAACoAAAAQAAYAAAAAAABAAAApIGd
ygIAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLWFsbG93ZWQt
c3RkZXJyLnR4dFVUBQADPEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAH1FJEljqqxsggAA
AKgAAABSABgAAAAAAAEAAACkgZnLAgBodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0
eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0VVQFAAM9QcxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAZEUkSZmhiQmDAAAAGgEAADUAGAAAAAAAAQAAAKSB
p8wCAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29ycy1wb3N0LXJlZGlyZWN0LTMwMS1zdGRlcnIudHh0
VVQFAAMLQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAbEUkSYbfZ3+2AAAA3AEAADoAGAAA
AAAAAQAAAKSBmc0CAGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLXdlYnNxbC1hbGxv
d2VkLXN0ZGVyci50eHRVVAUAAxxBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABsRSRJKNl5
NrAAAADuAAAAMgAYAAAAAAABAAAApIHDzgIAaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1vcmln
aW4td2Vic3FsLXN0ZGVyci50eHRVVAUAAxxBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABv
RSRJMA/SyrkAAACSAQAAPQAYAAAAAAABAAAApIHfzwIAaHR0cC90ZXN0cy9zZWN1cml0eS9sb2Nh
bC12aWRlby1zb3VyY2UtZnJvbS1yZW1vdGUtc3RkZXJyLnR4dFVUBQADIkHMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAHBFJEmmAnLKggAAAMAAAAA6ABgAAAAAAAEAAACkgQ/RAgBodHRwL3Rl
c3RzL3NlY3VyaXR5L2xvY2FsLXZpZGVvLXNyYy1mcm9tLXJlbW90ZS1zdGRlcnIudHh0VVQFAAMj
QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAZ0UkSQAAAAAAAAAAAAAAACEAGAAAAAAAAAAQ
AO1BBdICAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L1VUBQADEUHMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAGdFJElnyBLt7gAAAIkEAABOABgAAAAAAAEAAACkgWDSAgBodHRw
L3Rlc3RzL3NlY3VyaXR5L21peGVkQ29udGVudC9pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWlu
LWZyYW1lLXN0ZGVyci50eHRVVAUAAxFBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABnRSRJ
fM1aNoIAAADAAAAAQgAYAAAAAAABAAAApIHW0wIAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENv
bnRlbnQvaW5zZWN1cmUtY3NzLWluLWlmcmFtZS1zdGRlcnIudHh0VVQFAAMRQcxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAeEUkSSjZeTawAAAA7gAAAD8AGAAAAAAAAQAAAKSB1NQCAGh0dHAv
dGVzdHMvc2VjdXJpdHkvc3RvcmFnZS1ibG9ja2luZy1sb29zZW5lZC13ZWJzcWwtc3RkZXJyLnR4
dFVUBQADNEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHhFJEko2Xk2sAAAAO4AAABDABgA
AAAAAAEAAACkgf3VAgBodHRwL3Rlc3RzL3NlY3VyaXR5L3N0b3JhZ2UtYmxvY2tpbmctc3RyZW5n
dGhlbmVkLXdlYnNxbC1zdGRlcnIudHh0VVQFAAM0QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAeUUkSZM50qPrAAAAmAQAADkAGAAAAAAAAQAAAKSBKtcCAGh0dHAvdGVzdHMvc2VjdXJpdHkv
dmlkZW8tY3Jvc3Mtb3JpZ2luLWNhY2hpbmctc3RkZXJyLnR4dFVUBQADNkHMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAHlFJEklbwXOEwEAAOcBAAA/ABgAAAAAAAEAAACkgYjYAgBodHRwL3Rl
c3RzL3NlY3VyaXR5L3ZpZGVvLXBvc3Rlci1jcm9zcy1vcmlnaW4tY3Jhc2gyLXN0ZGVyci50eHRV
VAUAAzZBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACBRSRJYEtmEJEAAAD7AQAARQAYAAAA
AAABAAAApIEU2gIAaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXhzbC1kb2N1bWVudC1z
ZWN1cml0eU9yaWdpbi1zdGRlcnIudHh0VVQFAANCQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAA
AAAAaUUkSQAAAAAAAAAAAAAAABMAGAAAAAAAAAAQAO1BJNsCAGh0dHAvdGVzdHMvc3RvcmFnZS9V
VAUAAxVBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABpRSRJKNl5NrAAAADuAAAARQAYAAAA
AAABAAAApIFx2wIAaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2FsbGVkLWluLWNv
cnJlY3QtY29udGV4dC1zdGRlcnIudHh0VVQFAAMVQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAA
AAAAd0UkSQAAAAAAAAAAAAAAABoAGAAAAAAAAAAQAO1BoNwCAGh0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvVVQFAAMxQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAd0UkSX5/7RexAAAAAQEA
AEEAGAAAAAAAAQAAAKSB9NwCAGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcG9zdC1ibG9iLWNv
bnRlbnQtdHlwZS1hc3luYy1zdGRlcnIudHh0VVQFAAMxQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAd0UkSX5/7RexAAAAAQEAAEAAGAAAAAAAAQAAAKSBIN4CAGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvcG9zdC1ibG9iLWNvbnRlbnQtdHlwZS1zeW5jLXN0ZGVyci50eHRVVAUAAzFBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABqRSRJAAAAAAAAAAAAAAAAFQAYAAAAAAAAABAA7UFL
3wIAaHR0cC90ZXN0cy94bWx2aWV3ZXIvVVQFAAMXQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAA
AAAAakUkSQAAAAAAAAAAAAAAACAAGAAAAAAAAAAQAO1Bmt8CAGh0dHAvdGVzdHMveG1sdmlld2Vy
L2R1bXBBc1RleHQvVVQFAAMXQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAakUkSX+uon+C
AAAAwAAAADkAGAAAAAAAAQAAAKSB9N8CAGh0dHAvdGVzdHMveG1sdmlld2VyL2R1bXBBc1RleHQv
Y3NzLXN0eWxlc2hlZXQtc3RkZXJyLnR4dFVUBQADF0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAPlEJElbBFgOogUAAE0QAAAKABgAAAAAAAEAAACkgengAgBodHRwZC5jb25mVVQFAANFQMxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAjkUkSQAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1B
z+YCAGltcG9ydGVkL1VUBQADW0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAI5FJEkAAAAA
AAAAAAAAAAANABgAAAAAAAAAEADtQRLnAgBpbXBvcnRlZC93M2MvVVQFAANbQcxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAl0UkSQAAAAAAAAAAAAAAACAAGAAAAAAAAAAQAO1BWecCAGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvVVQFAANtQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAAl0UkSQAAAAAAAAAAAAAAACUAGAAAAAAAAAAQAO1Bs+cCAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9VVAUAA21BzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACX
RSRJAAAAAAAAAAAAAAAALwAYAAAAAAAAABAA7UES6AIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9VVAUAA21BzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAA
AACZRSRJAAAAAAAAAAAAAAAAQAAYAAAAAAAAABAA7UF76AIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L1VUBQADckHMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAwoAAAAAAK1FJEkAAAAAAAAAAAAAAABPABgAAAAAAAAAEADtQfXoAgBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvVVQFAAOWQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
l0UkSZz1zlDmAAAATAUAAGcAGAAAAAAAAQAAAKSBfukCAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9l
dmVudF9jYW5wbGF5LXN0ZGVyci50eHRVVAUAA21BzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CACXRSRJgrst3uoAAAD+BAAAcgAYAAAAAAABAAAApIEF6wIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRz
L2V2ZW50X2NhbnBsYXlfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQFAANuQcxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAmEUkSSODUbruAAAADAYAAG4AGAAAAAAAAQAAAKSBm+wCAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9t
ZWRpYS1lbGVtZW50cy9ldmVudF9jYW5wbGF5dGhyb3VnaC1zdGRlcnIudHh0VVQFAANvQcxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAmEUkSVhvJAznAAAA/gQAAHkAGAAAAAAAAQAAAKSBMe4C
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9jYW5wbGF5dGhyb3VnaF9ub2F1dG9wbGF5LXN0
ZGVyci50eHRVVAUAA3BBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACZRSRJiYW0yPEAAAAM
BgAAagAYAAAAAAABAAAApIHL7wIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZGRh
dGEtc3RkZXJyLnR4dFVUBQADcUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJlFJEniFniJ
6wAAAP4EAAB1ABgAAAAAAAEAAACkgWDxAgBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9h
ZGVkZGF0YV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAUAA3JBzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACACaRSRJHEfh5+cAAACkBAAAbgAYAAAAAAABAAAApIH68gIAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2V2ZW50X2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRVVAUAA3NBzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACACaRSRJDZo0Q+0AAACkBAAAeQAYAAAAAAABAAAApIGJ9AIAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZG1ldGFkYXRhX25vYXV0b3BsYXktc3RkZXJyLnR4
dFVUBQADdEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJtFJElEXd/47AAAAKQEAABpABgA
AAAAAAEAAACkgSn2AgBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9hZHN0YXJ0LXN0ZGVy
ci50eHRVVAUAA3VBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACbRSRJkQtL0uoAAACkBAAA
dAAYAAAAAAABAAAApIG49wIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRzdGFydF9u
b2F1dG9wbGF5LXN0ZGVyci50eHRVVAUAA3ZBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACc
RSRJnMcrxe0AAABmBgAAfAAYAAAAAAABAAAApIFQ+QIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2
ZW50X29yZGVyX2NhbnBsYXlfY2FucGxheXRocm91Z2gtc3RkZXJyLnR4dFVUBQADeEHMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAJ1FJEk3duwd7wAAAAwGAAB1ABgAAAAAAAEAAACkgfP6AgBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfb3JkZXJfY2FucGxheV9wbGF5aW5nLXN0ZGVyci50
eHRVVAUAA3lBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACdRSRJ5g8jzO0AAAD+BAAAfwAY
AAAAAAABAAAApIGR/AIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X29yZGVyX2xvYWRlZG1l
dGFkYXRhX2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUBQADekHMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAKBFJEkGZ/0W7wAAAAwGAAB4ABgAAAAAAAEAAACkgTf+AgBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxl
bWVudHMvZXZlbnRfb3JkZXJfbG9hZHN0YXJ0X3Byb2dyZXNzLXN0ZGVyci50eHRVVAUAA3tBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACgRSRJ121B3/IAAAAMBgAAZQAYAAAAAAABAAAApIHY
/wIAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BhdXNlLXN0ZGVyci50eHRVVAUAA3xBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAChRSRJVuebM+gAAACkBAAAcAAYAAAAAAABAAAApIFp
AQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BhdXNlX25vYXV0b3BsYXktc3RkZXJyLnR4
dFVUBQADfkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKJFJEl+EuGV8QAAAAwGAABkABgA
AAAAAAEAAACkgfsCAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfcGxheS1zdGRlcnIudHh0
VVQFAAN/QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAokUkSYjbPEHoAAAApAQAAG8AGAAA
AAAAAQAAAKSBigQDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRp
Y3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5X25vYXV0b3BsYXkt
c3RkZXJyLnR4dFVUBQADgEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKNFJEmNUdwc7wAA
AAwGAABnABgAAAAAAAEAAACkgRsGAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfcGxheWlu
Zy1zdGRlcnIudHh0VVQFAAOBQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgApEUkSUGVa6bv
AAAAZgYAAHIAGAAAAAAAAQAAAKSBqwcDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5
aW5nX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUBQADg0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAKRFJElG1y6/7wAAAAwGAABoABgAAAAAAAEAAACkgUYJAwBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVu
dHMvZXZlbnRfcHJvZ3Jlc3Mtc3RkZXJyLnR4dFVUBQADhEHMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAKVFJEmpY15p8QAAAKQEAABzABgAAAAAAAEAAACkgdcKAwBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxl
bWVudHMvZXZlbnRfcHJvZ3Jlc3Nfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQFAAOFQcxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgApUUkSccPx/7zAAAADAYAAGoAGAAAAAAAAQAAAKSBdQwDAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF90aW1ldXBkYXRlLXN0ZGVyci50eHRVVAUAA4ZBzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACmRSRJB80R0/EAAABmBgAAdQAYAAAAAAABAAAApIEM
DgMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3RpbWV1cGRhdGVfbm9hdXRvcGxheS1zdGRl
cnIudHh0VVQFAAOIQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgApkUkSay5bN2CAAAAwAAA
AGwAGAAAAAAAAQAAAKSBrA8DAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9z
ZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF92b2x1bWVjaGFu
Z2Utc3RkZXJyLnR4dFVUBQADiEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJdFJEkAAAAA
AAAAAAAAAABaABgAAAAAAAAAEADtQdQQAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNl
cy9VVAUAA21BzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACXRSRJAAAAAAAAAAAAAAAAZAAY
AAAAAAAAABAA7UFoEQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2ludGVyZmFjZXMvVGV4dFRyYWNr
L1VUBQADbkHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJdFJElV2VCvyQAAAN0BAAB5ABgA
AAAAAAEAAACkgQYSAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNlcy9UZXh0VHJhY2sv
YWN0aXZlQ3Vlcy1zdGRlcnIudHh0VVQFAANtQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
l0UkSeZ0kp+CAAAAwAAAAHUAGAAAAAAAAQAAAKSBghMDAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9p
bnRlcmZhY2VzL1RleHRUcmFjay9hZGRDdWUtc3RkZXJyLnR4dFVUBQADbkHMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAKdFJEl5DjL24AAAAOQDAAB3ABgAAAAAAAEAAACkgbMUAwBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2R1cmluZ19sb2Fkc3RhcnQtc3RkZXJyLnR4dFVU
BQADikHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKdFJElcuisCggAAAMAAAABuABgAAAAA
AAEAAACkgUQWAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNz
L2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2luaXRpYWwtc3Rk
ZXJyLnR4dFVUBQADikHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKhFJEllrz+E4wAAAEwF
AAByABgAAAAAAAEAAACkgW4XAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
c2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGF1c2VkX2ZhbHNlX2R1
cmluZ19wbGF5LXN0ZGVyci50eHRVVAUAA4tBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACp
RSRJ6izmS+cAAAD+BAAAcgAYAAAAAAABAAAApIH9GAMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3Bh
dXNlZF90cnVlX2R1cmluZ19wYXVzZS1zdGRlcnIudHh0VVQFAAONQcxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAAmUUkSQAAAAAAAAAAAAAAAGoAGAAAAAAAAAAQAO1BkBoDAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRp
YS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1yZXNvdXJjZS9VVAUAA3JBzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACACZRSRJd4aWGv4AAAD7AQAAkQAYAAAAAAABAAAApIE0GwMAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL3BsYXlpbmctdGhlLW1lZGlhLXJlc291cmNlL3BhdXNlLW1vdmUtdG8t
b3RoZXItZG9jdW1lbnQtc3RkZXJyLnR4dFVUBQADcUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAJlFJElzVPMsIQEAABUDAACPABgAAAAAAAEAAACkgf0cAwBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVu
dHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvcGF1c2UtbW92ZS13aXRoaW4tZG9jdW1lbnQt
c3RkZXJyLnR4dFVUBQADckHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJlFJElXu2Ew2wAA
AAYDAACPABgAAAAAAAEAAACkgeceAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUt
bWVkaWEtcmVzb3VyY2UvcGF1c2UtcmVtb3ZlLWZyb20tZG9jdW1lbnQtc3RkZXJyLnR4dFVUBQAD
ckHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJlFJEnyLYAEgwAAABoBAACBABgAAAAAAAEA
AACkgYsgAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Vt
YmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2Uv
cGxheWJhY2tSYXRlLXN0ZGVyci50eHRVVAUAA3JBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CACpRSRJpDuIbYIAAADAAAAAeAAYAAAAAAABAAAApIHJIQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRz
L3ByZWxvYWRfcmVmbGVjdHNfbm9uZV9hdXRvcGxheS1zdGRlcnIudHh0VVQFAAONQcxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAqUUkSZ69awLjAAAATAUAAHMAGAAAAAAAAQAAAKSB/SIDAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0YXRlX2R1cmluZ19jYW5wbGF5LXN0ZGVyci50eHRV
VAUAA45BzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACqRSRJua47Pe0AAABmBgAAegAYAAAA
AAABAAAApIGNJAMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGlj
cy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBs
YXl0aHJvdWdoLXN0ZGVyci50eHRVVAUAA5BBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACr
RSRJBsbbwO4AAADABgAAdgAYAAAAAAABAAAApIEuJgMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3Jl
YWR5U3RhdGVfZHVyaW5nX2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUBQADkUHMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAKxFJEnS5gnO6wAAAKQEAAB6ABgAAAAAAAEAAACkgcwnAwBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfbG9hZGVkbWV0YWRhdGEtc3RkZXJyLnR4
dFVUBQADk0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAKxFJEnX3F217QAAAAwGAABzABgA
AAAAAAEAAACkgWspAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfcGxh
eWluZy1zdGRlcnIudHh0VVQFAAOUQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgArUUkSWq5
hGqDAAAAGgEAAGwAGAAAAAAAAQAAAKSBBSsDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0
YXRlX2luaXRpYWwtc3RkZXJyLnR4dFVUBQADlUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AK1FJEkgM3kv1QAAAMICAACEABgAAAAAAAEAAACkgS4sAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMv
c3JjX3JlZmxlY3RzX2F0dHJpYnV0ZV9ub3Rfc291cmNlX2VsZW1lbnRzLXN0ZGVyci50eHRVVAUA
A5VBzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACZRSRJAAAAAAAAAAAAAAAAVQAYAAAAAAAA
ABAA7UHBLQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3RyYWNrL1VUBQADcUHMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAAJlFJEkAAAAAAAAAAAAAAABjABgAAAAAAAAAEADtQVAuAwBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvdHJhY2svdHJhY2stZWxlbWVudC9VVAUAA3FBzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACACZRSRJvCncS+wAAAChAQAAggAYAAAAAAABAAAApIHtLgMAaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21l
ZGlhLWVsZW1lbnRzL3RyYWNrL3RyYWNrLWVsZW1lbnQvdHJhY2stYXBpLXRleHR0cmFja3Mtc3Rk
ZXJyLnR4dFVUBQADcUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAK1FJEmvTsVhvAAAAOwB
AABjABgAAAAAAAEAAACkgZUwAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
c2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdmlkZW9fMDA4LXN0ZGVy
ci50eHRVVAUAA5VBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACtRSRJnGAwTYMAAADAAAAA
bAAYAAAAAAABAAAApIHuMQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3ZpZGVvX3ZvbHVtZV9jaGVj
ay1zdGRlcnIudHh0VVQFAAOWQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAmUUkSQAAAAAA
AAAAAAAAAFIAGAAAAAAAAAAQAO1BFzMDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtYXVkaW8tZWxlbWVudC9VVAUAA3JB
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACZRSRJSOmgUt0AAADQAgAAbgAYAAAAAAABAAAA
pIGjMwMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L3RoZS1hdWRpby1lbGVtZW50L2F1ZGlvX2NvbnN0cnVjdG9yLXN0ZGVyci50
eHRVVAUAA3JBzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACZRSRJAAAAAAAAAAAAAAAAUwAY
AAAAAAAAABAA7UEoNQMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS1jYW52YXMtZWxlbWVudC9VVAUAA3JBzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACACZRSRJFDl4I4IAAAAaAQAAcAAYAAAAAAABAAAApIG1NQMAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L3RoZS1jYW52YXMtZWxlbWVudC8yZC5jYW52YXMucmVhZG9ubHktc3RkZXJyLnR4dFVUBQAD
ckHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJtFJEkAAAAAAAAAAAAAAAAqABgAAAAAAAAA
EADtQeE2AwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9VVAUAA3ZB
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACORSRJwhf1FaIAAABPAgAARgAYAAAAAAABAAAA
pIFFNwMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRiZmFjdG9y
eV9vcGVuMTEtc3RkZXJyLnR4dFVUBQADW0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAI5F
JEm8cWzVmQAAAMUAAABDABgAAAAAAAEAAACkgWc4AwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleF9jb3VudC1zdGRlcnIudHh0VVQFAANcQcxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAjkUkSbxxbNWZAAAAxQAAAEQAGAAAAAAAAQAAAKSBfTkDAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4X2NvdW50Mi1z
dGRlcnIudHh0VVQFAANcQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAjkUkSbxxbNWZAAAA
xQAAAEQAGAAAAAAAAQAAAKSBlDoDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5k
ZXhlZERCL2lkYmluZGV4X2NvdW50My1zdGRlcnIudHh0VVQFAANcQcxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAkkUkSbxxbNWZAAAAxQAAAEkAGAAAAAAAAQAAAKSBqzsDAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0b3JlX2NvdW50LXN0ZGVy
ci50eHRVVAUAA2RBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACSRSRJvHFs1ZkAAADFAAAA
SgAYAAAAAAABAAAApIHHPAMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVk
REIvaWRib2JqZWN0c3RvcmVfY291bnQyLXN0ZGVyci50eHRVVAUAA2NBzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACACSRSRJBIrpA58AAACKAQAASgAYAAAAAAABAAAApIHkPQMAaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvaWRib2JqZWN0c3RvcmVfY291bnQzLXN0
ZGVyci50eHRVVAUAA2RBzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACURSRJvHFs1ZkAAADF
AAAASwAYAAAAAAABAAAApIEHPwMAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRl
eGVkREIvaWRib2JqZWN0c3RvcmVfZGVsZXRlNS1zdGRlcnIudHh0VVQFAANnQcxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAlkUkSbxxbNWZAAAAxQAAAE4AGAAAAAAAAQAAAKSBJUADAGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYnRyYW5zYWN0aW9uLW9uY29t
cGxldGUtc3RkZXJyLnR4dFVUBQADbEHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJpFJEkE
iukDnwAAAIoBAABYABgAAAAAAAEAAACkgUZBAwBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL0luZGV4ZWREQi90cmFuc2FjdGlvbi1jcmVhdGVfaW5fdmVyc2lvbmNoYW5nZS1zdGRlcnIu
dHh0VVQFAAN0QcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAm0UkSbxxbNWZAAAAxQAAAEYA
GAAAAAAAAQAAAKSBd0IDAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERC
L3dyaXRlci1zdGFydmF0aW9uLXN0ZGVyci50eHRVVAUAA3ZBzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAACnRSRJAAAAAAAAAAAAAAAACgAYAAAAAAAAABAA7UGQQwMAaW5zcGVjdG9yL1VUBQAD
iUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAKdFJEkAAAAAAAAAAAAAAAATABgAAAAAAAAA
EADtQdRDAwBpbnNwZWN0b3IvZGVidWdnZXIvVVQFAAOJQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAp0UkSdAVmDwgDAAA1OIAAEEAGAAAAAAAAQAAAKSBIUQDAGluc3BlY3Rvci9kZWJ1Z2dl
ci9icmVhay1vbi1leGNlcHRpb24tdGhyb3ctaW4tcHJvbWlzZS1zdGRlcnIudHh0VVQFAAOJQcxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAskUkSQAAAAAAAAAAAAAAAAMAGAAAAAAAAAAQAO1B
vFADAGpzL1VUBQADn0HMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAM1FJEkAAAAAAAAAAAAA
AAAHABgAAAAAAAAAEADtQflQAwBqcy9kb20vVVQFAAPRQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAskUkSSjZeTawAAAA7gAAADUAGAAAAAAAAQAAAKSBOlEDAGpzL2RvbS9jYWxsYmFjay1m
dW5jdGlvbi13aXRoLWhhbmRsZS1ldmVudC1zdGRlcnIudHh0VVQFAAOfQcxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAzUUkSSjZeTawAAAA7gAAADAAGAAAAAAAAQAAAKSBWVIDAGpzL2RvbS9l
eGNlcHRpb25zLXRocm93bi1pbi1jYWxsYmFja3Mtc3RkZXJyLnR4dFVUBQAD0UHMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAwoAAAAAAEBGJEkAAAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQXNTAwBtZWRp
YS9VVAUAA6hCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACzRSRJNLBjK9kAAABSAgAAHwAY
AAAAAAABAAAApIGzUwMAbWVkaWEvYXVkaW8tZGF0YS11cmwtc3RkZXJyLnR4dFVUBQADokHMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAALpFJEkAAAAAAAAAAAAAAAATABgAAAAAAAAAEADtQeVU
AwBtZWRpYS9tZWRpYS1zb3VyY2UvVVQFAAOwQcxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
ukUkSQfBf7KLAAAAmwAAAEgAGAAAAAAAAQAAAKSBMlUDAG1lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YS1zb3VyY2Utc3RhbGxlZC1ob2xkcy1zbGVlcC1hc3NlcnRpb24tc3RkZXJyLnR4dFVUBQADsEHM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO5FJEnOWGDtwgAAACQDAAAoABgAAAAAAAEAAACk
gT9WAwBtZWRpYS9zb3VyY2VzLWZhbGxiYWNrLWNvZGVjcy1zdGRlcnIudHh0VVQFAAMQQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA7kUkSRSrlheKAAAAgAEAADAAGAAAAAAAAQAAAKSBY1cD
AG1lZGlhL3N2Zy1hcy1pbWFnZS13aXRoLW1lZGlhLWJsb2NrZWQtc3RkZXJyLnR4dFVUBQADEELM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPBFJEnPTinSkAAAAL0AAAAhABgAAAAAAAEAAACk
gVdYAwBtZWRpYS91bnN1cHBvcnRlZC1ydHNwLXN0ZGVyci50eHRVVAUAAxNCzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAxRiRJKAAL1a0AAAAUAwAAKAAYAAAAAAABAAAApIFCWQMAbWVkaWEv
dmlkZW8tcG9zdGVyLWJhY2tncm91bmQtc3RkZXJyLnR4dFVUBQADjULMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAEBGJEn2ox6RugAAAJIBAAAfABgAAAAAAAEAAACkgVFaAwBtZWRpYS92aWRl
by1zcmMtYmxvYi1zdGRlcnIudHh0VVQFAAOnQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
QEYkSRioL0SCAAAAwAAAACEAGAAAAAAAAQAAAKSBZFsDAG1lZGlhL3ZpZGVvLXNyYy1jaGFuZ2Ut
c3RkZXJyLnR4dFVUBQADqELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAMJFJEkAAAAAAAAA
AAAAAAAIABgAAAAAAAAAEADtQUFcAwBwbHVnaW5zL1VUBQADu0HMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAMJFJEl8ULaargAAAPEAAAAvABgAAAAAAAEAAACkgYNcAwBwbHVnaW5zL21vdXNl
LWNsaWNrLWlmcmFtZS10by1wbHVnaW4tc3RkZXJyLnR4dFVUBQADu0HMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAHtFJEmSU5XNZQIAAKIVAAAaABgAAAAAAAEAAACkgZpdAwBweXdlYnNvY2tl
dC53cy5sb2ctZXJyLnR4dFVUBQADOUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHtFJElz
ABT0CAEAAI8CAAAaABgAAAAAAAEAAACkgVNgAwBweXdlYnNvY2tldC53cy5sb2ctb3V0LnR4dFVU
BQADOUHMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAPpEJEkAAAAAAAAAAAAAAAAbABgAAAAA
AAAAAACkga9hAwBweXdlYnNvY2tldC53c3MubG9nLWVyci50eHRVVAUAA0dAzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMKAAAAAAD6RCRJAAAAAAAAAAAAAAAAGwAYAAAAAAAAAAAApIEEYgMAcHl3ZWJz
b2NrZXQud3NzLmxvZy1vdXQudHh0VVQFAANHQMxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
jkYkSUUmHTnRJwAAy6oAAAwAGAAAAAAAAQAAAKSBWWIDAHJlc3VsdHMuaHRtbFVUBQADPEPMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAI5GJEkAAAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQXCK
AwByZXRyaWVzL1VUBQADO0PMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAI5GJEkAAAAAAAAA
AAAAAAANABgAAAAAAAAAEADtQbKKAwByZXRyaWVzL2Zhc3QvVVQFAAM7Q8xXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DCgAAAAAAjkYkSQAAAAAAAAAAAAAAABEAGAAAAAAAAAAQAO1B+YoDAHJldHJpZXMv
ZmFzdC9kb20vVVQFAAM7Q8xXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAjkYkSQAAAAAAAAAA
AAAAABgAGAAAAAAAAAAQAO1BRIsDAHJldHJpZXMvZmFzdC9kb20vV2luZG93L1VUBQADO0PMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAI5GJElGJMWxwz0AAGnUAAA+ABgAAAAAAAEAAACkgZaL
AwByZXRyaWVzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtY3Jhc2gt
bG9nLnR4dFVUBQADO0PMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAI5GJElxV8lX3wMAAAUM
AAA7ABgAAAAAAAEAAACkgdHJAwByZXRyaWVzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1l
c3NhZ2UtY2xvbmUtc3RkZXJyLnR4dFVUBQADO0PMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AI5GJEmttR+/WboIAB+dLgAKABgAAAAAAAEAAACkgSXOAwBzdGF0cy5qc29uVVQFAAM8Q8xXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA6EUkSQAAAAAAAAAAAAAAAAgAGAAAAAAAAAAQAO1BwogM
AHN0b3JhZ2UvVVQFAAMDQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAOkYkSQAAAAAAAAAA
AAAAABIAGAAAAAAAAAAQAO1BBIkMAHN0b3JhZ2UvaW5kZXhlZGRiL1VUBQADoELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAAVGJEnCF/UVogAAAE8CAAApABgAAAAAAAEAAACkgVCJDABzdG9y
YWdlL2luZGV4ZWRkYi9pbmRleC1iYXNpY3Mtc3RkZXJyLnR4dFVUBQADOULMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAAVGJEnCF/UVogAAAE8CAAAxABgAAAAAAAEAAACkgVWKDABzdG9yYWdl
L2luZGV4ZWRkYi9pbmRleC1iYXNpY3Mtd29ya2Vycy1zdGRlcnIudHh0VVQFAAM5QsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgABkYkSbYLDNuvAAAAAQoAACgAGAAAAAAAAQAAAKSBYosMAHN0
b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWNvdW50LXN0ZGVyci50eHRVVAUAAztCzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAJRiRJ/P1/XqMAAAAUAwAALQAYAAAAAAABAAAApIFzjAwAc3RvcmFn
ZS9pbmRleGVkZGIvaW5kZXgtbXVsdGllbnRyeS1zdGRlcnIudHh0VVQFAANBQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgACUYkSbxxbNWZAAAAxQAAAC0AGAAAAAAAAQAAAKSBfY0MAHN0b3Jh
Z2UvaW5kZXhlZGRiL2luZGV4LXBvcHVsYXRpb24tc3RkZXJyLnR4dFVUBQADQkLMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAA1GJEkwGvj0rwUAAEwwAABFABgAAAAAAAAAAACkgX2ODABzdG9y
YWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLW9wZW4taW4tdXBncmFkZW5lZWRlZC1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA0lCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAANRiRJ2pRkg78FAABi
MwAAPQAYAAAAAAAAAAAApIGrlAwAc3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1vcGVuLWlu
LXVwZ3JhZGVuZWVkZWQtc3RkZXJyLnR4dFVUBQADSULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAA1GJEm0az4RQQQAACQXAABBABgAAAAAAAAAAACkgeGaDABzdG9yYWdlL2luZGV4ZWRkYi9p
bnR2ZXJzaW9uLW9wZW4td2l0aC12ZXJzaW9uLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADSULMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA1GJEmbaTBdQAQAAMQWAAA5ABgAAAAAAAAAAACkgZ2f
DABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLW9wZW4td2l0aC12ZXJzaW9uLXN0ZGVyci50
eHRVVAUAA0pCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAANRiRJKX/lMPgEAAB/OAAAUQAY
AAAAAAAAAAAApIFQpAwAc3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1wZW5kaW5nLXZlcnNp
b24tY2hhbmdlcy1hc2NlbmRpbmctcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANKQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgADkYkSfmuPrscBQAAwTkAAEkAGAAAAAAAAAAAAKSB06kMAHN0b3Jh
Z2UvaW5kZXhlZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJzaW9uLWNoYW5nZXMtYXNjZW5kaW5n
LXN0ZGVyci50eHRVVAUAA0tCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAORiRJ9/6cA9IE
AAAKLAAAUgAYAAAAAAAAAAAApIFyrwwAc3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1wZW5k
aW5nLXZlcnNpb24tY2hhbmdlcy1kZXNjZW5kaW5nLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADS0LM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA5GJEmt5z2k8gQAAPgpAABKABgAAAAAAAAAAACk
gdC0DABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXBlbmRpbmctdmVyc2lvbi1jaGFuZ2Vz
LWRlc2NlbmRpbmctc3RkZXJyLnR4dFVUBQADS0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AA5GJEnKolRCuwQAACYpAABMABgAAAAAAAAAAACkgUa6DABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2
ZXJzaW9uLXBlbmRpbmctdmVyc2lvbi1jaGFuZ2VzLXNhbWUtcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AANLQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADkYkSZsqSSP7BAAALi0AAEQAGAAAAAAA
AAAAAKSBh78MAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJzaW9uLWNo
YW5nZXMtc2FtZS1zdGRlcnIudHh0VVQFAANMQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
DkYkSZXS0aQMBAAANxoAADsAGAAAAAAAAAAAAKSBAMUMAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZl
cnNpb24tcGVyc2lzdGVuY2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANMQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgADkYkSeWHdkPjAwAA/RcAADMAGAAAAAAAAAAAAKSBgckMAHN0b3JhZ2Uv
aW5kZXhlZGRiL2ludHZlcnNpb24tcGVyc2lzdGVuY2Utc3RkZXJyLnR4dFVUBQADTELMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAA5GJEl7CYO6NwUAABwqAAA/ABgAAAAAAAAAAACkgdHNDABz
dG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXJldmVydC1vbi1hYm9ydC1wcml2YXRlLXN0ZGVy
ci50eHRVVAUAA0xCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAPRiRJtrmxBDIFAACvKwAA
NwAYAAAAAAAAAAAApIGB0wwAc3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1yZXZlcnQtb24t
YWJvcnQtc3RkZXJyLnR4dFVUBQADTULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA9GJEnJ
LGtW6gMAAJYYAABFABgAAAAAAAAAAACkgSTZDABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9u
LXR3by1vcGVucy1uby12ZXJzaW9ucy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA01CzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAPRiRJ8weE+hQEAAD9GQAAPQAYAAAAAAAAAAAApIGN3QwAc3Rv
cmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi10d28tb3BlbnMtbm8tdmVyc2lvbnMtc3RkZXJyLnR4
dFVUBQADTULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA9GJElZU0RKGwUAAM9BAAA4ABgA
AAAAAAAAAACkgRjiDABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXVwZ3JhZGVzLXByaXZh
dGUtc3RkZXJyLnR4dFVUBQADTkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA9GJEkuPlCe
TwUAAF1EAAAwABgAAAAAAAAAAACkgaXnDABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXVw
Z3JhZGVzLXN0ZGVyci50eHRVVAUAA05CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAPRiRJ
fCVKpCgDAADlEAAAMQAYAAAAAAAAAAAApIFe7QwAc3RvcmFnZS9pbmRleGVkZGIvaW52YWxpZC1r
ZXlzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADTkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ABBGJEkrzuEntQMAAKcSAAApABgAAAAAAAAAAACkgfHwDABzdG9yYWdlL2luZGV4ZWRkYi9pbnZh
bGlkLWtleXMtc3RkZXJyLnR4dFVUBQADT0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABBG
JEkRw8XzzQsAAAeXAQAyABgAAAAAAAAAAACkgQn1DABzdG9yYWdlL2luZGV4ZWRkYi9rZXktZ2Vu
ZXJhdG9yLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADUELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIABFGJEny6ZUw5QsAALGZAQAqABgAAAAAAAAAAACkgUIBDQBzdG9yYWdlL2luZGV4ZWRkYi9r
ZXktZ2VuZXJhdG9yLXN0ZGVyci50eHRVVAUAA1JCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAARRiRJ1JEuZPQEAAAXMgAAQAAYAAAAAAAAAAAApIGLDQ0Ac3RvcmFnZS9pbmRleGVkZGIva2V5
LXNvcnQtb3JkZXItYWNyb3NzLXR5cGVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADUkLMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIABFGJElpCaG3tQUAACw1AAA4ABgAAAAAAAAAAACkgfkSDQBz
dG9yYWdlL2luZGV4ZWRkYi9rZXktc29ydC1vcmRlci1hY3Jvc3MtdHlwZXMtc3RkZXJyLnR4dFVU
BQADUkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABJGJElLR74/KwUAAPwsAAA4ABgAAAAA
AAAAAACkgSAZDQBzdG9yYWdlL2luZGV4ZWRkYi9rZXktc29ydC1vcmRlci1kYXRlLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADU0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABJGJEmqLBatnAUA
AL0uAAAwABgAAAAAAAAAAACkgb0eDQBzdG9yYWdlL2luZGV4ZWRkYi9rZXktc29ydC1vcmRlci1k
YXRlLXN0ZGVyci50eHRVVAUAA1NCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAASRiRJKHX/
c9EHAAANtQAAMwAYAAAAAAAAAAAApIHDJA0Ac3RvcmFnZS9pbmRleGVkZGIva2V5LXR5cGUtYXJy
YXktcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANUQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
E0YkSau5LJelBwAAtbgAACsAGAAAAAAAAAAAAKSBAS0NAHN0b3JhZ2UvaW5kZXhlZGRiL2tleS10
eXBlLWFycmF5LXN0ZGVyci50eHRVVAUAA1ZCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAU
RiRJSKIxTuIEAACsIwAANAAYAAAAAAAAAAAApIELNQ0Ac3RvcmFnZS9pbmRleGVkZGIva2V5LXR5
cGUtYmluYXJ5LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADV0LMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIABRGJElokbLF7AQAAEEkAAAsABgAAAAAAAAAAACkgVs6DQBzdG9yYWdlL2luZGV4ZWRk
Yi9rZXktdHlwZS1iaW5hcnktc3RkZXJyLnR4dFVUBQADV0LMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIABRGJEktIIRRMgQAAKAXAAA2ABgAAAAAAAAAAACkga0/DQBzdG9yYWdlL2luZGV4ZWRk
Yi9rZXktdHlwZS1pbmZpbml0eS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA1dCzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAURiRJb2THc7gEAABpGgAALgAYAAAAAAAAAAAApIFPRA0Ac3RvcmFn
ZS9pbmRleGVkZGIva2V5LXR5cGUtaW5maW5pdHktc3RkZXJyLnR4dFVUBQADWELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIABRGJElcd3S9yAYAAKc3AAAzABgAAAAAAAAAAACkgW9JDQBzdG9y
YWdlL2luZGV4ZWRkYi9rZXlwYXRoLWFycmF5cy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA1hCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAVRiRJI9FrU6oGAAB1NQAAKwAYAAAAAAAAAAAApIGk
UA0Ac3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1hcnJheXMtc3RkZXJyLnR4dFVUBQADWULMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABVGJEmT7YuIqQMAALlPAAAzABgAAAAAAAAAAACkgbNX
DQBzdG9yYWdlL2luZGV4ZWRkYi9rZXlwYXRoLWJhc2ljcy1wcml2YXRlLXN0ZGVyci50eHRVVAUA
A1pCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAWRiRJy5kFKIcEAADFcwAAKwAYAAAAAAAA
AAAApIHJWw0Ac3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1iYXNpY3Mtc3RkZXJyLnR4dFVUBQAD
XELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABdGJEkwtq3SRwYAABJbAAAyABgAAAAAAAAA
AACkgbVgDQBzdG9yYWdlL2luZGV4ZWRkYi9rZXlwYXRoLWVkZ2VzLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADXULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABdGJEka7JVouAUAALE2AAAqABgA
AAAAAAAAAACkgWhnDQBzdG9yYWdlL2luZGV4ZWRkYi9rZXlwYXRoLWVkZ2VzLXN0ZGVyci50eHRV
VAUAA11CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAXRiRJxQE7A/wEAADXOQAANgAYAAAA
AAAAAAAApIGEbQ0Ac3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1mZXRjaC1rZXktcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAANdQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAF0YkSfV9ydzNBQAA
Yz4AAC4AGAAAAAAAAAAAAKSB8HINAHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtZmV0Y2gta2V5
LXN0ZGVyci50eHRVVAUAA15CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAXRiRJsFcR2u4G
AAATWgAAQQAYAAAAAAAAAAAApIEleQ0Ac3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1pbnRyaW5z
aWMtcHJvcGVydGllcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA15CzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAYRiRJsQzKfvUGAACUWQAAOQAYAAAAAAAAAAAApIGOgA0Ac3RvcmFnZS9pbmRl
eGVkZGIva2V5cGF0aC1pbnRyaW5zaWMtcHJvcGVydGllcy1zdGRlcnIudHh0VVQFAANfQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGEYkSfmPfIXUAAAAQAIAAC0AGAAAAAAAAAAAAKSB9ocN
AHN0b3JhZ2UvaW5kZXhlZGRiL2tleXJhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADX0LMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABlGJElXpF0T/AcAAJ2AAAA6ABgAAAAAAAAAAACkgTGJ
DQBzdG9yYWdlL2luZGV4ZWRkYi9sYXp5LWluZGV4LXBvcHVsYXRpb24tcHJpdmF0ZS1zdGRlcnIu
dHh0VVQFAANhQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGUYkSVSQG6cqCAAA1H8AADIA
GAAAAAAAAAAAAKSBoZENAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtcG9wdWxhdGlvbi1z
dGRlcnIudHh0VVQFAANiQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGUYkSUexhrp1BgAA
9lkAADUAGAAAAAAAAAAAAKSBN5oNAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtdHlwZXMt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANiQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAGkYk
Sdpg8ltrBwAAYWQAAC0AGAAAAAAAAAAAAKSBG6ENAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5k
ZXgtdHlwZXMtc3RkZXJyLnR4dFVUBQADY0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABpG
JEmapGI61wAAAEACAAA1ABgAAAAAAAAAAACkge2oDQBzdG9yYWdlL2luZGV4ZWRkYi9sZWdhY3kt
Y29uc3RhbnRzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADY0LMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIABpGJEn52HdxIAUAAE+EAAAyABgAAAAAAAAAAACkgTOqDQBzdG9yYWdlL2luZGV4ZWRk
Yi9saXN0LW9yZGVyaW5nLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADZELMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIABpGJEkhUDGeiQUAAIp6AAAqABgAAAAAAAAAAACkgb+vDQBzdG9yYWdlL2lu
ZGV4ZWRkYi9saXN0LW9yZGVyaW5nLXN0ZGVyci50eHRVVAUAA2RCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAbRiRJeuXbEQ0GAABSUQAALQAYAAAAAAAAAAAApIGstQ0Ac3RvcmFnZS9pbmRl
eGVkZGIvbWV0YWRhdGEtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANlQsxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAG0YkSTaOQdj2BAAA4R4AADIAGAAAAAAAAAAAAKSBILwNAHN0b3JhZ2UvaW5k
ZXhlZGRiL21ldGFkYXRhLXJhY2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANlQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAG0YkSdIKmAyjBQAABSMAACoAGAAAAAAAAAAAAKSBgsENAHN0b3Jh
Z2UvaW5kZXhlZGRiL21ldGFkYXRhLXJhY2Utc3RkZXJyLnR4dFVUBQADZULMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIABtGJEngPBGplwYAAIZSAAAlABgAAAAAAAAAAACkgYnHDQBzdG9yYWdl
L2luZGV4ZWRkYi9tZXRhZGF0YS1zdGRlcnIudHh0VVQFAANmQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAAFEYkSQAAAAAAAAAAAAAAABkAGAAAAAAAAAAQAO1Bf84NAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9VVAUAA1hCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADnRSRJzd1Fu4sG
AAAaRgAARAAYAAAAAAAAAAAApIHSzg0Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Fib3J0LXJl
cXVlc3RzLWNhbmNlbGxlZC1wcml2YXRlLXN0ZGVyci50eHRVVAUAAwFCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAD2RSRJWWrglKwHAAD7PgAANwAYAAAAAAAAAAAApIHb1Q0Ac3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2Fib3J0ZWQtcHV0LXByaXZhdGUtYWN0dWFsLnR4dFVUBQADH0LMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPZFJEns5HwSGwgAAKxAAAA1ABgAAAAAAAAAAACkgfjd
DQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYWJvcnRlZC1wdXQtcHJpdmF0ZS1kaWZmLnR4dFVU
BQADH0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPZFJEkgLBaD7wEAAEAFAAA5ABgAAAAA
AAEAAACkgYLmDQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYWJvcnRlZC1wdXQtcHJpdmF0ZS1l
eHBlY3RlZC50eHRVVAUAAx9CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD2RSRJDYU6awwV
AAC2JQEAPQAYAAAAAAAAAAAApIHk6A0Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Fib3J0ZWQt
cHV0LXByaXZhdGUtcHJldHR5LWRpZmYuaHRtbFVUBQADH0LMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAPZFJEmuh/J8/gUAAG47AAA3ABgAAAAAAAAAAACkgWf+DQBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vYWJvcnRlZC1wdXQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMfQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgA90UkSUsX+So/BgAAF2kAADcAGAAAAAAAAAAAAKSB1gQOAHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9hdXRvaW5jcmVtZW50LWFib3J0LXN0ZGVyci50eHRVVAUAAyFC
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD3RSRJzOvS6PIEAAD6HAAANQAYAAAAAAAAAAAA
pIGGCw4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLWFkZC1wcml2YXRlLXN0ZGVyci50
eHRVVAUAAyFCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD3RSRJSy1lJwgFAABhHQAALQAY
AAAAAAAAAAAApIHnEA4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2ljLWFkZC1zdGRlcnIu
dHh0VVQFAAMiQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA90UkSd3srg3QBAAAMhoAADUA
GAAAAAAAAAAAAKSBVhYOAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNpYy1wdXQtcHJpdmF0
ZS1zdGRlcnIudHh0VVQFAAMiQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA90UkSY3hHv/g
BAAApRoAAC0AGAAAAAAAAAAAAKSBlRsOAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9iYXNpYy1w
dXQtc3RkZXJyLnR4dFVUBQADIkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPhFJEmwt3j0
kgYAAOs8AAAvABgAAAAAAAAAAACkgdwgDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmxvYi1j
dXJzb3Itc3RkZXJyLnR4dFVUBQADI0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPhFJEn7
pvP39ggAADSnAAAvABgAAAAAAAAAAACkgdcnDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmxv
Yi1zaW1wbGUtc3RkZXJyLnR4dFVUBQADJELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPhF
JEmLiPol4gkAAKqkAAA3ABgAAAAAAAAAAACkgTYxDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
YmxvYi1zaW1wbGUtd29ya2Vycy1zdGRlcnIudHh0VVQFAAMkQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgA+UUkSeh62V4OBgAAHDQAADIAGAAAAAAAAAAAAKSBiTsOAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9ibG9iLXN2Zy1pbWFnZS1zdGRlcnIudHh0VVQFAAMlQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgA+UUkSZIY+WdNBgAASjIAAEQAGAAAAAAAAAAAAKSBA0IOAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9ibG9ja2VkLW9wZW4tZGItcmVxdWVzdHMtcHJpdmF0ZS1zdGRlcnIu
dHh0VVQFAAMlQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+UUkSRLxwbGYBgAAJTMAADwA
GAAAAAAAAAAAAKSBzkgOAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9ibG9ja2VkLW9wZW4tZGIt
cmVxdWVzdHMtc3RkZXJyLnR4dFVUBQADJULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPlF
JEl4tRD0IAYAAGUvAABBABgAAAAAAAAAAACkgdxPDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlLWluZGV4LWZhaWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADJkLMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAPlFJEmYKbDDHgYAAP0rAAA5ABgAAAAAAAAAAACkgXdWDgBzdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlLWluZGV4LWZhaWx1cmVzLXN0ZGVyci50eHRVVAUA
AyZCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD5RSRJErOJfwgGAAB7QwAAQwAYAAAAAAAA
AAAApIEIXQ4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWJhc2lj
LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADJkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPlF
JEn0nffpTQYAAChFAAA7ABgAAAAAAAAAAACkgY1jDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Y3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtc3RkZXJyLnR4dFVUBQADJkLMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAPpFJEl8lmUKnAQAABobAABGABgAAAAAAAAAAACkgU9qDgBzdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIu
dHh0VVQFAAMnQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+kUkSZlzbApEBAAAPBgAAD4A
GAAAAAAAAAAAAKSBa28OAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9y
ZS1mYWlsdXJlcy1zdGRlcnIudHh0VVQFAAMnQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
+kUkSSwx1xLZBQAA0FYAADQAGAAAAAAAAAAAAKSBJ3QOAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9jdXJzb3ItMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAydCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAD6RSRJ3bE3NgsGAACoWAAALAAYAAAAAAAAAAAApIFueg4Ac3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2N1cnNvci0xLXN0ZGVyci50eHRVVAUAAyhCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAD6RSRJOGunP/oFAADVeQAANAAYAAAAAAAAAAAApIHfgA4Ac3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2N1cnNvci0yLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADKELMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAPtFJEnxCNGFEAYAACJ1AAAsABgAAAAAAAAAAACkgUeHDgBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTItc3RkZXJyLnR4dFVUBQADKULMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAPtFJEkT5sydwgUAAMdVAAA0ABgAAAAAAAAAAACkgb2NDgBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMpQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+0UkSU7q+FXfBQAAzlQAACwAGAAAAAAAAAAAAKSB7ZMO
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3ItMy1zdGRlcnIudHh0VVQFAAMpQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+0UkSSumF/S1BQAAE1AAADQAGAAAAAAAAAAAAKSBMpoO
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3ItNC1wcml2YXRlLXN0ZGVyci50eHRVVAUA
AypCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD7RSRJHBDvG9cFAAA2TwAALAAYAAAAAAAA
AAAApIFVoA4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1cnNvci00LXN0ZGVyci50eHRVVAUA
AypCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD7RSRJgYwpHpgFAAAJLgAANAAYAAAAAAAA
AAAApIGSpg4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1cnNvci01LXByaXZhdGUtc3RkZXJy
LnR4dFVUBQADKkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPtFJEm6H6wh5QUAAIsvAAAs
ABgAAAAAAAAAAACkgZisDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTUtc3RkZXJy
LnR4dFVUBQADKkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPxFJEm2Vf8kowUAAFcuAAA0
ABgAAAAAAAAAAACkgeOyDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTYtcHJpdmF0
ZS1zdGRlcnIudHh0VVQFAAMrQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA/EUkSer6iEPZ
BQAA5y4AACwAGAAAAAAAAAAAAKSB9LgOAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3It
Ni1zdGRlcnIudHh0VVQFAAMrQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA/EUkSb7BxFGN
BQAAlCgAADQAGAAAAAAAAAAAAKSBM78OAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3It
Ny1wcml2YXRlLXN0ZGVyci50eHRVVAUAAytCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD8
RSRJzamxoLgFAACoKQAALAAYAAAAAAAAAAAApIEuxQ4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2N1cnNvci03LXN0ZGVyci50eHRVVAUAAytCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD8
RSRJmWiHj4wFAACUKAAANAAYAAAAAAAAAAAApIFMyw4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2N1cnNvci04LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADLELMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAPxFJEmxdRossAUAAAQpAAAsABgAAAAAAAAAAACkgUbRDgBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vY3Vyc29yLTgtc3RkZXJyLnR4dFVUBQADLELMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAPxFJEkvWVmE8QUAAG5AAAA2ABgAAAAAAAAAAACkgVzXDgBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGF0ZS1iYXNpYy1wcml2YXRlLXN0ZGVyci50eHRVVAUAAyxCzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAD8RSRJUHvpTgIGAACVQQAALgAYAAAAAAAAAAAApIG93Q4Ac3RvcmFn
ZS9pbmRleGVkZGIvbW9kZXJuL2RhdGUtYmFzaWMtc3RkZXJyLnR4dFVUBQADLELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAP1FJEkZWJ7CYgUAAMosAAA8ABgAAAAAAAAAAACkgSfkDgBzdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtMS1wcml2YXRlLXN0ZGVyci50eHRV
VAUAAy1CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD9RSRJ/0TW440FAAADLgAANAAYAAAA
AAAAAAAApIH/6Q4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFiYXNlLTEtc3Rk
ZXJyLnR4dFVUBQADLULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAP1FJEmbzkO9GQYAAI0w
AAA8ABgAAAAAAAAAAACkgfrvDgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJh
c2UtMi1wcml2YXRlLXN0ZGVyci50eHRVVAUAAy1CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAD9RSRJTNtsgSYGAAAuMQAANAAYAAAAAAAAAAAApIGJ9g4Ac3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2RlbGV0ZWRhdGFiYXNlLTItc3RkZXJyLnR4dFVUBQADLULMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAP1FJEmKUUtmzgAAAJICAABOABgAAAAAAAAAAACkgR39DgBzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtbnVsbC1uYW1lLWV4Y2VwdGlvbi1wcml2YXRlLXN0
ZGVyci50eHRVVAUAAy5CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD9RSRJdmAoD04BAACd
AwAASAAYAAAAAAAAAAAApIFz/g4Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFi
YXNlLXJlcXVlc3QtZXZlbnQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMuQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgA/UUkSUt7CCyLAQAAQgQAAEAAGAAAAAAAAAAAAKSBQwAPAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9kZWxldGVkYXRhYmFzZS1yZXF1ZXN0LWV2ZW50LXN0ZGVyci50eHRV
VAUAAy5CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD9RSRJYDb0MlYAAACZAAAAQgAYAAAA
AAAAAAAApIFIAg8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFiYXNlLXJlcXVl
c3QtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMuQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
/UUkSTXyLrgQAQAAIQMAADoAGAAAAAAAAAAAAKSBGgMPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9kZWxldGVkYXRhYmFzZS1yZXF1ZXN0LXN0ZGVyci50eHRVVAUAAy5CzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAD9RSRJkAzpxiUHAADcNwAAOQAYAAAAAAAAAAAApIGeBA8Ac3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTEtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMuQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAEYkSawT2uSnBwAADDgAADEAGAAAAAAAAAAAAKSB
NgwPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVpbmRleC0xLXN0ZGVyci50eHRVVAUA
Ay9CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAARiRJ0+RgRmwHAADHTwAAOQAYAAAAAAAA
AAAApIFIFA8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTItcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAMvQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAEYkSSecHqbyBwAA
glAAADEAGAAAAAAAAAAAAKSBJxwPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVpbmRl
eC0yLXN0ZGVyci50eHRVVAUAAy9CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAARiRJp7ic
zjUFAAABJAAAOQAYAAAAAAAAAAAApIGEJA8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0
ZWluZGV4LTMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMwQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAAEYkSVKzVGmLBQAAqiQAADEAGAAAAAAAAAAAAKSBLCoPAHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9kZWxldGVpbmRleC0zLXN0ZGVyci50eHRVVAUAAzBCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAARiRJ1BhX8YgFAAB6LAAAOQAYAAAAAAAAAAAApIEiMA8Ac3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMwQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAEYkSYUDBt0JBwAAJGgAAD8AGAAAAAAAAAAAAKSBHTYP
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVvYmplY3RzdG9yZS0xLXByaXZhdGUtc3Rk
ZXJyLnR4dFVUBQADMELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAFGJEmUF5WmJAcAAPVs
AAA3ABgAAAAAAAAAAACkgZ89DwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlb2JqZWN0
c3RvcmUtMS1zdGRlcnIudHh0VVQFAAMxQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAUYk
SY0FmR23AwAAnBQAADgAGAAAAAAAAAAAAKSBNEUPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9k
b3VibGUtYWJvcnQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMxQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAAUYkSTcRLH3mAwAAdBMAADAAGAAAAAAAAAAAAKSBXUkPAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9kb3VibGUtYWJvcnQtc3RkZXJyLnR4dFVUBQADMULMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAAFGJEmrR5YKXAMAAMsSAAA3ABgAAAAAAAAAAACkga1NDwBzdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vZG91YmxlLW9wZW4tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMxQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAUYkSTue75mVAwAAjRUAAC8AGAAAAAAAAAAAAKSBelEP
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kb3VibGUtb3Blbi1zdGRlcnIudHh0VVQFAAMxQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAUYkSasBP86NBAAAVCQAAD4AGAAAAAAAAAAAAKSB
eFUPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9nYy1jbG9zZXMtZGF0YWJhc2UtcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAMyQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAUYkSd6q45O+BAAA
JyUAADYAGAAAAAAAAAAAAKSBfVoPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9nYy1jbG9zZXMt
ZGF0YWJhc2Utc3RkZXJyLnR4dFVUBQADMkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAFG
JEmhhabBNQYAAB83AAA+ABgAAAAAAAAAAACkgatfDwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Z2V0LWluZGV4LWZhaWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADMkLMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAAFGJElB8xYqXwYAAMY1AAA2ABgAAAAAAAAAAACkgVhmDwBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vZ2V0LWluZGV4LWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAzJCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAACRiRJCw9a94wJAADq7gEAOAAYAAAAAAAAAAAApIEn
bQ8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2dldC1rZXlyYW5nZS1wcml2YXRlLXN0ZGVyci50
eHRVVAUAAzRCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADRiRJTZiVQMUJAAD3BAIAMAAY
AAAAAAAAAAAApIEldw8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2dldC1rZXlyYW5nZS1zdGRl
cnIudHh0VVQFAAM1QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAA0YkSYb6w15OBQAANh0A
ADYAGAAAAAAAAAAAAKSBVIEPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9oYW5kbGUtdXNlci1k
ZWxldGUtc3RkZXJyLnR4dFVUBQADNULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAANGJEmI
1nTcHgYAAMM0AABSABgAAAAAAAAAAACkgRKHDwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRi
ZGF0YWJhc2UtZGVsZXRlb2JqZWN0c3RvcmUtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AAM1QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAA0YkSfsQ1l0xBgAA2zQAAEoAGAAAAAAA
AAAAAKSBvI0PAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJkYXRhYmFzZS1kZWxldGVvYmpl
Y3RzdG9yZS1mYWlsdXJlcy1zdGRlcnIudHh0VVQFAAM1QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAA0YkSTdrCcGNBAAA5BgAAEwAGAAAAAAAAAAAAKSBcZQPAHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9pZGJkYXRhYmFzZS10cmFuc2FjdGlvbi1mYWlsdXJlcy1wcml2YXRlLXN0ZGVyci50
eHRVVAUAAzZCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADRiRJ4NIQaaoEAAD/GAAARAAY
AAAAAAAAAAAApIGEmQ8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmRhdGFiYXNlLXRyYW5z
YWN0aW9uLWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAzZCzFd1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAADRiRJG9a0QFIFAAAPNAAARQAYAAAAAAAAAAAApIGsng8Ac3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL2lkYmluZGV4LXByb3BlcnRpZXMtYmFzaWMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAM2
QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgABEYkSb9TMUaEBQAAqTQAAD0AGAAAAAAAAAAA
AKSBfaQPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVzLWJhc2lj
LXN0ZGVyci50eHRVVAUAAzdCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAFRiRJ+4Naw6EL
AADgyQUAQQAYAAAAAAAAAAAApIF4qg8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmtleS1h
cnJheS1lcXVhbGl0eS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAzlCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAGRiRJEUC9aLoNAADL2wYAOQAYAAAAAAAAAAAApIGUtg8Ac3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2lkYmtleS1hcnJheS1lcXVhbGl0eS1zdGRlcnIudHh0VVQFAAM8QsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgABkYkSUKLY+UABwAAZHIAAEIAGAAAAAAAAAAAAKSBwcQP
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1jbGVhci0xLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADPELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAdGJEn09BcM3QYA
ADRyAAA6ABgAAAAAAAAAAACkgT3MDwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0
c3RvcmUtY2xlYXItMS1zdGRlcnIudHh0VVQFAAM9QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAB0YkSUlIDyypBwAAF5kAAEIAGAAAAAAAAAAAAKSBjtMPAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pZGJvYmplY3RzdG9yZS1jbGVhci0yLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADPULMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAdGJEmUuxflsQcAAImbAAA6ABgAAAAAAAAAAACkgbPb
DwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtY2xlYXItMi1zdGRlcnIu
dHh0VVQFAAM+QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAB0YkSSYh0atWBgAACKwAAEIA
GAAAAAAAAAAAAKSB2OMPAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1j
b3VudC0xLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADPkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAAdGJEnlL6rZYgcAAGXhAAA6ABgAAAAAAAAAAACkgarqDwBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vaWRib2JqZWN0c3RvcmUtY291bnQtMS1zdGRlcnIudHh0VVQFAAM+QsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgACEYkSVnK5SzuBQAA3C4AAEkAGAAAAAAAAAAAAKSBgPIPAHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1jb3VudC1mYWlsdXJlcy1wcml2YXRl
LXN0ZGVyci50eHRVVAUAAz9CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAIRiRJASk2aAYG
AAC0LgAAQQAYAAAAAAAAAAAApIHx+A8Ac3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVj
dHN0b3JlLWNvdW50LWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAz9CzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAIRiRJfA/hrB4JAAB/nQEAQwAYAAAAAAAAAAAApIFy/w8Ac3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWRlbGV0ZS0xLXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADP0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAhGJEnYrf+JegoAAInjAQA7ABgAAAAA
AAAAAACkgQ0JEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtZGVsZXRl
LTEtc3RkZXJyLnR4dFVUBQADQELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlGJEl5oomb
ZgYAAOI0AABDABgAAAAAAAAAAACkgfwTEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2Jq
ZWN0c3RvcmUtZGVsZXRlLTItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANBQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgACUYkSQzhABh+BgAAFzUAADsAGAAAAAAAAAAAAKSB3xoQAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1kZWxldGUtMi1zdGRlcnIudHh0VVQFAANB
QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACUYkSaJz8rYiBgAAzzgAAEoAGAAAAAAAAAAA
AKSB0iEQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1kZWxldGUtZmFp
bHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANBQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgACUYkSfF6N2d9BgAA9zgAAEIAGAAAAAAAAAAAAKSBeCgQAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pZGJvYmplY3RzdG9yZS1kZWxldGUtZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADQULMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlGJElW4W3w6QUAANouAABHABgAAAAAAAAAAACkgXEv
EABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtZ2V0LWZhaWx1cmVzLXBy
aXZhdGUtc3RkZXJyLnR4dFVUBQADQULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlGJEkU
/APXBgYAALIuAAA/ABgAAAAAAAAAAACkgds1EABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRi
b2JqZWN0c3RvcmUtZ2V0LWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAA0JCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAJRiRJ+uhjvyAGAADWOAAAUQAYAAAAAAAAAAAApIFaPBAAc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLXB1dC1hbmQtY2xlYXItZmFpbHVyZXMtcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAANCQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACUYkSZ3m
ydx8BgAA/jgAAEkAGAAAAAAAAAAAAKSBBUMQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJv
YmplY3RzdG9yZS1wdXQtYW5kLWNsZWFyLWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAA0JCzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAJRiRJtoamhIQDAAATEQAATwAYAAAAAAAAAAAApIEEShAA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYnRyYW5zYWN0aW9uLW9iamVjdHN0b3JlLWZhaWx1
cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADQkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AAlGJEl8rk5HGgQAACYUAABHABgAAAAAAAAAAACkgRFOEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vaWRidHJhbnNhY3Rpb24tb2JqZWN0c3RvcmUtZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADQkLM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAApGJEmoFZUFbgEAAL8EAABFABgAAAAAAAAAAACk
gaxSEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRidmVyc2lvbmNoYW5nZWV2ZW50LWNvbnN0
cnVjdG9yLXN0ZGVyci50eHRVVAUAA0NCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAKRiRJ
fT1gOR8IAAB9VgEAMwAYAAAAAAAAAAAApIGZVBAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lu
ZGV4LTEtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANDQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgACkYkSd/0tS4OCQAA9GgBACsAGAAAAAAAAAAAAKSBJV0QAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pbmRleC0xLXN0ZGVyci50eHRVVAUAA0RCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAALRiRJcGRj4LoLAAAubgEAMwAYAAAAAAAAAAAApIGYZhAAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2luZGV4LTItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANFQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAC0YkSUcriU0yDAAApXgBACsAGAAAAAAAAAAAAKSBv3IQAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9pbmRleC0yLXN0ZGVyci50eHRVVAUAA0VCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAALRiRJ9oF11CQGAABISwAAMwAYAAAAAAAAAAAApIFWfxAAc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2luZGV4LTMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANGQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAC0YkSZ8L/NbYBgAAZ1AAACsAGAAAAAAAAAAAAKSB54UQAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9pbmRleC0zLXN0ZGVyci50eHRVVAUAA0ZCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAALRiRJjaNeolwGAABLggAAMwAYAAAAAAAAAAAApIEkjRAAc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2luZGV4LTQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANGQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgADEYkSS4Z0sm5BwAAaZAAACsAGAAAAAAAAAAAAKSB7ZMQAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC00LXN0ZGVyci50eHRVVAUAA0dCzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAMRiRJ8Jn0iK4FAADtIwAAMwAYAAAAAAAAAAAApIELnBAAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LTUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANHQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADEYkSZGsLkK4BQAAFSEAACsAGAAAAAAAAAAAAKSB
JqIQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC01LXN0ZGVyci50eHRVVAUAA0dCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMRiRJUCHPIioHAAAwDQEAOgAYAAAAAAAAAAAApIFD
qBAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWN1cnNvci0xLXByaXZhdGUtc3RkZXJy
LnR4dFVUBQADSELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA1GJEm40lYrpggAAN4UAQAy
ABgAAAAAAAAAAACkgeGvEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtY3Vyc29yLTEt
c3RkZXJyLnR4dFVUBQADSULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA1GJElokgyj0wcA
AKwoAQA6ABgAAAAAAAAAAACkgfO4EABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtY3Vy
c29yLTItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANKQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgADkYkST7/oDHUCAAAiScBADIAGAAAAAAAAAAAAKSBOsEQAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pbmRleC1jdXJzb3ItMi1zdGRlcnIudHh0VVQFAANLQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgADkYkSag12a+lCwAADhICADoAGAAAAAAAAAAAAKSBesoQAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9pbmRleC1jdXJzb3ItMy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA0xCzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAPRiRJ+K38HtYOAADGPgIAMgAYAAAAAAAAAAAApIGT1hAA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWN1cnNvci0zLXN0ZGVyci50eHRVVAUAA01C
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAPRiRJyEcdR+EFAAB6JQAAQQAYAAAAAAAAAAAA
pIHV5RAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNpYy1wcml2
YXRlLXN0ZGVyci50eHRVVAUAA01CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAPRiRJoE+u
blEGAAB2JAAAOQAYAAAAAAAAAAAApIEx7BAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4
LWdldC1jb3VudC1iYXNpYy1zdGRlcnIudHh0VVQFAANNQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAD0YkSVyUvE11BgAAJDQAAEQAGAAAAAAAAAAAAKSB9fIQAHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANO
QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAD0YkSbbpzKEsBwAA6DQAADwAGAAAAAAAAAAA
AKSB6PkQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMt
c3RkZXJyLnR4dFVUBQADTkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA9GJEnwaKIwmQQA
ALQjAAA5ABgAAAAAAAAAAACkgYoBEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1i
YXNpYy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA05CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAAPRiRJHyj+E7MEAACYIwAAMQAYAAAAAAAAAAAApIGWBhEAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2tleXBhdGgtYmFzaWMtc3RkZXJyLnR4dFVUBQADTkLMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIABBGJEkSJWptBQUAAPkhAAAqABgAAAAAAAAAAACkgbQLEQBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vbGVhay0xLXN0ZGVyci50eHRVVAUAA09CzFd1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAAQRiRJ/Zu5sx4IAACAygEAVQAYAAAAAAAAAAAApIEdEREAc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL21lbW9yeS1pbmRleC1ub3QtZGVsZXRlZC13aXRoLW9iamVjdHN0b3JlLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADT0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABBGJEmmxOzEUwgA
AOO5AQBNABgAAAAAAAAAAACkgcoZEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbWVtb3J5LWlu
ZGV4LW5vdC1kZWxldGVkLXdpdGgtb2JqZWN0c3RvcmUtc3RkZXJyLnR4dFVUBQADUELMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIABBGJEmT87c4pQUAAIsmAABCABgAAAAAAAAAAACkgaQiEQBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbmV3LWRhdGFiYXNlLWFmdGVyLXVzZXItZGVsZXRlLXN0
ZGVyci50eHRVVAUAA1BCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAQRiRJAdfZUHwFAAB7
LgAAQgAYAAAAAAAAAAAApIHFKBEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29iamVjdHN0b3Jl
LWF0dHJpYnV0ZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANQQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAEUYkSQlvs0tmBQAAqCsAADoAGAAAAAAAAAAAAKSBvS4RAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9vYmplY3RzdG9yZS1hdHRyaWJ1dGVzLXN0ZGVyci50eHRVVAUAA1FCzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAARRiRJ7AJipG8HAADJigAATwAYAAAAAAAAAAAApIGXNBEA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29iamVjdHN0b3JlLWN1cnNvci1hZHZhbmNlLWZhaWx1
cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADUULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ABFGJEnnfC1hogcAACqOAABHABgAAAAAAAAAAACkgY88EQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UtZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADUULM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABFGJEme8YXqbgcAACeOAABQABgAAAAAAAAAAACk
gbJEEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVl
LWZhaWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADUkLMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIABFGJEmroft+qwcAAGqRAABIABgAAAAAAAAAAACkgapMEQBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vb2JqZWN0c3RvcmUtY3Vyc29yLWNvbnRpbnVlLWZhaWx1cmVzLXN0ZGVyci50eHRV
VAUAA1JCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAARRiRJTYTTuXMGAABHNgAAPwAYAAAA
AAAAAAAApIHXVBEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5jdXJzb3ItZmFpbHVyZXMt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANSQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAEUYk
SVrygR7LBgAArjYAADcAGAAAAAAAAAAAAKSBw1sRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9v
cGVuY3Vyc29yLWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAA1JCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAASRiRJGrPMbZACAAAJCgAARgAYAAAAAAAAAAAApIH/YhEAc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL29wZW5kYXRhYmFzZS1yZXF1ZXN0LWV2ZW50LXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADU0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABJGJEkfjob27QIAAMILAAA+ABgAAAAA
AAAAAACkgQ9mEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb3BlbmRhdGFiYXNlLXJlcXVlc3Qt
ZXZlbnQtc3RkZXJyLnR4dFVUBQADU0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABJGJEnV
n2ErYwEAAP8EAABAABgAAAAAAAAAAACkgXRpEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb3Bl
bmRhdGFiYXNlLXJlcXVlc3QtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANTQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAEkYkSVECOc0vAQAAYwYAADgAGAAAAAAAAAAAAKSBUWsRAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtcmVxdWVzdC1zdGRlcnIudHh0VVQFAANTQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAEkYkSf8dZ2z9AwAAByIAAFQAGAAAAAAAAAAAAKSB
8mwRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2Utc3VjY2Vzcy1hZnRlci12
ZXJzaW9uY2hhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADU0LMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIABJGJEmMVuGOUwQAAFUlAABMABgAAAAAAAAAAACkgX1xEQBzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vb3BlbmRhdGFiYXNlLXN1Y2Nlc3MtYWZ0ZXItdmVyc2lvbmNoYW5nZS1zdGRl
cnIudHh0VVQFAANTQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAEkYkSUNugf9fBAAAkCwA
AEEAGAAAAAAAAAAAAKSBVnYRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2Ut
dmVyc2lvbnMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANTQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAEkYkSXdaV0xpBAAAvikAADkAGAAAAAAAAAAAAKSBMHsRAHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9vcGVuZGF0YWJhc2UtdmVyc2lvbnMtc3RkZXJyLnR4dFVUBQADVELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIABJGJEmpH5m8twQAALYbAAA+ABgAAAAAAAAAAACkgQyAEQBzdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVxdWVzdC1yZWFkeXN0YXRlLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADVELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABJGJEmkAjhP1AQAAKAbAAA2ABgA
AAAAAAAAAACkgTuFEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vcmVxdWVzdC1yZWFkeXN0YXRl
LXN0ZGVyci50eHRVVAUAA1RCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAASRiRJdr1NwxsG
AABuMwAAQwAYAAAAAAAAAAAApIF/ihEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5zYWN0
aW9uLXNjaGVkdWxlci0xLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADVELMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIABJGJEnPDX/nqwYAAGxDAABDABgAAAAAAAAAAACkgReREQBzdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVyLTItcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAANUQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAEkYkSdiYjpmgBgAAB0QAAEMAGAAA
AAAAAAAAAKSBP5gRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbi1zY2hlZHVs
ZXItMy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA1RCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAATRiRJ5LTrnHUGAABnOwAAOwAYAAAAAAAAAAAApIFcnxEAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL3RyYW5zYWN0aW9uLXNjaGVkdWxlci0zLXN0ZGVyci50eHRVVAUAA1VCzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAATRiRJfbbA6jwGAADOZQAAQwAYAAAAAAAAAAAApIFGphEAc3RvcmFn
ZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5zYWN0aW9uLXNjaGVkdWxlci00LXByaXZhdGUtc3RkZXJy
LnR4dFVUBQADVULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABNGJElACgRwnwYAAAxtAAA7
ABgAAAAAAAAAAACkgf+sEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2No
ZWR1bGVyLTQtc3RkZXJyLnR4dFVUBQADVULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABNG
JEn8v232jgYAAAxNAABDABgAAAAAAAAAAACkgRO0EQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
dHJhbnNhY3Rpb24tc2NoZWR1bGVyLTUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANWQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAE0YkSQd1C66bBgAAakIAAEMAGAAAAAAAAAAAAKSBHrsRAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbi1zY2hlZHVsZXItNi1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA1ZCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAURiRJjDK6twoFAADX
LgAASwAYAAAAAAAAAAAApIE2whEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5zYWN0aW9u
cy1zdG9wLW9uLW5hdmlnYXRpb24tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANXQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAFEYkSUD2ey5oBgAA9WAAAEMAGAAAAAAAAAAAAKSBxccRAHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbnMtc3RvcC1vbi1uYXZpZ2F0aW9uLXN0ZGVy
ci50eHRVVAUAA1dCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAURiRJzZP+X7MEAABgMwAA
SwAYAAAAAAAAAAAApIGqzhEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3ZlcnNpb25jaGFuZ2Ut
YWJvcnQtdGhlbi1yZW9wZW4tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANXQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAFEYkSTOMJx0mBQAALDwAAEMAGAAAAAAAAAAAAKSB4tMRAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi92ZXJzaW9uY2hhbmdlLWFib3J0LXRoZW4tcmVvcGVuLXN0ZGVyci50
eHRVVAUAA1dCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAURiRJIUX4mu0EAAA3KQAAPwAY
AAAAAAAAAAAApIGF2REAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3ZlcnNpb25jaGFuZ2UtZXZl
bnQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANYQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
FEYkSQz1pMsjBQAAkCkAADcAGAAAAAAAAAAAAKSB694RAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi92ZXJzaW9uY2hhbmdlLWV2ZW50LXN0ZGVyci50eHRVVAUAA1hCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAURiRJq/f7ajIBAABQBAAANAAYAAAAAAAAAAAApIF/5BEAc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL3dvcmtlcnMtZGlzYWJsZWQtc3RkZXJyLnR4dFVUBQADWELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIABtGJEm9pTB+uAYAAF5kAAA0ABgAAAAAAAAAAACkgR/mEQBzdG9y
YWdlL2luZGV4ZWRkYi9tdXRhdGluZy1jdXJzb3ItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANmQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAHEYkSdOQ6S/NBgAAi2EAACwAGAAAAAAAAAAAAKSB
Re0RAHN0b3JhZ2UvaW5kZXhlZGRiL211dGF0aW5nLWN1cnNvci1zdGRlcnIudHh0VVQFAANnQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAHEYkSd4H22YzBAAA1RUAAEQAGAAAAAAAAAAAAKSB
ePQRAHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdC1sb29rdXBzLWluLXZlcnNpb25jaGFuZ2UtcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAANnQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAHEYkScGr
QtVLBAAA9hYAADwAGAAAAAAAAAAAAKSBKfkRAHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdC1sb29r
dXBzLWluLXZlcnNpb25jaGFuZ2Utc3RkZXJyLnR4dFVUBQADZ0LMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIABxGJEloATxJiAcAAOFrAAA+ABgAAAAAAAAAAACkger9EQBzdG9yYWdlL2luZGV4
ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADaELM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAB1GJEnE9RA6UwcAALllAAA2ABgAAAAAAAAAAACk
geoFEgBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LXN0ZGVyci50
eHRVVAUAA2lCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAdRiRJfcQllHYJAABdjAAANwAY
AAAAAAAAAAAApIGtDRIAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLXByaXZh
dGUtc3RkZXJyLnR4dFVUBQADakLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACBGJElae8y5
BwoAAI+QAAAvABgAAAAAAAAAAACkgZQXEgBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1i
YXNpY3Mtc3RkZXJyLnR4dFVUBQADbELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACBGJEkU
+Kx2kAoAAJmRAAA3ABgAAAAAAAAAAACkgQQiEgBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9y
ZS1iYXNpY3Mtd29ya2Vycy1zdGRlcnIudHh0VVQFAANrQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAIEYkSVQy59cGBwAAnjcAADYAGAAAAAAAAAAAAKSBBS0SAHN0b3JhZ2UvaW5kZXhlZGRi
L29iamVjdHN0b3JlLWNsZWFyLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADbELMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIACFGJEliRu5tOAcAAFc2AAAuABgAAAAAAAAAAACkgXs0EgBzdG9yYWdl
L2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jbGVhci1zdGRlcnIudHh0VVQFAANtQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAIUYkSf85j8G6CAAA/3oBADYAGAAAAAAAAAAAAKSBGzwSAHN0b3Jh
Z2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWNvdW50LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADbkLM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACJGJEk8OTQKcAkAAEWlAQAuABgAAAAAAAAAAACk
gUVFEgBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC1zdGRlcnIudHh0VVQFAANv
QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAJUYkSVPqAtTyDQAA+qsFADcAGAAAAAAAAAAA
AKSBHU8SAHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1wcml2YXRlLXN0ZGVy
ci50eHRVVAUAA3VCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAnRiRJ1ZhTfvcNAACIRgUA
LwAYAAAAAAAAAAAApIGAXRIAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLXN0
ZGVyci50eHRVVAUAA3pCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAoRiRJBSuxWAIHAAAW
RwAAQgAYAAAAAAAAAAAApIHgaxIAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtcmVtb3Zl
b2JqZWN0c3RvcmUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAN7QsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAKEYkSQEt2TxoBwAAgEcAADoAGAAAAAAAAAAAAKSBXnMSAHN0b3JhZ2UvaW5kZXhl
ZGRiL29iamVjdHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLXN0ZGVyci50eHRVVAUAA3tCzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAcRiRJmI+mLD8DAAD2DgAAQwAYAAAAAAAAAAAApIE6exIA
c3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0U3RvcmUtcmVxdWlyZWQtYXJndW1lbnRzLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADZ0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABxGJEmZp3CxnwMA
AOUQAAA7ABgAAAAAAAAAAACkgfZ+EgBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RTdG9yZS1yZXF1
aXJlZC1hcmd1bWVudHMtc3RkZXJyLnR4dFVUBQADaELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAChGJEnK9KqLmggAAF/wAAAwABgAAAAAAAAAAACkgQqDEgBzdG9yYWdlL2luZGV4ZWRkYi9v
ZGQtc3RyaW5ncy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA3tCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAApRiRJHip4+x8EAADHLgAANgAYAAAAAAAAAAAApIEOjBIAc3RvcmFnZS9pbmRleGVk
ZGIvb3Blbi1iYWQtdmVyc2lvbnMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAN9QsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAKUYkSSbECxvIAwAATSAAAC4AGAAAAAAAAAAAAKSBnZASAHN0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tYmFkLXZlcnNpb25zLXN0ZGVyci50eHRVVAUAA35CzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAApRiRJminywJYEAAAGHwAAMAAYAAAAAAAAAAAApIHNlBIAc3Rv
cmFnZS9pbmRleGVkZGIvb3Blbi1jdXJzb3ItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAN+QsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKUYkSSvGIsdPBQAAYSIAACgAGAAAAAAAAAAAAKSBzZkS
AHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLXN0ZGVyci50eHRVVAUAA35CzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAApRiRJWcyACiAGAAD2PAAAPAAYAAAAAAAAAAAApIF+nxIAc3Rv
cmFnZS9pbmRleGVkZGIvb3Blbi1kdXJpbmctdHJhbnNhY3Rpb24tcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAAN+QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKkYkSTBvhiITBgAAAzwAADQAGAAA
AAAAAAAAAKSBFKYSAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tZHVyaW5nLXRyYW5zYWN0aW9uLXN0
ZGVyci50eHRVVAUAA39CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAqRiRJ2VNZ58wEAAAm
NQAAMgAYAAAAAAAAAAAApIGVrBIAc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1vcmRlcmluZy1wcml2
YXRlLXN0ZGVyci50eHRVVAUAA39CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAqRiRJrTgn
AO4EAABZNgAAKgAYAAAAAAAAAAAApIHNsRIAc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1vcmRlcmlu
Zy1zdGRlcnIudHh0VVQFAAN/QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKkYkSVCEA4y7
AwAAZh8AAC8AGAAAAAAAAAAAAKSBH7cSAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tdHdpY2Utd29y
a2Vycy1zdGRlcnIudHh0VVQFAAN/QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKkYkSfiX
f7WZBwAAo4kAADMAGAAAAAAAAAAAAKSBQ7sSAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW5jdXJzb3It
a2V5LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADgELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ACtGJEk1M+qJuQcAAJaTAAArABgAAAAAAAAAAACkgUnDEgBzdG9yYWdlL2luZGV4ZWRkYi9vcGVu
Y3Vyc29yLWtleS1zdGRlcnIudHh0VVQFAAOBQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
K0YkSRFA2dFXCQAAaecAADcAGAAAAAAAAAAAAKSBZ8sSAHN0b3JhZ2UvaW5kZXhlZGRiL29wdGlv
bmFsLWFyZ3VtZW50cy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA4FCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAArRiRJP7Lt86gJAAB94gAALwAYAAAAAAAAAAAApIEv1RIAc3RvcmFnZS9pbmRl
eGVkZGIvb3B0aW9uYWwtYXJndW1lbnRzLXN0ZGVyci50eHRVVAUAA4JCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAsRiRJ1vB4LIAGAABhOgAANQAYAAAAAAAAAAAApIFA3xIAc3RvcmFnZS9p
bmRleGVkZGIvcGVuZGluZy1hY3Rpdml0eS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA4NCzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAsRiRJLJ7Qq+MGAACOPAAALQAYAAAAAAAAAAAApIEv5hIA
c3RvcmFnZS9pbmRleGVkZGIvcGVuZGluZy1hY3Rpdml0eS1zdGRlcnIudHh0VVQFAAOEQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgALEYkSbjX2ckyBwAABT0AADUAGAAAAAAAAAAAAKSBee0S
AHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctYWN0aXZpdHktd29ya2Vycy1zdGRlcnIudHh0VVQF
AAODQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgALUYkSbg2DjjOBAAAPCEAAEMAGAAAAAAA
AAAAAKSBGvUSAHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctdmVyc2lvbi1jaGFuZ2Utb24tZXhp
dC1wcml2YXRlLXN0ZGVyci50eHRVVAUAA4VCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAt
RiRJoTbhSskEAAAhHwAAOwAYAAAAAAAAAAAApIFl+hIAc3RvcmFnZS9pbmRleGVkZGIvcGVuZGlu
Zy12ZXJzaW9uLWNoYW5nZS1vbi1leGl0LXN0ZGVyci50eHRVVAUAA4VCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAtRiRJkfPwlmoEAABqHgAAQQAYAAAAAAAAAAAApIGj/xIAc3RvcmFnZS9p
bmRleGVkZGIvcGVuZGluZy12ZXJzaW9uLWNoYW5nZS1zdHVjay1wcml2YXRlLXN0ZGVyci50eHRV
VAUAA4VCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAtRiRJTD3KeGYEAAB6HgAAOQAYAAAA
AAAAAAAApIGIBBMAc3RvcmFnZS9pbmRleGVkZGIvcGVuZGluZy12ZXJzaW9uLWNoYW5nZS1zdHVj
ay1zdGRlcnIudHh0VVQFAAOGQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgALUYkSWr+tB6S
BAAAZCAAAFYAGAAAAAAAAAAAAKSBYQkTAHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctdmVyc2lv
bi1jaGFuZ2Utc3R1Y2std29ya3Mtd2l0aC10ZXJtaW5hdGUtcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AAOGQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgALUYkSRdD6yTOBAAA0iIAAE4AGAAAAAAA
AAAAAKSBgw4TAHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctdmVyc2lvbi1jaGFuZ2Utc3R1Y2st
d29ya3Mtd2l0aC10ZXJtaW5hdGUtc3RkZXJyLnR4dFVUBQADhkLMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAC5GJElp/PCv/wUAAAZgAAAwABgAAAAAAAAAAACkgdkTEwBzdG9yYWdlL2luZGV4
ZWRkYi9wZXJzaXN0ZW5jZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA4dCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAuRiRJH5NeyAwGAACrXwAAKAAYAAAAAAAAAAAApIFCGhMAc3RvcmFnZS9p
bmRleGVkZGIvcGVyc2lzdGVuY2Utc3RkZXJyLnR4dFVUBQADh0LMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAC5GJEn/4z6sgwcAAJhmAAA7ABgAAAAAAAAAAACkgbAgEwBzdG9yYWdlL2luZGV4
ZWRkYi9wcmVmZXRjaC1idWdmaXgtMTA4MDcxLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADh0LMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAC5GJEmXaGl4owcAAKJkAAAzABgAAAAAAAAAAACkgago
EwBzdG9yYWdlL2luZGV4ZWRkYi9wcmVmZXRjaC1idWdmaXgtMTA4MDcxLXN0ZGVyci50eHRVVAUA
A4dCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAvRiRJp3SITVsSAABg5QYAOgAYAAAAAAAA
AAAApIG4MBMAc3RvcmFnZS9pbmRleGVkZGIvcHJlZmV0Y2gtaW52YWxpZGF0aW9uLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADiULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAC9GJEmBWNsMrxQA
AAlqBwAyABgAAAAAAAAAAACkgYdDEwBzdG9yYWdlL2luZGV4ZWRkYi9wcmVmZXRjaC1pbnZhbGlk
YXRpb24tc3RkZXJyLnR4dFVUBQADikLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADBGJElw
RwORpgYAAPhVAAAyABgAAAAAAAAAAACkgaJYEwBzdG9yYWdlL2luZGV4ZWRkYi9wcmVmZXRjaC1y
YWNlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADi0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ADBGJEnExa1miAYAALZTAAAqABgAAAAAAAAAAACkgbRfEwBzdG9yYWdlL2luZGV4ZWRkYi9wcmVm
ZXRjaC1yYWNlLXN0ZGVyci50eHRVVAUAA4tCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAw
RiRJGlTlHQYGAADgPwAARgAYAAAAAAAAAAAApIGgZhMAc3RvcmFnZS9pbmRleGVkZGIvcHJpbWFy
eS1rZXktdW5pcXVlLXRvLW9iamVjdHN0b3JlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADi0LMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADBGJEny35EaXQYAAFVIAAA+ABgAAAAAAAAAAACkgSZt
EwBzdG9yYWdlL2luZGV4ZWRkYi9wcmltYXJ5LWtleS11bmlxdWUtdG8tb2JqZWN0c3RvcmUtc3Rk
ZXJyLnR4dFVUBQADi0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADBGJEnwivvLwgQAAG8e
AAA0ABgAAAAAAAAAAACkgftzEwBzdG9yYWdlL2luZGV4ZWRkYi9xdWV1ZWQtY29tbWFuZHMtcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAAOLQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAMEYkSUrP
qlOFBQAAfyIAACwAGAAAAAAAAAAAAKSBK3kTAHN0b3JhZ2UvaW5kZXhlZGRiL3F1ZXVlZC1jb21t
YW5kcy1zdGRlcnIudHh0VVQFAAOLQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAMEYkSdOn
3px1BQAALCAAAC0AGAAAAAAAAAAAAKSBFn8TAHN0b3JhZ2UvaW5kZXhlZGRiL3JlYWRvbmx5LXBy
aXZhdGUtc3RkZXJyLnR4dFVUBQADjELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADBGJEni
He7SNAMAAAQPAAA4ABgAAAAAAAAAAACkgfKEEwBzdG9yYWdlL2luZGV4ZWRkYi9yZWFkb25seS1w
cm9wZXJ0aWVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADjELMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIADBGJEnlzoZCpAMAABcRAAAwABgAAAAAAAAAAACkgZiIEwBzdG9yYWdlL2luZGV4ZWRk
Yi9yZWFkb25seS1wcm9wZXJ0aWVzLXN0ZGVyci50eHRVVAUAA4xCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAwRiRJ8T4mB8IFAADKIAAAJQAYAAAAAAAAAAAApIGmjBMAc3RvcmFnZS9pbmRl
eGVkZGIvcmVhZG9ubHktc3RkZXJyLnR4dFVUBQADjELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIADBGJEn0ybTsSQYAADcsAAA7ABgAAAAAAAAAAACkgceSEwBzdG9yYWdlL2luZGV4ZWRkYi9y
ZXF1ZXN0LWNvbnRpbnVlLWFib3J0LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADjELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIADFGJEkgtG6QSwYAAEoqAAAzABgAAAAAAAAAAACkgYWZEwBzdG9y
YWdlL2luZGV4ZWRkYi9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0LXN0ZGVyci50eHRVVAUAA41CzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAxRiRJFxSFhw0GAAA1QAAAPgAYAAAAAAAAAAAApIE9
oBMAc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1ldmVudC1wcm9wYWdhdGlvbi1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA41CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAxRiRJ46kjmRsGAAAP
PwAANgAYAAAAAAAAAAAApIHCphMAc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1ldmVudC1wcm9w
YWdhdGlvbi1zdGRlcnIudHh0VVQFAAONQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAMUYk
SWHhnPbwBQAACSkAADkAGAAAAAAAAAAAAKSBTa0TAHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
cmVzdWx0LWNhY2hlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADjULMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIADFGJEmrQM+6DgYAANcoAAAxABgAAAAAAAAAAACkgbCzEwBzdG9yYWdlL2luZGV4
ZWRkYi9yZXF1ZXN0LXJlc3VsdC1jYWNoZS1zdGRlcnIudHh0VVQFAAOOQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAMUYkSa19g12lBAAAKyAAADgAGAAAAAAAAAAAAKSBKboTAHN0b3JhZ2Uv
aW5kZXhlZGRiL3NldF92ZXJzaW9uX2Jsb2NrZWQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOOQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAMUYkScV74rIdBQAASyMAADAAGAAAAAAAAAAAAKSB
QL8TAHN0b3JhZ2UvaW5kZXhlZGRiL3NldF92ZXJzaW9uX2Jsb2NrZWQtc3RkZXJyLnR4dFVUBQAD
jkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADFGJEmdR0frhwQAAIknAABOABgAAAAAAAAA
AACkgcfEEwBzdG9yYWdlL2luZGV4ZWRkYi9zZXR2ZXJzaW9uLWJsb2NrZWQtYnktdmVyc2lvbmNo
YW5nZS1jbG9zZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA45CzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAxRiRJB+7wkWYEAADOJwAARgAYAAAAAAAAAAAApIHWyRMAc3RvcmFnZS9pbmRleGVk
ZGIvc2V0dmVyc2lvbi1ibG9ja2VkLWJ5LXZlcnNpb25jaGFuZ2UtY2xvc2Utc3RkZXJyLnR4dFVU
BQADjkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADFGJEmnzMDbgwQAAAclAAA7ABgAAAAA
AAAAAACkgbzOEwBzdG9yYWdlL2luZGV4ZWRkYi9zZXR2ZXJzaW9uLW5vdC1ibG9ja2VkLXByaXZh
dGUtc3RkZXJyLnR4dFVUBQADjkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADJGJElK1b+W
ogQAAIolAAAzABgAAAAAAAAAAACkgbTTEwBzdG9yYWdlL2luZGV4ZWRkYi9zZXR2ZXJzaW9uLW5v
dC1ibG9ja2VkLXN0ZGVyci50eHRVVAUAA49CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAy
RiRJwNzqVeAOAAAeXgQANQAYAAAAAAAAAAAApIHD2BMAc3RvcmFnZS9pbmRleGVkZGIvc3RydWN0
dXJlZC1jbG9uZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5BCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAzRiRJ9+E4LGwOAADxaQQALQAYAAAAAAAAAAAApIES6BMAc3RvcmFnZS9pbmRleGVk
ZGIvc3RydWN0dXJlZC1jbG9uZS1zdGRlcnIudHh0VVQFAAOSQsxXdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAM0YkSeV8ZgPEBQAAOiUAAC4AGAAAAAAAAAAAAKSB5fYTAHN0b3JhZ2UvaW5kZXhl
ZGRiL3RyYW5zYWN0aW9uLWFib3J0LXN0ZGVyci50eHRVVAUAA5JCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAA0RiRJCXS+0dMJAAB61AAAPAAYAAAAAAAAAAAApIER/RMAc3RvcmFnZS9pbmRl
eGVkZGIvdHJhbnNhY3Rpb24tYWN0aXZlLWZsYWctcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOTQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgANEYkSQ8a5cGACgAATeMAADQAGAAAAAAAAAAAAKSB
WgcUAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFjdGl2ZS1mbGFnLXN0ZGVyci50eHRV
VAUAA5RCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA0RiRJnR1ICbYFAACkOQAAPAAYAAAA
AAAAAAAApIFIEhQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYWZ0ZXItY2xvc2UtcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAAOUQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgANEYkSTpz
0oHABQAAQzkAADQAGAAAAAAAAAAAAKSBdBgUAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9u
LWFmdGVyLWNsb3NlLXN0ZGVyci50eHRVVAUAA5RCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAA0RiRJswrZsuYGAABxcAAARgAYAAAAAAAAAAAApIGiHhQAc3RvcmFnZS9pbmRleGVkZGIvdHJh
bnNhY3Rpb24tYW5kLW9iamVjdHN0b3JlLWNhbGxzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADlELM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADVGJEl9nnjH7QYAAF9+AAA+ABgAAAAAAAAAAACk
gQgmFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2JqZWN0c3RvcmUtY2FsbHMt
c3RkZXJyLnR4dFVUBQADlULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADVGJEm15t0bQQgA
AGSgAAA3ABgAAAAAAAAAAACkgW0tFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1iYXNp
Y3MtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOVQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
NUYkSfuZ8hylCAAAGqgAAC8AGAAAAAAAAAAAAKSBHzYUAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5z
YWN0aW9uLWJhc2ljcy1zdGRlcnIudHh0VVQFAAOWQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgANUYkSSi8+IQFBQAAzCgAAFcAGAAAAAAAAAAAAKSBLT8UAHN0b3JhZ2UvaW5kZXhlZGRiL3Ry
YW5zYWN0aW9uLWNvbXBsZXRlLXdpdGgtanMtcmVjdXJzaW9uLWNyb3NzLWZyYW1lLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADlkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADVGJEmaI+hPhgUA
AG0oAABPABgAAAAAAAAAAACkgcNEFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1jb21w
bGV0ZS13aXRoLWpzLXJlY3Vyc2lvbi1jcm9zcy1mcmFtZS1zdGRlcnIudHh0VVQFAAOWQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgANUYkSda55V9QBQAAHigAAEsAGAAAAAAAAAAAAKSB0koU
AHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNvbXBsZXRlLXdpdGgtanMtcmVjdXJzaW9u
LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADlkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADVG
JEmKiWBmkgUAAG0oAABDABgAAAAAAAAAAACkgadQFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1jb21wbGV0ZS13aXRoLWpzLXJlY3Vyc2lvbi1zdGRlcnIudHh0VVQFAAOWQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgANkYkSbd/R38cBgAAc1AAAEEAGAAAAAAAAAAAAKSBtlYUAHN0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNvbXBsZXRlLXdvcmtlcnMtcHJpdmF0ZS1zdGRl
cnIudHh0VVQFAAOXQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgANkYkSUa3RkTcBQAAFk4A
ADkAGAAAAAAAAAAAAKSBTV0UAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNvbXBsZXRl
LXdvcmtlcnMtc3RkZXJyLnR4dFVUBQADl0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADZG
JEn/M7bXOwYAAOJLAABOABgAAAAAAAAAAACkgZxjFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1jb29yZGluYXRpb24tYWNyb3NzLWRhdGFiYXNlcy1wcml2YXRlLXN0ZGVyci50eHRVVAUA
A5dCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA2RiRJlERrK1cGAABoTQAARgAYAAAAAAAA
AAAApIFfahQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tY29vcmRpbmF0aW9uLWFjcm9z
cy1kYXRhYmFzZXMtc3RkZXJyLnR4dFVUBQADl0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ADZGJEl5sru5IwYAAE41AABNABgAAAAAAAAAAACkgTZxFABzdG9yYWdlL2luZGV4ZWRkYi90cmFu
c2FjdGlvbi1jb29yZGluYXRpb24td2l0aGluLWRhdGFiYXNlLXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADl0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADZGJEn2NQCMBwEAACUDAAA/ABgAAAAA
AAAAAACkgeB3FABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1jcmFzaC1pbi10YXNrcy1w
cml2YXRlLXN0ZGVyci50eHRVVAUAA5hCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA2RiRJ
EEkdoCUBAAAzBAAANwAYAAAAAAAAAAAApIFgeRQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rp
b24tY3Jhc2gtaW4tdGFza3Mtc3RkZXJyLnR4dFVUBQADmELMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIADZGJEl1mJ92VgQAAOMXAAA/ABgAAAAAAAAAAACkgfZ6FABzdG9yYWdlL2luZGV4ZWRk
Yi90cmFuc2FjdGlvbi1jcmFzaC1vbi1hYm9ydC1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5hCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA3RiRJSM89g3gEAAAgGAAANwAYAAAAAAAAAAAApIHF
fxQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tY3Jhc2gtb24tYWJvcnQtc3RkZXJyLnR4
dFVUBQADmULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADdGJElfq5xPKQcAAGteAAA2ABgA
AAAAAAAAAACkga6EFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1lcnJvci1wcml2YXRl
LXN0ZGVyci50eHRVVAUAA5lCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA3RiRJ1uIkXHsH
AACxXAAALgAYAAAAAAAAAAAApIFHjBQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tZXJy
b3Itc3RkZXJyLnR4dFVUBQADmULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADdGJEmaecBf
8QUAAF00AABCABgAAAAAAAAAAACkgSqUFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1l
dmVudC1wcm9wYWdhdGlvbi1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5lCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAA3RiRJYl/BU/UFAAAIMwAAOgAYAAAAAAAAAAAApIGXmhQAc3RvcmFnZS9p
bmRleGVkZGIvdHJhbnNhY3Rpb24tZXZlbnQtcHJvcGFnYXRpb24tc3RkZXJyLnR4dFVUBQADmkLM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADdGJEn/NemzagUAADYvAAA5ABgAAAAAAAAAAACk
gQChFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1vcmRlcmluZy1wcml2YXRlLXN0ZGVy
ci50eHRVVAUAA5pCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA3RiRJVbZPP5oFAADyLgAA
MQAYAAAAAAAAAAAApIHdphQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tb3JkZXJpbmct
c3RkZXJyLnR4dFVUBQADmkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADdGJEnkTk29FQYA
AJwzAAA8ABgAAAAAAAAAAACkgeKsFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1vdmVy
bGFwcGluZy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5pCzFd1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAA3RiRJ3gx0vFYGAAC9SgAANAAYAAAAAAAAAAAApIFtsxQAc3RvcmFnZS9pbmRleGVkZGIv
dHJhbnNhY3Rpb24tb3ZlcmxhcHBpbmctc3RkZXJyLnR4dFVUBQADmkLMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIADdGJElXG9jaCQYAAAczAAA6ABgAAAAAAAAAAACkgTG6FABzdG9yYWdlL2lu
ZGV4ZWRkYi90cmFuc2FjdGlvbi1yZWFkLW9ubHktcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOaQsxX
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOEYkSbOOLS2CBgAADTkAADIAGAAAAAAAAAAAAKSB
rsAUAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJlYWQtb25seS1zdGRlcnIudHh0VVQF
AAObQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOEYkSf/LUbv9BQAAOUIAAEQAGAAAAAAA
AAAAAKSBnMcUAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJlYWR3cml0ZS1leGNsdXNp
dmUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAObQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
OEYkSfvHzJseBgAAk0IAADwAGAAAAAAAAAAAAKSBF84UAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5z
YWN0aW9uLXJlYWR3cml0ZS1leGNsdXNpdmUtc3RkZXJyLnR4dFVUBQADm0LMV3V4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIADhGJEkUU7FobAYAALswAAA5ABgAAAAAAAAAAACkgavUFABzdG9yYWdl
L2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yb2xsYmFjay1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5tC
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA4RiRJt4K+TbkGAAC0MAAAMQAYAAAAAAAAAAAA
pIGK2xQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stc3RkZXJyLnR4dFVU
BQADm0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADhGJElFhsCoBwYAAPtFAABBABgAAAAA
AAAAAACkga7iFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1zY29wZS1zZXF1ZW5jaW5n
LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADnELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADhG
JEm4+lRK1gUAAP0/AAA5ABgAAAAAAAAAAACkgTDpFABzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2Fj
dGlvbi1zY29wZS1zZXF1ZW5jaW5nLXN0ZGVyci50eHRVVAUAA5xCzFd1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAA4RiRJvf4h6/cCAACVDQAARAAYAAAAAAAAAAAApIF57xQAc3RvcmFnZS9pbmRl
eGVkZGIvdHJhbnNhY3Rpb24tc3RvcmVOYW1lcy1yZXF1aXJlZC1wcml2YXRlLXN0ZGVyci50eHRV
VAUAA5xCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA4RiRJ/IakdncDAAAhEAAAPAAYAAAA
AAAAAAAApIHu8hQAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tc3RvcmVOYW1lcy1yZXF1
aXJlZC1zdGRlcnIudHh0VVQFAAOcQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOEYkSZve
OLqMBAAA8yAAAD4AGAAAAAAAAAAAAKSB2/YUAHN0b3JhZ2UvaW5kZXhlZGRiL3VuYmxvY2tlZC12
ZXJzaW9uLWNoYW5nZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOcQsxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAOEYkSetB0UayBAAAPiEAADYAGAAAAAAAAAAAAKSB3/sUAHN0b3JhZ2UvaW5k
ZXhlZGRiL3VuYmxvY2tlZC12ZXJzaW9uLWNoYW5nZXMtc3RkZXJyLnR4dFVUBQADnELMV3V4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIADlGJEmpri24EQEAAMEDAAAtABgAAAAAAAAAAACkgQEBFQBz
dG9yYWdlL2luZGV4ZWRkYi91bnByZWZpeC1wcml2YXRlLXN0ZGVyci50eHRVVAUAA51CzFd1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAA5RiRJm3GY9HgEAAAXFwAANAAYAAAAAAAAAAAApIF5AhUA
c3RvcmFnZS9pbmRleGVkZGIvdmFsdWUtdW5kZWZpbmVkLXByaXZhdGUtc3RkZXJyLnR4dFVUBQAD
nULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADlGJEl1STZZZAUAAIYcAAAsABgAAAAAAAAA
AACkgV8HFQBzdG9yYWdlL2luZGV4ZWRkYi92YWx1ZS11bmRlZmluZWQtc3RkZXJyLnR4dFVUBQAD
nULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADlGJEme9FscOQUAAKAtAAA1ABgAAAAAAAAA
AACkgSkNFQBzdG9yYWdlL2luZGV4ZWRkYi92YWx1ZXMtb2RkLXR5cGVzLXByaXZhdGUtc3RkZXJy
LnR4dFVUBQADnULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADlGJElA+c73sQUAAKwvAAAt
ABgAAAAAAAAAAACkgdESFQBzdG9yYWdlL2luZGV4ZWRkYi92YWx1ZXMtb2RkLXR5cGVzLXN0ZGVy
ci50eHRVVAUAA55CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA5RiRJoFD+840FAADsLAAA
OQAYAAAAAAAAAAAApIHpGBUAc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtYWJvcnQt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOeQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOUYk
SZojbq1jBQAAyCwAADEAGAAAAAAAAAAAAKSB6R4VAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24t
Y2hhbmdlLWFib3J0LXN0ZGVyci50eHRVVAUAA55CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAA5RiRJ82JR1NoCAAAAGgAAPwAYAAAAAAAAAAAApIG3JBUAc3RvcmFnZS9pbmRleGVkZGIvdmVy
c2lvbi1jaGFuZ2UtZXZlbnQtYmFzaWMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOeQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAOUYkSZEqbiS3AwAAwCUAADcAGAAAAAAAAAAAAKSBCigVAHN0
b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV2ZW50LWJhc2ljLXN0ZGVyci50eHRVVAUA
A55CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA5RiRJ/ZJaeoIFAADpLwAAOQAYAAAAAAAA
AAAApIEyLBUAc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXZlbnQtcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAOeQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOUYkSZOZWe8IBQAA
SygAADEAGAAAAAAAAAAAAKSBJzIVAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV2
ZW50LXN0ZGVyci50eHRVVAUAA55CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA6RiRJ3/wl
GCwFAACROAAAPQAYAAAAAAAAAAAApIGaNxUAc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFu
Z2UtZXhjbHVzaXZlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADn0LMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIADpGJEmfOdGzOwUAABk6AAA1ABgAAAAAAAAAAACkgT09FQBzdG9yYWdlL2luZGV4
ZWRkYi92ZXJzaW9uLWNoYW5nZS1leGNsdXNpdmUtc3RkZXJyLnR4dFVUBQADn0LMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIADpGJEmsiZyIpAMAAHkTAABJABgAAAAAAAAAAACkgedCFQBzdG9y
YWdlL2luZGV4ZWRkYi92ZXJzaW9uY2hhbmdlcmVxdWVzdC1hY3RpdmVkb21vYmplY3QtcHJpdmF0
ZS1zdGRlcnIudHh0VVQFAAOgQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAOkYkSe0X77Tf
AwAAAxQAAEEAGAAAAAAAAAAAAKSBDkcVAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb25jaGFuZ2Vy
ZXF1ZXN0LWFjdGl2ZWRvbW9iamVjdC1zdGRlcnIudHh0VVQFAAOgQsxXdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAA70UkSQAAAAAAAAAAAAAAAA8AGAAAAAAAAAAQAO1BaEsVAHN0b3JhZ2Uvd2Vi
c3FsL1VUBQADEkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOhFJEko2Xk2sAAAAO4AAAAt
ABgAAAAAAAEAAACkgbFLFQBzdG9yYWdlL3dlYnNxbC9hbHRlci10by1pbmZvLXRhYmxlLXN0ZGVy
ci50eHRVVAUAAwNCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADoRSRJKNl5NrAAAADuAAAA
NQAYAAAAAAABAAAApIHITBUAc3RvcmFnZS93ZWJzcWwvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLXN0ZGVyci50eHRVVAUAAwNCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADoRSRJKNl5
NrAAAADuAAAARgAYAAAAAAABAAAApIHnTRUAc3RvcmFnZS93ZWJzcWwvY2hhbmdlLXZlcnNpb24t
bm8tY3Jhc2gtb24tcHJlZmxpZ2h0LWZhaWx1cmUtc3RkZXJyLnR4dFVUBQADBELMV3V4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAOhFJEnH76jOugAAALgDAAAoABgAAAAAAAEAAACkgRdPFQBzdG9y
YWdlL3dlYnNxbC9jaGFuZ2UtdmVyc2lvbi1zdGRlcnIudHh0VVQFAAMEQsxXdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgA6UUkSSjZeTawAAAA7gAAADIAGAAAAAAAAQAAAKSBM1AVAHN0b3JhZ2Uv
d2Vic3FsL2Nsb3NlLWR1cmluZy1zdHJlc3MtdGVzdC1zdGRlcnIudHh0VVQFAAMFQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA6UUkSYbfZ3+2AAAA3AEAADQAGAAAAAAAAQAAAKSBT1EVAHN0
b3JhZ2Uvd2Vic3FsL2RhdGFiYXNlLWxvY2stYWZ0ZXItcmVsb2FkLXN0ZGVyci50eHRVVAUAAwVC
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADpRSRJKNl5NrAAAADuAAAAKQAYAAAAAAABAAAA
pIFzUhUAc3RvcmFnZS93ZWJzcWwvZW1wdHktc3RhdGVtZW50LXN0ZGVyci50eHRVVAUAAwZCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADpRSRJKNl5NrAAAADuAAAAKgAYAAAAAAABAAAApIGG
UxUAc3RvcmFnZS93ZWJzcWwvZXhlY3V0ZS1zcWwtYXJncy1zdGRlcnIudHh0VVQFAAMGQsxXdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6UUkSSjZeTawAAAA7gAAADIAGAAAAAAAAQAAAKSBmlQV
AHN0b3JhZ2Uvd2Vic3FsL2V4ZWN1dGUtc3FsLXJvd3NBZmZlY3RlZC1zdGRlcnIudHh0VVQFAAMG
QsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6kUkSSjZeTawAAAA7gAAAD8AGAAAAAAAAQAA
AKSBtlUVAHN0b3JhZ2Uvd2Vic3FsL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1l
bnQtc3RkZXJyLnR4dFVUBQADB0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOtFJEko2Xk2
sAAAAO4AAAAuABgAAAAAAAEAAACkgd9WFQBzdG9yYWdlL3dlYnNxbC9oYXNoLWNoYW5nZS13aXRo
LXhoci1zdGRlcnIudHh0VVQFAAMJQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA60UkSYbf
Z3+2AAAA3AEAAD8AGAAAAAAAAQAAAKSB91cVAHN0b3JhZ2Uvd2Vic3FsL211bHRpcGxlLWRhdGFi
YXNlcy1nYXJiYWdlLWNvbGxlY3Rpb24tc3RkZXJyLnR4dFVUBQADCULMV3V4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAOtFJElE6lbWuQAAAMoCAABEABgAAAAAAAEAAACkgSZZFQBzdG9yYWdlL3dl
YnNxbC9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3RkZXJyLnR4
dFVUBQADCULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOtFJEko2Xk2sAAAAO4AAAAvABgA
AAAAAAEAAACkgV1aFQBzdG9yYWdlL3dlYnNxbC9tdWx0aXBsZS10cmFuc2FjdGlvbnMtc3RkZXJy
LnR4dFVUBQADCkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOtFJEko2Xk2sAAAAO4AAAAo
ABgAAAAAAAEAAACkgXZbFQBzdG9yYWdlL3dlYnNxbC9udWxsLWNhbGxiYWNrcy1zdGRlcnIudHh0
VVQFAAMKQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA60UkSYbfZ3+2AAAA3AEAAEgAGAAA
AAAAAQAAAKSBiFwVAHN0b3JhZ2Uvd2Vic3FsL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJh
Y2staXNvbGF0ZWQtd29ybGQtc3RkZXJyLnR4dFVUBQADCkLMV3V4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAOtFJEnH76jOugAAALgDAAA5ABgAAAAAAAEAAACkgcBdFQBzdG9yYWdlL3dlYnNxbC9v
cGVuLWRhdGFiYXNlLWNyZWF0aW9uLWNhbGxiYWNrLXN0ZGVyci50eHRVVAUAAwpCzFd1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADsRSRJKNl5NrAAAADuAAAANQAYAAAAAAABAAAApIHtXhUAc3Rv
cmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN0ZGVyci50eHRVVAUAAwtC
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADsRSRJKNl5NrAAAADuAAAANAAYAAAAAAABAAAA
pIEMYBUAc3RvcmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1leHBhbmQtcXVvdGEtc3RkZXJyLnR4
dFVUBQADC0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOxFJEmG32d/tgAAANwBAAA5ABgA
AAAAAAEAAACkgSphFQBzdG9yYWdlL3dlYnNxbC9vcGVuLWRhdGFiYXNlLXNldC1lbXB0eS12ZXJz
aW9uLXN0ZGVyci50eHRVVAUAAwtCzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADsRSRJht9n
f7YAAADcAQAARQAYAAAAAAABAAAApIFTYhUAc3RvcmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS13
aGlsZS10cmFuc2FjdGlvbi1pbi1wcm9ncmVzcy1zdGRlcnIudHh0VVQFAAMMQsxXdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgA7EUkSSjZeTawAAAA7gAAADkAGAAAAAAAAQAAAKSBiGMVAHN0b3Jh
Z2Uvd2Vic3FsL3ByaXZhdGUtYnJvd3Npbmctbm9yZWFkLW5vd3JpdGUtc3RkZXJyLnR4dFVUBQAD
DELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO1FJElE6lbWuQAAAMoCAABHABgAAAAAAAEA
AACkgatkFQBzdG9yYWdlL3dlYnNxbC9yZWFkLWFuZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1y
dW4tdG9nZXRoZXItc3RkZXJyLnR4dFVUBQADDULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AO1FJEmG32d/tgAAANwBAABAABgAAAAAAAEAAACkgeVlFQBzdG9yYWdlL3dlYnNxbC9yZWFkLXRy
YW5zYWN0aW9ucy1ydW5uaW5nLWNvbmN1cnJlbnRseS1zdGRlcnIudHh0VVQFAAMNQsxXdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA7UUkSSjZeTawAAAA7gAAACgAGAAAAAAAAQAAAKSBFWcVAHN0
b3JhZ2Uvd2Vic3FsL3NxbC1kYXRhLXR5cGVzLXN0ZGVyci50eHRVVAUAAw1CzFd1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACADtRSRJht9nf7YAAADcAQAAQQAYAAAAAAABAAAApIEnaBUAc3RvcmFn
ZS93ZWJzcWwvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50
eHRVVAUAAw5CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADtRSRJKNl5NrAAAADuAAAAMgAY
AAAAAAABAAAApIFYaRUAc3RvcmFnZS93ZWJzcWwvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLXN0
ZGVyci50eHRVVAUAAw5CzFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADtRSRJht9nf7YAAADc
AQAAQwAYAAAAAAABAAAApIF0ahUAc3RvcmFnZS93ZWJzcWwvc3RhdGVtZW50LXN1Y2Nlc3MtY2Fs
bGJhY2staXNvbGF0ZWQtd29ybGQtc3RkZXJyLnR4dFVUBQADDkLMV3V4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAO5FJEko2Xk2sAAAAO4AAAAqABgAAAAAAAEAAACkgadrFQBzdG9yYWdlL3dlYnNx
bC9zdWNjZXNzLWNhbGxiYWNrLXN0ZGVyci50eHRVVAUAAw9CzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACADuRSRJKNl5NrAAAADuAAAAQwAYAAAAAAABAAAApIG7bBUAc3RvcmFnZS93ZWJzcWwv
c3VjY2Vzcy1jYWxsYmFjay13aGVuLXBhZ2UtZGVmZXJzLWxvYWRpbmctc3RkZXJyLnR4dFVUBQAD
D0LMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO5FJEko2Xk2sAAAAO4AAAApABgAAAAAAAEA
AACkgehtFQBzdG9yYWdlL3dlYnNxbC90ZXN0LWF1dGhvcml6ZXItc3RkZXJyLnR4dFVUBQADEELM
V3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO5FJEko2Xk2sAAAAO4AAAA+ABgAAAAAAAEAAACk
gftuFQBzdG9yYWdlL3dlYnNxbC90cmFuc2FjdGlvbi1jYWxsYmFjay1leGNlcHRpb24tY3Jhc2gt
c3RkZXJyLnR4dFVUBQADEELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO5FJEmG32d/tgAA
ANwBAAA9ABgAAAAAAAEAAACkgSNwFQBzdG9yYWdlL3dlYnNxbC90cmFuc2FjdGlvbi1jYWxsYmFj
ay1pc29sYXRlZC13b3JsZC1zdGRlcnIudHh0VVQFAAMQQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA70UkSYbfZ3+2AAAA3AEAAEMAGAAAAAAAAQAAAKSBUHEVAHN0b3JhZ2Uvd2Vic3FsL3Ry
YW5zYWN0aW9uLWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAUAAxFC
zFd1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADvRSRJKNl5NrAAAADuAAAANAAYAAAAAAABAAAA
pIGDchUAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2stc3RkZXJyLnR4
dFVUBQADEULMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO9FJEko2Xk2sAAAAO4AAAAvABgA
AAAAAAEAAACkgaFzFQBzdG9yYWdlL3dlYnNxbC90cmFuc2FjdGlvbi1wcm90b3R5cGUtc3RkZXJy
LnR4dFVUBQADEkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO9FJEmG32d/tgAAANwBAABF
ABgAAAAAAAEAAACkgbp0FQBzdG9yYWdlL3dlYnNxbC90cmFuc2FjdGlvbi1zdWNjZXNzLWNhbGxi
YWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAUAAxJCzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAAAuRiRJAAAAAAAAAAAAAAAABAAYAAAAAAAAABAA7UHvdRUAc3ZnL1VUBQADiELMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAC5GJEkAAAAAAAAAAAAAAAALABgAAAAAAAAAEADtQS12
FQBzdmcvY3VzdG9tL1VUBQADiELMV3V4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAC5GJEll3pgc
fQAAAI0AAAAkABgAAAAAAAEAAACkgXJ2FQBzdmcvY3VzdG9tL3plcm8tZGFzaGFycmF5LXN0ZGVy
ci50eHRVVAUAA4hCzFd1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAD9RSRJAAAAAAAAAAAAAAAA
CwAYAAAAAAAAABAA7UFNdxUAc3ZnL3N0cm9rZS9VVAUAAy5CzFd1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAD9RSRJOKfHnX4AAACNAAAAJQAYAAAAAAABAAAApIGSdxUAc3ZnL3N0cm9rZS96ZXJv
LXdpZHRoLWhhbmctc3RkZXJyLnR4dFVUBQADLkLMV3V4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
ADdGJEkAAAAAAAAAAAAAAAAGABgAAAAAAAAAEADtQW94FQB3ZWJnbC9VVAUAA5lCzFd1eAsAAQT1
AQAABBQAAABQSwECHgMKAAAAAAA3RiRJAAAAAAAAAAAAAAAADAAYAAAAAAAAABAA7UGveBUAd2Vi
Z2wvMS4wLjIvVVQFAAOZQsxXdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAN0YkSQAAAAAAAAAA
AAAAABgAGAAAAAAAAAAQAO1B9XgVAHdlYmdsLzEuMC4yL2NvbmZvcm1hbmNlL1VUBQADmULMV3V4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAADdGJEkAAAAAAAAAAAAAAAAhABgAAAAAAAAAEADtQUd5
FQB3ZWJnbC8xLjAuMi9jb25mb3JtYW5jZS90ZXh0dXJlcy9VVAUAA5lCzFd1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAA3RiRJVS2jJHYAAAB0AQAAOAAYAAAAAAABAAAApIGieRUAd2ViZ2wvMS4w
LjIvY29uZm9ybWFuY2UvdGV4dHVyZXMvdGV4dHVyZS1ucG90LXN0ZGVyci50eHRVVAUAA5lCzFd1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABbRiRJv/0634G3AQAE8ywAGQAYAAAAAAABAAAApIGK
ehUAd3B0d2tfcHJvY2Vzc19sb2cub3V0LnR4dFVUBQAD3ULMV3V4CwABBPUBAAAEFAAAAFBLBQYA
AAAAngKeAp5NAQBeMhcAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288034</attachid>
            <date>2016-09-06 11:14:22 -0700</date>
            <delta_ts>2016-09-06 12:21:04 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>847975</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxNSBA
QAorMjAxNi0wOS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZpYSBU
aHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGF0J3MgbmV3PzoKKyAgICAgICAgMS4gQWxsIGNhbGxzIHRvIGNs
ZWFyRXhjZXB0aW9uKCkgbXVzdCBnbyB0aHJvdWdoIGEgQ2F0Y2hTY29wZS4KKyAgICAgICAgMi4g
QWxsIGNhbGxzIHRvIGdldCB0aGUgYW55IHBlbmRpbmcgZXhjZXB0aW9uIG11c3QgZ28gdGhyb3Vn
aCBUaHJvd1Njb3BlOjpleGNlcHRpb24oKQorICAgICAgICAgICBvciBDYXRjaFNjb3BlOjpleGNl
cHRpb24oKS4KKyAgICAgICAgMy4gVGhyb3dTY29wZSBhbmQgQ2F0Y2hTY29wZSBhcmUgbm93IHN1
Yi1jbGFzc2VzIG9mIEV4Y2VwdGlvblNjb3BlLiAgVGhpcyBpcyBuZWVkZWQKKyAgICAgICAgICAg
YmVjYXVzZSBUaHJvd1Njb3BlIGFsc28gbmVlZHMgdG8gYmUgYXdhcmUgb2YgQ2F0Y2hTY29wZXMg
dGhhdCBlbmNsb3NlIGl0LCBzbworICAgICAgICAgICBhcyB0byBiZSBhYmxlIHRvIGRldGVybWlu
ZSB3aGV0aGVyIGl0IG5lZWRzIHRvIHNpbXVsYXRlIGEgcmUtdGhyb3cgb3Igbm90LgorICAgICAg
ICA0LiBSZW5hbWVkIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pIHRvIEVOQUJMRShF
WENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKS4KKworICAgICAgICAqIEFQSS9BUElVdGlscy5o
OgorICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAg
KERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6CisgICAgICAgICogYmluZGlu
Z3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWU6OnRv
U3RyaW5nKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdp
dGhTY29wZUV4dGVuc2lvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6OnZpc2l0RXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL0pT
R2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
OkpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAo
SW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OndlYWtNYXBFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6OndlYWtTZXRFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW50cmllcyk6CisgICAgICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJj
ZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FjaGVk
Q2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRDYWxsKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjbGVh
ckV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXhjZXB0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoYWRFeGNlcHRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Omxhc3RFeGNlcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyTGFzdEV4Y2VwdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFs
KToKKyAgICAgICAgKEpTQzo6c2l6ZU9mVmFyYXJncyk6CisgICAgICAgIChKU0M6Om5vdGlmeURl
YnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0
Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNj
b3BlOjpTdXNwZW5kRXhjZXB0aW9uU2NvcGUpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0
YWNrKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkpJVENvZGU6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2VuZXJpY1Vud2luZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKFdURjo6
SW1wdXJlR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2gpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVFbGVtZW50KToKKyAgICAgICAgKGZ1
bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0
aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRTdHJpbmcpOgorICAgICAgICAoZnVuY3Rp
b25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1
bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRNb2R1bGUpOgorICAg
ICAgICAoZnVuY3Rpb25DcmVhdGVCdWlsdGluKToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tNb2R1
bGVTeW50YXgpOgorICAgICAgICAoZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChmdW5jdGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyk6CisgICAgICAgIChkdW1w
RXhjZXB0aW9uKToKKyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAo
cnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIGxs
aW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Ub1Ro
cm93KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNhbGxUb1Rocm93KToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNl
UHJvcGVydGllcyk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpDb21waWxhdGlvbjo6dG9KUyk6CisgICAgICAgICog
cHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpE
YXRhYmFzZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5j
cHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0U2l0ZTo6dG9KUyk6CisgICAgICAg
ICogcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpPcmlnaW5TdGFjazo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWNpZXNDb25zdHJ1Y3RBcnJheSk6CisgICAgICAgIChK
U0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAgICAgICAoSlNDOjpmYXN0Sm9p
bik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNoKToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2UpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSW5kZXhPZik6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpt
b3ZlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpjb25jYXRBcHBlbmRPbmUpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHkpOgorICAgICAgICAqIHJ1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEJv
b2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpDYXRjaFNjb3BlOjpDYXRjaFNjb3BlKToKKyAgICAgICAgKEpTQzo6
Q2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2F0Y2hTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2F0Y2hTY29wZTo6Y2xlYXJFeGNlcHRpb24pOgorICAg
ICAgICAoSlNDOjpDYXRjaFNjb3BlOjpDYXRjaFNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAg
ICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93
UGF0aHM6Om9wSW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6aW50ZXJwcmV0ZXJUaHJvd0lu
Q2FsbGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlND
OjpldmFsdWF0ZSk6CisgICAgICAgIChKU0M6OnJlamVjdFByb21pc2UpOgorICAgICAgICAoSlND
Ojpsb2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAg
ICAgICAgKiBydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjb25zb2xl
UHJvdG9GdW5jQXNzZXJ0KToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Byb2ZpbGUp
OgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZCk6CisgICAgICAgIChK
U0M6OmNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6Y29u
c29sZVByb3RvRnVuY1RpbWUpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZUVu
ZCk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Q
cmltaXRpdmVTeW1ib2wpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0
aXplZFRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9F
eGNlcHRpb25FdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24u
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxv
Y2F0aW9uLmguCisgICAgICAgIChKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb246OkV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24pOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlTG9jYXRpb246OlRocm93
U2NvcGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6RXhjZXB0aW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpFeGNlcHRpb25TY29wZTo6fkV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6RXhjZXB0
aW9uU2NvcGU6OmxvZ0V2ZW50KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OmxvZ0V2
ZW50SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6dm0pOgorICAgICAgICAoSlNDOjpFeGNlcHRp
b25TY29wZTo6ZGVwdGgpOgorICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6ZXhjZXB0aW9u
KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OkV4Y2VwdGlvblNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVjayk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5j
QmluZCk6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEdldHRl
cik6CisgICAgICAgICogcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjppbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2cpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1l
L0ludGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6
ZUNvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpjcmVhdGVDb2xsYXRvcik6
CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAg
KiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SW50bENvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0
b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRv
clByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvckZ1bmNDb21wYXJlKToK
KyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFyZSk6CisgICAg
ICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjp0b0Rh
dGVUaW1lT3B0aW9uc0FueURhdGUpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXQ6
OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZv
cm1hdDo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0
Ojpmb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQpOgorICAg
ICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVUaW1lKToK
KyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6
SW50bE51bWJlckZvcm1hdDo6Y3JlYXRlTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50
bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL0ludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEludGxO
dW1iZXJGb3JtYXQpOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JG
dW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1h
dE51bWJlcik6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJG
b3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OmludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAgKEpTQzo6aW50bFN0cmluZ09wdGlvbik6Cisg
ICAgICAgIChKU0M6OmludGxOdW1iZXJPcHRpb24pOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxp
emVMb2NhbGVMaXN0KToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAg
ICogcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJ
bnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3Rvcik6CisgICAg
ICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjppdGVy
YXRvck5leHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclN0ZXApOgorICAgICAgICAoSlNDOjpp
dGVyYXRvckNsb3NlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JGb3JJdGVyYWJsZSk6CisgICAg
ICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Zm9yRWFj
aEluSXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlC
dWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Z2V0TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6dG9MZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6dG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
ZXF1YWxTbG93Q2FzZUlubGluZSk6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0RGF0YSk6CisgICAgICAgIChKU0M6OnNldERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0
SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3RnJvbUl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3V2l0aEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBl
ZEFycmF5Vmlldyk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpzcGVjaWVzQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZik6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4pOgorICAgICAgICAo
SlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAg
IChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpT
Qzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RF
bXB0eUFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZCk6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToK
KyAgICAgICAgKiBydW50aW1lL0pTSm9iLmNwcDoKKyAgICAgICAgKEpTQzo6SlNKb2JNaWNyb3Rh
c2s6OnJ1bik6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1
bGVMb2FkZXI6OmZldGNoKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6CisgICAg
ICAgIChKU0M6OkpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0aW9ucyk6CisgICAg
ICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6Cisg
ICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdp
Zmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVy
OjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fs
ayk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1bmNQYXJzZSk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om9yZGluYXJ5U2V0U2xvdyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayk6CisgICAgICAgIChK
U0M6OmNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om9y
ZGluYXJ5VG9QcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6dG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRNZXRob2QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFByb21p
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OnByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAg
KEpTQzo6aXNVbnNjb3BhYmxlKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpl
cXVhbFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmpvaW4pOgorICAgICAgICAqIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojpw
YXJzZSk6CisgICAgICAgICogcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE1hcCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NsejMyKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3Rv
RnVuY0h5cG90KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0lNdWwpOgorICAgICAgICAq
IHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxl
TG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQ
cm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJv
dG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVy
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RPYmplY3QpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JT
ZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eVN5bWJvbHMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgor
ICAgICAgICAoSlNDOjpvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKToKKyAgICAgICAgKEpTQzo6
dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckRl
ZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yU2VhbCk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0
cnVjdG9yRnJlZXplKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZCk6
CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6Om93blByb3Bl
cnR5S2V5cyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3Rv
RnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQcm90
b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3Rv
RnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3BlcnR5
SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
UHJveHlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om1ha2VSZXZvY2FibGVQcm94eSk6
CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5
T2JqZWN0Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJveHlHZXQpOgor
ICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUdldCk6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQ
cm94eU9iamVjdDo6cGVyZm9ybVB1dCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXRC
eUluZGV4Q29tbW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAg
IChKU0M6OnBlcmZvcm1Qcm94eUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0
OjpwZXJmb3JtRGVsZXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRl
bnNpYmxlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKToK
KyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmpl
Y3RDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0KToKKyAgICAgICAgKEpTQzo6cmVmbGVj
dE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnJlZmxlY3RP
YmplY3RJc0V4dGVuc2libGUpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0UHJldmVudEV4
dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0U2V0KToKKyAgICAgICAgKEpT
Qzo6cmVmbGVjdE9iamVjdFNldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6dG9GbGFncyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cENyZWF0ZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjppc1JlZ0V4cCk6
CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjb2xs
ZWN0TWF0Y2hlcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6bWF0Y2hHbG9iYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6OmZsYWdzU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpyZWdFeHBQ
cm90b0dldHRlckZsYWdzKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFz
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgICog
cnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFNldCk6
CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OnN0cmluZ0Zyb21Db2RlUG9pbnQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5n
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdF
eHBTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNl
UmVnRXhwRW1wdHlTdHIpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gp
OgorICAgICAgICAoSlNDOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVVzaW5nUmVnRXhwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFj
ZVVzaW5nU3RyaW5nU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ29kZVBv
aW50QXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOgorICAgICAgICAoSlND
Ojp0b0xvY2FsZUNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCaWcpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbWFsbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JsaW5rKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQm9sZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZpeGVkKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jSXRhbGljcyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0cmlrZSk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1Yik6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1N1cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcik6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jQW5jaG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6
CisgICAgICAgIChKU0M6OnRyaW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdJbmNsdWRlc0ltcGwpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNJbmNsdWRlcyk6CisgICAgICAgIChKU0M6OmJ1aWx0aW5TdHJpbmdJbmNsdWRlc0lu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTm9ybWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6c3ltYm9s
Q29uc3RydWN0b3JGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHA6
CisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL1Rocm93U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3Bl
OjpUaHJvd1Njb3BlKToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgor
ICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6
OlRocm93U2NvcGU6OnByaW50SWZOZWVkQ2hlY2spOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3Bl
OjpzaW11bGF0ZVRocm93KToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6dmVyaWZ5RXhjZXB0
aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGhy
b3dTY29wZS5oOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjpyZWxlYXNlKToKKyAgICAgICAg
KEpTQzo6VGhyb3dTY29wZTo6VGhyb3dTY29wZSk6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6
OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6dm0pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjpleGNlcHRpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJ
c1NhdGlzZmllZCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6
ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyRXhjZXB0aW9uKToKKyAgICAgICAg
KEpTQzo6Vk06OnNldEV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9XZWFr
TWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrTWFwKToKKyAg
ICAgICAgKiBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50KToKKwogMjAxNi0wOS0wNiAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgU2lsZW5jZSBHQ0Mg
d2FybmluZyBzcGFtIGludHJvZHVjZWQgaW4gcjIwNTQ2MgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MzEsNiArNjMxLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0Jvb2xlYW5PYmplY3QuY3BwCiAg
ICAgcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvQ2FsbERhdGEuY3Bw
CisgICAgcnVudGltZS9DYXRjaFNjb3BlLmNwcAogICAgIHJ1bnRpbWUvQ2xvbmVkQXJndW1lbnRz
LmNwcAogICAgIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcAogICAgIHJ1bnRpbWUvQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5jcHAKQEAgLTY2MCw4ICs2NjEsMTEgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCiAgICAgcnVudGltZS9FcnJvclBy
b3RvdHlwZS5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbi5jcHAKKyAgICBydW50aW1lL0V4Y2Vw
dGlvbkV2ZW50LmNwcAorICAgIHJ1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAKICAg
ICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAorICAgIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCiAgICAgcnVudGltZS9FeGVjdXRh
YmxlLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1l
L0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
anNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwMSwxMiArMzAxLDE0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBuYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgeworICAgICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgICAgIEltcHVyZUdldHRlciogdGhpc09iamVjdCA9IGpzQ2FzdDxJbXB1cmVHZXR0
ZXIqPihvYmplY3QpOwogICAgICAgICAKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPm1fZGVsZWdh
dGUpIHsKICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2RlbGVnYXRlLT5nZXRQcm9wZXJ0
eVNsb3QoZXhlYywgbmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogCkBAIC0xMDM3LDExICsxMDM5LDE0IEBAIHN0YXRpYyBTdHJpbmcgcmVzb2x2
ZVBhdGgoY29uc3QgRGlyZWN0b3IKIAogSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6
bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXlWYWx1ZSwgSlNWYWx1ZSByZWZl
cnJlclZhbHVlLCBKU1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOwogICAgIGNvbnN0IElkZW50aWZpZXIga2V5ID0g
a2V5VmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBkZWZl
cnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCkBAIC0xMDU0LDkgKzEwNTks
OSBAQCBKU0ludGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMCiAgICAgICAgICAg
ICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIp
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciByZWZlcnJlciA9IHJl
ZmVycmVyVmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2Vw
dGlvbigpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRp
b24pOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZWZlcnJlci5pc1N5bWJvbCgpKSB7CkBAIC0x
MTQyLDExICsxMTQ3LDEzIEBAIHN0YXRpYyBib29sIGZldGNoTW9kdWxlRnJvbUxvY2FsRmlsZVN5
c3QKIAogSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2go
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUga2V5LCBKU1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAg
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBTdHJpbmcgbW9kdWxlS2V5
ID0ga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ewotICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVk
LT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICB9CiAKQEAgLTEyNTcsOSArMTI2NCw5IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmUKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVFbGVtZW50KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIFJvb3QqIHJvb3QgPSBqc0R5bmFtaWNDYXN0PFJvb3QqPihl
eGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgRWxlbWVudCB3aXRob3V0IGEgUm9vdC4iKSkpKTsK
QEAgLTE0NDcsNyArMTQ1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25SdW4KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBT
dHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxG
aWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTQ4MSw3ICsxNDg4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJ1bgogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKHZtLCBqc051bGwoKSksIFZlY3RvcjxTdHJpbmc+KCkpOwpAQCAtMTUwOSw3ICsxNTE2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBz
Y3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUs
IHNjcmlwdCkpCkBAIC0xNTMwLDcgKzE1MzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgU3RyaW5nIHNvdXJjZUNvZGUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOwogCkBAIC0xNTQ3LDcgKzE1NTQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAo
IWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNTYy
LDcgKzE1NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVj
dG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3Rl
bShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE2MjIsOCArMTYyOSwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25TZXRSYW5kb21TZWVkKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIHVuc2lnbmVkIHNlZWQgPSBleGVjLT5hcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPndlYWtSYW5kb20oKS5zZXRTZWVk
KHNlZWQpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0x
ODc2LDE0ICsxODg2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25M
b2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJp
bmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxl
U3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7CiAKICAgICBKU0ludGVybmFsUHJvbWlzZSog
cHJvbWlzZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBmaWxlTmFtZSk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBKU1ZhbHVlIGVycm9yOwpAQCAtMTkwMSwxNCArMTkxMSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVCdWlsdGluKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxIHx8ICFleGVjLT5hcmd1bWVudCgwKS5p
c1N0cmluZygpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nIGZ1bmN0aW9uVGV4dCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSA9IG1ha2VTb3VyY2UoZnVuY3Rpb25UZXh0KTsKICAgICBKU0Z1bmN0aW9uKiBm
dW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKHZtLCBjcmVhdGVCdWlsdGlu
RXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvbyIp
LCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVj
dCktPmxpbmsodm0sIHNvdXJjZSksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAKQEAg
LTE5MjcsNyArMTkzOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25D
aGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJp
bmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwpAQCAtMTk1MywxNCArMTk2NSwxNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIoZXhl
Yy0+dm0oKS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWlsZGVyLmJ1aWxk
U25hcHNob3QoKTsKIAogICAgIFN0cmluZyBqc29uU3RyaW5nID0gc25hcHNob3RCdWlsZGVyLmpz
b24oKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBh
cnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTk5OCw3ICsyMDEyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSB2bS5z
YW1wbGluZ1Byb2ZpbGVyKCktPnN0YWNrVHJhY2VzQXNKU09OKCk7CiAgICAgRW5jb2RlZEpTVmFs
dWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5k
aWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpAQCAtMjEwMSw2ICsyMTE1LDE2IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAogc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlv
bihHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBleGNlcHRpb24pCiB7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKworI2RlZmluZSBDSEVDS19FWENFUFRJT04oKSBkbyB7IFwKKyAgICAg
ICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7IFwKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7IFwKKyAgICAgICAgICAgIHJldHVybjsgXAorICAgICAgICB9IFwKKyAgICB9IHdo
aWxlIChmYWxzZSkKKwogICAgIHByaW50ZigiRXhjZXB0aW9uOiAlc1xuIiwgZXhjZXB0aW9uLnRv
V1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAog
ICAgIElkZW50aWZpZXIgbmFtZUlEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgIm5hbWUiKTsKQEAgLTIxMDksOSArMjEzMywxMyBAQCBzdGF0aWMg
dm9pZCBkdW1wRXhjZXB0aW9uKEdsb2JhbE9iamVjdCogCiAgICAgSWRlbnRpZmllciBzdGFja0lE
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgInN0
YWNrIik7CiAgICAgCiAgICAgSlNWYWx1ZSBuYW1lVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuYW1lSUQpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwog
ICAgIEpTVmFsdWUgZmlsZU5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIGZpbGVOYW1lSUQpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIEpT
VmFsdWUgbGluZU51bWJlclZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgbGluZU51bWJlcklEKTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBKU1Zh
bHVlIHN0YWNrVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBzdGFja0lEKTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICAKICAgICBpZiAobmFtZVZh
bHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKSA9PSAiU3ludGF4RXJy
b3IiCiAgICAgICAgICYmICghZmlsZU5hbWVWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8ICFs
aW5lTnVtYmVyVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkpIHsKQEAgLTIxMjMsMTEgKzIxNTEs
MTQgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIAogICAgIAogICAg
IGlmICghc3RhY2tWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBwcmludGYoIiVz
XG4iLCBzdGFja1ZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51
dGY4KCkuZGF0YSgpKTsKKworI3VuZGVmIENIRUNLX0VYQ0VQVElPTgogfQogCiBzdGF0aWMgYm9v
bCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2bSwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgZXhjZXB0aW9uLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkRXhjZXB0aW9uTmFt
ZSwgYm9vbCBhbHdheXNEdW1wRXhjZXB0aW9uKQogewotICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFleGNlcHRpb24pIHsKICAgICAgICAgcHJpbnRmKCJF
eHBlY3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0aCBuYW1lICclcycgYnV0IG5vbmUgd2FzIHRo
cm93blxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0yMTM1LDEzICsyMTY2LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrVW5j
YXVnaHRFeGNlcHRpb24oVk0mIHYKIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgIEpTVmFsdWUgZXhjZXB0aW9uQ2xhc3MgPSBnbG9iYWxPYmpl
Y3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGV4cGVjdGVkRXhjZXB0
aW9uTmFtZSkpOwotICAgIGlmICghZXhjZXB0aW9uQ2xhc3MuaXNPYmplY3QoKSB8fCB2bS5leGNl
cHRpb24oKSkgeworICAgIGlmICghZXhjZXB0aW9uQ2xhc3MuaXNPYmplY3QoKSB8fCBzY29wZS5l
eGNlcHRpb24oKSkgewogICAgICAgICBwcmludGYoIkV4cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlv
biB3aXRoIG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhjZXB0aW9uIGNsYXNzIGlzIG5vdCBkZWZpbmVk
XG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKICAgICBib29sIGlzSW5zdGFuY2VPZkV4cGVjdGVkRXhjZXB0aW9u
ID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9uQ2xhc3MpLT5oYXNJbnN0YW5jZShleGVjLCBl
eGNlcHRpb24pOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgeworICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSkgewogICAgICAgICBwcmludGYoIkV4cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3
aXRoIG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhjZXB0aW9uIGNsYXNzIGZhaWxzIHBlcmZvcm1pbmcg
aGFzSW5zdGFuY2VcbiIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTIxNjUsNiArMjE5Niw3IEBAIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgSlNDOjpPcHRpb25zOjpk
dW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogCiAgICAgYXV0byBjaGVja0V4Y2VwdGlvbiA9IFsmXSAo
Ym9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2VwdGlvbiwgSlNWYWx1ZSB2YWx1ZSkgewpAQCAt
MjIwNyw3ICsyMjM5LDcgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0
KgogICAgICAgICBpZiAoaXNNb2R1bGUpIHsKICAgICAgICAgICAgIGlmICghcHJvbWlzZSkKICAg
ICAgICAgICAgICAgICBwcm9taXNlID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0QnVmZmVyLCBmaWxlTmFtZSkpOwotICAg
ICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bGZpbGxIYW5kbGVyID0gSlNO
YXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBb
JiwgaXNMYXN0RmlsZV0oRXhlY1N0YXRlKiBleGVjKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tF
eGNlcHRpb24oaXNMYXN0RmlsZSwgZmFsc2UsIGV4ZWMtPmFyZ3VtZW50KDApKTsKQEAgLTIyMjQs
MTMgKzIyNTYsMTQgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0Kgog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0
aW9uRXhjZXB0aW9uOwogICAgICAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2NyaXB0QnVmZmVyLCBmaWxl
TmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7CisgICAgICAgICAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0
aW9uKQogICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+
dmFsdWUoKTsKICAgICAgICAgICAgIGNoZWNrRXhjZXB0aW9uKGlzTGFzdEZpbGUsIGV2YWx1YXRp
b25FeGNlcHRpb24sIHJldHVyblZhbHVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHNjcmlwdEJ1
ZmZlci5jbGVhcigpOwotICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIAogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
QEAgLTIyNDMsNiArMjI3Niw5IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9i
amVjdCoKIAogc3RhdGljIHZvaWQgcnVuSW50ZXJhY3RpdmUoR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyBpbnRlcnByZXRlck5h
bWUoQVNDSUlMaXRlcmFsKCJJbnRlcnByZXRlciIpKTsKICAgICAKICAgICBib29sIHNob3VsZFF1
aXQgPSBmYWxzZTsKQEAgLTIyOTMsNyArMjMyOSw3IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0
aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcHJpbnRmKCIlc1xu
IiwgcmV0dXJuVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBn
bG9iYWxPYmplY3QtPnZtKCkuZHJhaW5NaWNyb3Rhc2tzKCk7CiAgICAgfQogICAgIHByaW50Zigi
XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSVV0aWxzLmgJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsMTEgKzM4LDEzIEBAIGVudW0gY2xhc3MgRXhjZXB0aW9uU3RhdHVzIHsKIAog
aW5saW5lIEV4Y2VwdGlvblN0YXR1cyBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZChKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJuZWRFeGNlcHRpb25SZWYpCiB7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYp
CiAgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRpb25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRp
b24tPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAg
ICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5y
ZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTQ0LDEyICsyMTQ0LDE5IEBACiAJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFC
NyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291
cmNlRHVtcC5jcHAgKi87IH07CiAJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi87IH07CiAJCUZF
NTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAv
KiBWTUVudHJ5U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlE
ODFENkUxRTMzMDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2MDI5RDkxRDZFMUU0RjAwMzAy
MDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRp
b25FdmVudExvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJRkU2NDkxMzcxRDc4RjAxRDAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzNjFE
NzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTY0OTEzOTFENzhGM0FGMDBBNjk0RDQgLyog
RXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAq
LzsgfTsKKwkJRkU2NDkxM0IxRDc4RjQ2QzAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzQTFENzhG
NDYxMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTY0OTEzRDFENzhGQzJGMDBBNjk0RDQgLyogRXhj
ZXB0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCAqLzsg
fTsKIAkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2OEM2MzYx
QjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFNjhDNjM4MUI5MERFMEIwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2OEM2MzUxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5jcHAgKi87IH07CiAJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAv
KiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi87
IH07CiAJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFN0JBNjBFMUExQTdDRUMw
MEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTdDNDE5NjFCOTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdT
dGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRURBNTBENDFCOTdGNDQyMDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJm
bG93VGVzdC5jcHAgKi87IH07CisJCUZFODBDMTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNj
b3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgw
QzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFODBDMTk5MUQ3NzVGQkUwMDg1MTBDMCAv
KiBDYXRjaFNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLzsgfTsK
KwkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOUEx
RDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovOyB9OwogCQlG
RTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIx
NTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi87IH07CiAJCUZFOTlCMjRBMUMyNEMzRDcwMEM4MjE1
OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkU5OUIyNDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRv
ci5jcHAgKi87IH07CiAJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4
MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NDY3LDExICs0NDc0LDE4IEBACiAJCUZFNTA2ODY2
MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRTb3VyY2VEdW1wLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2Nv
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNjE4M0M1QTI2MDBB
MUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZNRW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTYwMjlEODFE
NkUxRTMzMDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocm93U2NvcGVMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5MTM2MUQ3OEYwMTMw
MEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeGNlcHRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY0
OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRTY0OTEzQTFENzhGNDYxMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uRXZlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxM0MxRDc4RjVDNDAwQTY5NEQ0IC8q
IEV4Y2VwdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4Y2VwdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2OEM2
MzUxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclByaW50ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY4QzYzNjFCOTBEREQ5MDA0MkJDQjMgLyog
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFZlcmlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBDMTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRj
aFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhdGNoU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8q
IENhdGNoU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2F0
Y2hTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFODBDMTlBMUQ3NzY4
RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTkwQkIzQTFCN0NGNjRFMDA2QjNGMDMgLyogVk1Jbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk4QjVCNjFCQjlBRTExMDA3M0U3QTYgLyogSklU
U3ViR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN1Ykdl
bmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTk5QjI0NzFDMjRCNkQz
MDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpJVE5lZ0dlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01NzI5LDYgKzU3NDMsOCBAQAogCQkJCTBGQjdGMzhDMTVFRDhFMzgwMEYxNjdCMiAv
KiBCdXR0ZXJmbHlJbmxpbmVzLmggKi8sCiAJCQkJQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8q
IENhbGxEYXRhLmNwcCAqLywKIAkJCQkxNDVDNTA3RjBEOURGNjNCMDA4OEY2QjkgLyogQ2FsbERh
dGEuaCAqLywKKwkJCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAg
Ki8sCisJCQkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2NvcGUuaCAqLywKIAkJ
CQlCQzZBQUFFNDBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggKi8sCiAJCQkJMEZFMDUw
MUMxQUE5MDk1NjAwRDMzQjMzIC8qIENsb25lZEFyZ3VtZW50cy5jcHAgKi8sCiAJCQkJMEZFMDUw
MUQxQUE5MDk1NjAwRDMzQjMzIC8qIENsb25lZEFyZ3VtZW50cy5oICovLApAQCAtNTc5MywxMCAr
NTgwOSwxNiBAQAogCQkJCUJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlw
ZS5oICovLAogCQkJCUZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAvKiBFeGNlcHRpb24uY3BwICov
LAogCQkJCUZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCAqLywKKwkJCQlG
RTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuY3BwICovLAorCQkJCUZF
NjQ5MTNBMUQ3OEY0NjEwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5oICovLAorCQkJCUZFODBD
MTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCAqLywKKwkJ
CQlGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICov
LAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLywK
IAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovLAogCQkJ
CTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKIAkJ
CQlBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oICovLAorCQkJ
CUZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8sCisJCQkJ
RkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggKi8sCiAJCQkJODZD
QTAzMkQxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovLAogCQkJCTg2Q0FGRUUy
MTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8sCiAJCQkJQTdBOEFGMjkxN0FEQjVG
MzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oICovLApAQCAtNjE5Miw3ICs2MjE0LDYgQEAKIAkJ
CQkwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8sCiAJCQkJ
RkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovLAogCQkJCUZFMzQy
MjExMUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi8sCi0JCQkJRkU2MDI5RDgxRDZF
MUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlvbi5oICovLAogCQkJCTBGNTU5ODk3MTdD
ODZDNTYwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oICovLAogCQkJCTBGMkI2NkQ4MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLywKIAkJCQkwRjJCNjZEOTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLApAQCAtNzc0NSw3
ICs3NzY2LDcgQEAKIAkJCQlGRTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2
IC8qIEludGxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0ODFENTQz
QTkwMDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lcklubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyog
R2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdB
RTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtODI2Niw2ICs4Mjg3LDcgQEAKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1
RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZD
ODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkw
RUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVt
b3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFGNzM4MkQxOEJCQkY5MjAwOEE1QTM3
IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtODM1OSw2ICs4MzgxLDcg
QEAKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEQ0I5NzMxMkU1MTkzRjAwOTExOTQwIC8q
IFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4MEMxOTcxRDc3NUNERDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEVDOTBDMTg2MEQ2QzIw
MDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjZE
NzUzMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5o
IGluIEhlYWRlcnMgKi8sCkBAIC04MzY4LDYgKzgzOTEsNyBAQAogCQkJCTQ1MTUzOUI5MTJEQzk5
NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU2NDkx
M0IxRDc4RjQ2QzAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjJEODVCNzFDMEQ2NTBGMDA2QUNCNjEgLyogQWlyRml4UGFydGlhbFJlZ2lz
dGVyU3RhbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTg4OTEsNiArODkxNSw3IEBACiAJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJMEZGQTU0OTcxNkI4
ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU2NDkx
MzkxRDc4RjNBRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDIyQTY2MUMxNjI2NzUwMEUyRUI5OCAvKiBCM1JlZHVj
ZURvdWJsZVRvRmxvYXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzcxLDYgKzkzOTYsNyBAQAog
CQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkU4MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMxMUMzNzFDNzdDRUNBMDBFNkIx
QjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTgwQzE5
OTFENzc1RkJFMDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDIxMzU5QjBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk0MDMsNiArOTQyOSw3IEBACiAJCQkJMTRFOUQx
N0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAvKiBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjMxODgwOURE
NTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZFNjQ5MTNEMUQ3OEZDMkYwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmpl
Y3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlCMURCNzFDMEU0
MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTEzRTVCRjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05NDgzLDYgKzk1MTAsNyBAQAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJG
RTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODM5QzE0
QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRl
cnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUFCNDlEQzFCRUM4MDgyMDA3MDIwRkIg
LyogUGVyR2xvYmFsT2JqZWN0V3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rp
b25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSwxMCArMTA1LDEyIEBAIEpTVmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxsKGJv
b2wmIGgKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09iamVj
dCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKKyAgICBWTSYgdm0gPSBtX2V4
ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlzT2Jq
ZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgbV9uYW1lKSk7
Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAg
IHJldHVybiB7IH07CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdz
L1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmlu
ZGluZ3MvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEs
MTAgKzEyMSwxMyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoRXhlY1N0YXRlKiBzCiAK
IFN0cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkgY29u
c3QKIHsKKyAgICBWTSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBTdHJpbmcgcmVzdWx0ID0gbV92YWx1ZS5n
ZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKTsKICAgICAvLyBI
YW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9mIGlu
dm9raW5nIHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCi0gICAgaWYgKHNjcmlwdFN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgc2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyMyw2ICs2MjMsOSBAQCB2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlm
CiAKIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChtX2lzUGF1c2VkKQogICAgICAgICByZXR1cm47
CiAKQEAgLTY2Miw3ICs2NjUsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxG
cmFtZSogCiAgICAgewogICAgICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigqdGhp
cywgZGlkSGl0QnJlYWtwb2ludCA/IFBhdXNlZEZvckJyZWFrcG9pbnQgOiBtX3JlYXNvbkZvclBh
dXNlKTsKICAgICAgICAgaGFuZGxlUGF1c2Uodm1FbnRyeUdsb2JhbE9iamVjdCwgbV9yZWFzb25G
b3JQYXVzZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9
CiAKICAgICBtX3BhdXNpbmdCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw5IEBA
IEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICBpZiAoIWNhbGxG
cmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIg
bG9jayhjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAgaWYg
KGlzVGFpbERlbGV0ZWQoKSkKQEAgLTIyOCw3ICsyMzAsNiBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2Fs
bEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IAogICAgIERlYnVnZ2VyRXZhbEVuYWJsZXIgZXZhbEVuYWJsZXIoY2FsbEZyYW1lKTsKLSAgICBW
TSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRl
eHRUeXBlOwogICAgIApAQCAtMjQzLDkgKzI0NCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJh
bWU6OmV2YWx1YXRlV2l0aFMKICAgICBKU1Njb3BlOjpjb2xsZWN0VmFyaWFibGVzVW5kZXJURFoo
c2NvcGUoKS0+anNTY29wZSgpLCB2YXJpYWJsZXNVbmRlclREWik7CiAKICAgICBFdmFsRXhlY3V0
YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoY2FsbEZyYW1lLCBtYWtlU291cmNl
KHNjcmlwdCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+ZGVyaXZlZENvbnRleHRUeXBlKCksIGNvZGVCbG9jay0+dW5saW5rZWRDb2Rl
QmxvY2soKS0+aXNBcnJvd0Z1bmN0aW9uKCksIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1Vu
ZGVyVERaKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0g
dm0uZXhjZXB0aW9uKCk7Ci0gICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVO
TElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNh
dGNoU2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0yNTcsOSArMjU4
LDkgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogCiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSB0aGlzLT50aGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9
IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBzY29w
ZSgpLT5qc1Njb3BlKCkpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgewotICAgICAgICBleGNl
cHRpb24gPSB2bS5leGNlcHRpb24oKTsKLSAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAg
ICBpZiAoVU5MSUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZXhjZXB0
aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgIH0KIAogICAgIGlmIChzY29wZUV4dGVuc2lvbk9iamVjdCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTUgQEAgZXh0ZXJu
ICJDIiB7CiAKIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGlm
IChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoKQotICAgICAgICBSRUxFQVNFX0FTU0VSVChl
eGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisKKyAg
ICBpZiAodm0tPmNhbGxGcmFtZUZvckNhdGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2bS0+
Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NF
UlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKLQotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIAogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRo
YXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QK
ICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KQEAgLTEzMSw3ICsxMzIsNyBAQCB2b2lkIGNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNh
dGNoKQogICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7CiAgICAg
aWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIEFTU0VSVCghIXZtLT5leGNl
cHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgICAgICAKICAgICAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhl
YywgZXhpdC5tX2NvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3
IEBAIHRlbXBsYXRlPGJvb2wgc3RyaWN0LCBib29sIGRpcmVjdD4KIEFMV0FZU19JTkxJTkUgc3Rh
dGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0xMTksNyAr
MTIwLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIAogCiAgICAg
Ly8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0aW9u
LgogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsK
LSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VW
YWx1ZSwgc3RyaWN0KTsKQEAgLTE3OSwxMSArMTgwLDEyIEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25DcmVhdGVUaGkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkgPT0g
SlNGdW5jdGlvblR5cGUpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+cmFyZURhdGEoZXhlYywgaW5saW5l
Q2FwYWNpdHkpLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAKICAg
ICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3ItPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYg
KHByb3RvLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBhc09iamVjdChwcm90bykpOwpAQCAtMjA3LDEyICsyMDksMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgp
OwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgJiBiKSk7CkBAIC0yMjIsMTIgKzIyNSwxMyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3Ax
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9wMi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSB8IGIpKTsKQEAgLTIzNywxMiArMjQxLDEzIEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1
ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQz
MihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIF4gYikpOwpAQCAtMjUyLDEyICsyNTcsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBK
U1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9w
MiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50
b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSA8PCAoYiAmIDB4MWYpKSk7CkBA
IC0yNjcsMTIgKzI3MywxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
OwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAg
aW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBvcDIu
dG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhID4+
IChiICYgMHgxZikpKTsKQEAgLTI4MiwxMiArMjg5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMik7CiAKICAgICB1aW50MzJfdCBhID0gb3AxLnRvVUludDMyKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDB4MWYpKSkpOwpA
QCAtMzEzLDEyICszMjEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9wMi50
b051bWJlcihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgLyBi
KSk7CkBAIC0zMjgsMTAgKzMzNywxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cml0aEFicyhFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJ
S0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1
cm4gZmFicyhhKTsKIH0KQEAgLTM0MCwxMCArMzUwLDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyaXRoQ29zKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIHJldHVybiBjb3MoYSk7CiB9CkBAIC0zNTIsMTAgKzM2MywxMSBAQCBkb3VibGUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEZSb3VuCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGEpOwogfQpAQCAtMzY0
LDEwICszNzYsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhMb2coRQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGxvZyhhKTsK
IH0KQEAgLTM3NiwxMCArMzg5LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoU2luKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBzaW4oYSk7CiB9CkBAIC0zODgsMTAgKzQwMiwxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Bcml0aFNxcnQoCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICByZXR1cm4gc3FydChhKTsKIH0KQEAgLTQxNyw3ICs0MzIsOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIEpTVmFsdWUgcHJvcGVy
dHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3BlcnR5KTsKIApAQCAtNDQzLDEwICs0NTks
MTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAog
ICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHlOYW1lKSk7CiB9CkBAIC00NTUsNyAr
NDcxLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIEpTVmFsdWUgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFByb3Bl
cnR5KTsKIAogICAgIGlmIChwcm9wZXJ0eS5pc1VJbnQzMigpKQpAQCAtNDc2LDcgKzQ5Myw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBh
dXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGJhc2UpLmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsK
IH0KQEAgLTg0NSw2ICs4NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpOwogICAgIEpTVmFsdWUgdGhpc1ZhbCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VGhpcyk7CkBAIC04NzAsMTEgKzg4OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgfQogCiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2li
bGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSwgc2xvdCkp
OwogfQpAQCAtODk5LDkgKzkxNywxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxXaXRoCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmllciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgcHV0V2l0aFRoaXM8dHJ1ZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRU
aGlzLCBlbmNvZGVkVmFsdWUsIHByb3BlcnR5KTsKIH0KQEAgLTkxMCw5ICs5MjksMTAgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZp
ZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0
eUtleShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPGZhbHNl
PihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRoaXMsIGVuY29kZWRWYWx1ZSwgcHJvcGVydHkp
OwogfQpAQCAtMTQyNyw5ICsxNDQ3LDkgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blN0ckNhdDIoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4ZWMpOwot
ICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0
IGhhdmUgYmVlbiBnaXZlbiBwcmltaXRpdmVzLgorICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBwcmltaXRp
dmVzLgogICAgIEpTU3RyaW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3RyaW5nKGV4
ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwogCiAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihzdHIxLT5sZW5ndGgo
KSwgc3RyMi0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVj
LCBzY29wZSk7CkBAIC0xNDQ2LDExICsxNDY2LDExIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25TdHJDYXQzKEUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRlY29kZShhKS50b1N0cmluZyhl
eGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ug
d2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4g
cHJpbWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFsdWU6OmRlY29kZShiKS50b1N0
cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU1N0cmluZyogc3RyMyA9IEpTVmFsdWU6OmRlY29kZShj
KS50b1N0cmluZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4o
c3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpLCBzdHIzLT5sZW5ndGgoKSkpIHsKICAgICAg
ICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDYgKzcyMyw3IEBAIHZv
aWQgSGVhcDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3QKIAogdm9pZCBIZWFwOjp2aXNp
dEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisKICAgICBpZiAoIW1fdm0t
PmV4Y2VwdGlvbigpICYmICFtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsNyArMTM0LDkgQEAgU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6
aW5qZWN0ZWRTYwogCiBKU0M6OkpTT2JqZWN0KiBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0
ZUluamVjdGVkU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlLCBFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlLCBpbnQgaWQpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOworICAg
IFZNJiB2bSA9IHNjcmlwdFN0YXRlLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBTb3VyY2VD
b2RlIHNvdXJjZUNvZGUgPSBtYWtlU291cmNlKHNvdXJjZSk7CiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0x
NTcsNyArMTU5LDcgQEAgSlNDOjpKU09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcgog
ICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGlkKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
Qzo6Y2FsbChzY3JpcHRTdGF0ZSwgZnVuY3Rpb25WYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBn
bG9iYWxUaGlzVmFsdWUsIGFyZ3MpOwotICAgIHNjcmlwdFN0YXRlLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5nZXRPYmpl
Y3QoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjEsNyArMjIxLDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6Ogog
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0o
KSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJy
b3JTY29wZSh2bSk7CiAKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sgPSBj
cmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0
Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKTsKICAgICBpZiAoaW5jbHVkZXNO
YXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhjZXB0aW9ucygpKQpAQCAtMjI5LDggKzIzMCwx
MiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAKICAgICAvLyBG
SVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQg
bm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwogICAgIC8vIElmIHRo
aXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0
cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9u
LgotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICB9CiAKICAgICBpZiAoSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpsb2dU
b1N5c3RlbUNvbnNvbGUoKSkgewogICAgICAgICBpZiAoY2FsbFN0YWNrLT5zaXplKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRl
V2kKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIkluamVjdGVkU2NyaXB0SG9zdC5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBmaXJzdCBh
cmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpKTsKIAogICAgIFN0cmluZyBwcm9ncmFtID0gc2Ny
aXB0VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0
aW9uOwpAQCAtMjU5LDEyICsyNTksMTMgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6
Z2V0SW50ZXJuYQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKIAogICAgIGlm
IChKU1Byb21pc2UqIHByb21pc2UgPSBqc0R5bmFtaWNDYXN0PEpTUHJvbWlzZSo+KHZhbHVlKSkg
ewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBzd2l0Y2ggKHBy
b21pc2UtPnN0YXR1cyhleGVjLT52bSgpKSkgewogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3Rh
dHVzOjpQZW5kaW5nOgpAQCAtMjg2LDcgKzI4Nyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9u
ID0ganNEeW5hbWljQ2FzdDxKU0JvdW5kRnVuY3Rpb24qPih2YWx1ZSkpIHsKICAgICAgICAgdW5z
aWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInRhcmdldEZ1bmN0
aW9uIiwgYm91bmRGdW5jdGlvbi0+dGFyZ2V0RnVuY3Rpb24oKSkpOwogICAgICAgICBhcnJheS0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShl
eGVjLCAiYm91bmRUaGlzIiwgYm91bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCkpKTsKQEAgLTI5OCw3
ICsyOTksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAg
aWYgKFByb3h5T2JqZWN0KiBwcm94eSA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih2YWx1
ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVy
dHkoZXhlYywgQVNDSUlMaXRlcmFsKCJ0YXJnZXQiKSwgcHJveHktPnRhcmdldCgpKSk7CiAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiaGFuZGxlciIpLCBwcm94eS0+aGFuZGxlcigp
KSk7CkBAIC0zMTIsNyArMzEzLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0
SW50ZXJuYQogCiAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgICAgICBK
U0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJhcnJheSIsIGl0ZXJhdGVkVmFs
dWUpKTsKICAgICAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBj
b25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwga2luZCkpOwpAQCAtMzM1LDcg
KzMzNiw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAg
ICAgfQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0
eShleGVjLCAibWFwIiwgbWFwSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9w
ZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkpOwpAQCAt
MzU3LDcgKzM1OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEK
ICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCAic2V0Iiwgc2V0SXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJu
YWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkp
OwpAQCAtMzY3LDcgKzM2OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldElu
dGVybmEKICAgICBpZiAoSlNTdHJpbmdJdGVyYXRvciogc3RyaW5nSXRlcmF0b3IgPSBqc0R5bmFt
aWNDYXN0PEpTU3RyaW5nSXRlcmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5k
ZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0ciwgMSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGlu
ZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgInN0cmluZyIsIHN0cmluZ0l0
ZXJhdG9yLT5pdGVyYXRlZFZhbHVlKGV4ZWMpKSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAg
LTM3Niw3ICszNzcsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5h
CiAgICAgaWYgKEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yID0g
anNEeW5hbWljQ2FzdDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJvYmpl
Y3QiLCBwcm9wZXJ0eU5hbWVJdGVyYXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIHJl
dHVybiBhcnJheTsKQEAgLTQwNCw2ICs0MDUsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0Ojp3ZWFrTWFwRW50CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAg
IEpTV2Vha01hcCogd2Vha01hcCA9IGpzRHluYW1pY0Nhc3Q8SlNXZWFrTWFwKj4odmFsdWUpOwog
ICAgIGlmICghd2Vha01hcCkKQEAgLTQxOCw3ICs0MjAsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRT
Y3JpcHRIb3N0Ojp3ZWFrTWFwRW50CiAgICAgICAgIG51bWJlclRvRmV0Y2ggPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+d2Vha01hcERh
dGEoKS0+YmVnaW4oKTsgaXQgIT0gd2Vha01hcC0+d2Vha01hcERhdGEoKS0+ZW5kKCk7ICsraXQp
IHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CkBAIC00NTEsNiArNDUzLDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1Nl
dEVudAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBKU1dlYWtTZXQq
IHdlYWtTZXQgPSBqc0R5bmFtaWNDYXN0PEpTV2Vha1NldCo+KHZhbHVlKTsKICAgICBpZiAoIXdl
YWtTZXQpCkBAIC00NjUsNyArNDY4LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6
d2Vha1NldEVudAogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2lu
KCk7IGl0ICE9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IEpTT2JqZWN0KiBlbnRyeSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpAQCAtNDk1LDYg
KzQ5OCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGl0ZXJh
dG9yOwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBpZiAoSlNNYXBJdGVyYXRvciogbWFwSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRl
cmF0b3IqPih2YWx1ZSkpCkBAIC01MDUsNyArNTA5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2Ny
aXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICBpdGVyYXRvciA9IHN0cmluZ0l0ZXJhdG9yLT5j
bG9uZShleGVjKTsKICAgICBlbHNlIGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0
eU5hbWVJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZh
bHVlKSkgewogICAgICAgICBpdGVyYXRvciA9IHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5jbG9uZShl
eGVjKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKEpTT2JqZWN0KiBpdGVyYXRvck9iamVjdCA9
IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSkpIHsKQEAgLTUyNSwxOCArNTI5LDE4IEBA
IEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgbnVtYmVy
VG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7CiAKICAgICBKU0Fy
cmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBuZXh0
ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpCiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUo
ZXhlYywgbmV4dCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBKU09iamVjdCogZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pT
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODMsNyArODMsNyBAQCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZh
bHVhdGVXCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJKU0phdmFTY3JpcHRDYWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24g
Zmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0
ID0gc2NyaXB0VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4g
ZXhjZXB0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRD
YWxsU3RhY2tGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rvcnku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAgUmVmPFNjcmlwdENhbGxTdGFj
az4gY3JlYXRlU2NyaXB0Q2FsbFN0YQogCiBzdGF0aWMgdm9pZCBleHRyYWN0U291cmNlSW5mb3Jt
YXRpb25Gcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXhjZXB0
aW9uT2JqZWN0LCBpbnQqIGxpbmVOdW1iZXIsIGludCogY29sdW1uTnVtYmVyLCBTdHJpbmcqIHNv
dXJjZVVSTCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5v
cmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0byBldmFsdWF0ZSBK
YXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKICAgICBKU1ZhbHVlIGxpbmVWYWx1ZSA9IGV4
Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImxpbmUiKSk7CiAgICAgKmxpbmVOdW1iZXIgPSBsaW5lVmFsdWUgJiYgbGluZVZh
bHVlLmlzTnVtYmVyKCkgPyBpbnQobGluZVZhbHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7CkBAIC0x
MjYsNyArMTI5LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQog
ICAgICpjb2x1bW5OdW1iZXIgPSBjb2x1bW5WYWx1ZSAmJiBjb2x1bW5WYWx1ZS5pc051bWJlcigp
ID8gaW50KGNvbHVtblZhbHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7CiAgICAgSlNWYWx1ZSBzb3Vy
Y2VVUkxWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInNvdXJjZVVSTCIpKTsKICAgICAqc291cmNlVVJMID0g
c291cmNlVVJMVmFsdWUgJiYgc291cmNlVVJMVmFsdWUuaXNTdHJpbmcoKSA/IHNvdXJjZVVSTFZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSA6IEFTQ0lJTGl0ZXJhbCgidW5kZWZpbmVk
Iik7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogfQogCiBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9t
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9u
LCBzaXplX3QgbWF4U3RhY2tTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhY2hlZENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIG1fY2xvc3VyZSA9
IG1faW50ZXJwcmV0ZXItPnByZXBhcmVGb3JSZXBlYXRDYWxsKGZ1bmN0aW9uLT5qc0V4ZWN1dGFi
bGUoKSwgY2FsbEZyYW1lLCAmbV9wcm90b0NhbGxGcmFtZSwgZnVuY3Rpb24sIGFyZ3VtZW50Q291
bnQgKyAxLCBmdW5jdGlvbi0+c2NvcGUoKSwgbV9hcmd1bWVudHMuZGF0YSgpKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxG
cmFtZSwgc2NvcGUpOwotICAgICAgICAgICAgbV92YWxpZCA9ICFjYWxsRnJhbWUtPmhhZEV4Y2Vw
dGlvbigpOworICAgICAgICAgICAgbV92YWxpZCA9ICFzY29wZS5leGNlcHRpb24oKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSBjYWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDIwNTQ4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDE0ICsxMTYsNiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8v
IHBvaW50ZXIsIHNvIHRoZXNlIGFyZSBpbmVmZmljaWVudCwgYW5kIHNob3VsZCBiZSB1c2VkIHNw
YXJpbmdseSBpbiBuZXcgY29kZS4KICAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55
IHBsYWNlcyBpbiBsZWdhY3kgY29kZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGlt
ZSBzb29uLgogCi0gICAgICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IHZtKCkuY2xlYXJFeGNl
cHRpb24oKTsgfQotCi0gICAgICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gdm0oKS5leGNlcHRpb24oKTsgfQotICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0
IHsgcmV0dXJuICEhdm0oKS5leGNlcHRpb24oKTsgfQotCi0gICAgICAgIEV4Y2VwdGlvbiogbGFz
dEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHZtKCkubGFzdEV4Y2VwdGlvbigpOyB9Ci0gICAg
ICAgIHZvaWQgY2xlYXJMYXN0RXhjZXB0aW9uKCkgeyB2bSgpLmNsZWFyTGFzdEV4Y2VwdGlvbigp
OyB9Ci0KICAgICAgICAgQXRvbWljU3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29u
c3QgeyByZXR1cm4gdm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENv
bW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJv
cGVydHlOYW1lczsgfQogICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgZW1wdHlM
aXN0KCkgY29uc3QgeyByZXR1cm4gKnZtKCkuZW1wdHlMaXN0OyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCBKU1ZhbHVlIGV2YWwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0K
ICAgICBTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IGFzU3RyaW5nKHByb2dyYW0pLT52YWx1ZShjYWxs
RnJhbWUpOwotICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
CiAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsK
QEAgLTE0NSw3ICsxNDUsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBsaXRlcmFsIHBhcnNlciBiYWls
ZWQsIGl0IHNob3VsZCBub3QgaGF2ZSB0aHJvd24gZXhjZXB0aW9ucy4KLSAgICAgICAgQVNTRVJU
KCF2bS5leGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
CiAgICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93
KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpLCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAKQEAgLTE4OCw3ICsx
ODgsNyBAQCB1bnNpZ25lZCBzaXplT2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAgZGVm
YXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAg
ICAgICBsZW5ndGggPSBnZXRMZW5ndGgoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01ODYsMTMgKzU4NiwxNSBAQCBwcml2YXRl
OgogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmco
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChE
ZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVi
dWdnZXIoKSkgewotICAgICAgICBTdXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFt
ZS0+dm0oKSk7CisgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZSBzY29wZSgmdm0pOwogICAg
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSkp
CiAgICAgICAgICAgICBkZWJ1Z2dlci0+cmV0dXJuRXZlbnQoY2FsbEZyYW1lKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZGVidWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7
Ci0gICAgICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQodGhyb3dTY29wZSwgIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0K
IH0KIApAQCAtNjgwLDYgKzY4Miw4IEBAIHByaXZhdGU6CiAKIE5FVkVSX0lOTElORSBIYW5kbGVy
SW5mbyogSW50ZXJwcmV0ZXI6OnVud2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
RXhjZXB0aW9uKiBleGNlcHRpb24sIFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogeworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh1bndpbmRTdGFy
dCA9PSBVbndpbmRGcm9tQ2FsbGVyRnJhbWUpIHsKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2Fs
bGVyRnJhbWVPclZNRW50cnlGcmFtZSgpID09IHZtLnRvcFZNRW50cnlGcmFtZSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtNjk4LDcgKzcwMiw3IEBAIE5FVkVSX0lOTElORSBIYW5k
bGVySW5mbyogSW50ZXJwcmV0ZXI6OnUKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgp
IHx8IChleGNlcHRpb25WYWx1ZS5pc0NlbGwoKSAmJiAhZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkp
KQogICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGpzTnVsbCgpOwogCi0gICAgQVNTRVJUKHZtLmV4
Y2VwdGlvbigpICYmIHZtLmV4Y2VwdGlvbigpLT5zdGFjaygpLnNpemUoKSk7CisgICAgQVNTRVJU
X1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkgJiYgc2NvcGUuZXhjZXB0aW9uKCktPnN0
YWNrKCkuc2l6ZSgpKTsKIAogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2
UEMsIHVud2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCiAgICAgSGFuZGxlckluZm8q
IGhhbmRsZXIgPSBudWxscHRyOwpAQCAtODk3LDcgKzkwMSw3IEBAIGZhaWxlZEpTT05QOgogCiAg
ICAgLy8gRXhlY3V0ZSB0aGUgY29kZToKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHByb2dyYW0tPmdl
bmVyYXRlZEpJVENvZGUoKS0+ZXhlY3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7Ci0KKyAgICB0
aHJvd1Njb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwog
fQogCkBAIC05MDYsNyArOTEwLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwo
Q2FsbEZyYQogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAg
ICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKICAgICBpZiAodm0uaXNDb2xsZWN0b3JC
dXN5KCkpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKQEAgLTk2OSw3ICs5NzMsNyBAQCBKU09i
amVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5
KCkpOwogICAgIC8vIFdlIHRocm93IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0
dXJuIHNvbWV0aGluZyAidmFsaWQiIGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52
YWxpZCBzdGF0ZS4KQEAgLTEwMjAsMTIgKzEwMjQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVy
OjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwog
Ci0gICAgICAgICAgICBpZiAoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoTElLRUxZKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7
CkBAIC0xMDM1LDcgKzEwMzksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVw
YXJlRm9yCiB7CiAgICAgVk0mIHZtID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZt
LmlzQ29sbGVjdG9yQnVzeSgpKQogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpA
QCAtMTA4NCw3ICsxMDg4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhl
Y3V0YQogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCgh
dm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9y
QnVzeSgpKQpAQCAtMTE5MCw3ICsxMTk0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0
ZShNb2R1bGVQcm9ncgogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRp
b24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlz
Q29sbGVjdG9yQnVzeSgpKQpAQCAtMTIzMSwxMiArMTIzNSwxNCBAQCBKU1ZhbHVlIEludGVycHJl
dGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVy
OjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7
CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZt
RW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVi
dWdnZXJSZXF1ZXN0cygpKTsKLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBz
d2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBA
IC0xMjU4LDcgKzEyNjQsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWco
Q2FsCiAgICAgICAgICAgICBkZWJ1Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKTsKLX0gICAgCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIEludGVycHJldGVyX2gKIAogI2luY2x1ZGUgIkFyZ0xpc3Qu
aCIKKyNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0zOCw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgogI2luY2x1ZGUgIlN0YWNrRnJhbWUuaCIKKyNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTkyLDggKzk0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNl
cHRpb25TY29wZShWTSogdm0pCiAgICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZt
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAg
ICAgICB+U3VzcGVuZEV4Y2VwdGlvblNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFk
b3dDaGlja2VuOjpkdW1wKFByaW50U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6
ZnVuY3Rpb25zT25TdGFjayhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNB
cnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiAr
NjksNyBAQCB2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFs
dWUgSklUQ29kZTo6ZXhlY3V0ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFt
ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZv
aWQqIGVudHJ5QWRkcmVzczsKICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nh
c3Q8SlNGdW5jdGlvbio+KHByb3RvQ2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5
LDcgQEAgSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxz
ZQogICAgICAgICBlbnRyeUFkZHJlc3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29k
ZSh2bUVudHJ5VG9KYXZhU2NyaXB0KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7
Ci0gICAgcmV0dXJuIHZtLT5leGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJl
dHVybiBzY29wZS5leGNlcHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNv
bW1vbkRhdGEqIEpJVENvZGU6OmRmZ0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDYgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0s
IEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpi
cmVha09uVGhyb3coKSkgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBA
IHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0t
PnNoYWRvd0NoaWNrZW4oKS5sb2coKnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0No
aWNrZW46OlBhY2tldDo6dGhyb3dQYWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNl
cHRpb24gPSB2bS0+ZXhjZXB0aW9uKCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29w
ZS5leGNlcHRpb24oKTsKICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRs
ZXJJbmZvKiBoYW5kbGVyID0gdm0tPmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUs
IGV4Y2VwdGlvbiwgdW53aW5kU3RhcnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25J
bk9wdGltaXplLCBiYXNlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkp
OwogICAgIGJvb2wgcmVzdWx0ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVj
LCBpZGVudCwgc2xvdCk7Ci0gICAgaWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1
YkluZm8tPmFjY2Vzc1R5cGUpOwpAQCAtNDg5LDYgKzQ4OSw3IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIGJvb2wgaXNTdHJpbmdPclN5bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUg
dmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYg
KExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMy
KCk7CkBAIC01MTAsNyArNTExLDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBj
YWxsRnJhbQogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNh
bGxGcmFtZSk7CiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJl
dyBhbiBleGNlcHRpb24uCi0gICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0
KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKQEAgLTUyMiw2ICs1MjMsOCBA
QCBzdGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lk
IGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQogeworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5p
c1VJbnQzMigpKSkgewogICAgICAgICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJ
bnQzMiB3aWxsIHJldHVybiB0cnVlIG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFs
bCB0aG9zZSB2YWx1ZXMgYXJlIHZhbGlkIGFycmF5IGluZGljZXMuCkBAIC01NTMsNyArNTU2LDcg
QEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAg
YXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAg
aWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMy
X3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKQEAgLTc3NiwxNCArNzc5LDE2IEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CiAKKyAgICBWTSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0
Q29kZUJsb2NrKDApOwogICAgIAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+
Y2FsbGVlQXNWYWx1ZSgpLCBnbG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKQEAgLTgwNyw3ICs4MTIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhh
bmRsZUhvc3RDYWxsCiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAg
ICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
ICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04
MzYsNyArODQxLDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAog
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2
bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwpAQCAtMTQ2Miw4ICsxNDY3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBl
IHsKIAogc3RhdGljIHZvaWQgcHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0
KiBhY2Nlc3NvciwgQWNjZXNzb3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBhdXRvIHByb3BlcnR5S2V5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNz
b3JUeXBlOjpHZXR0ZXIpCkBAIC0xNjA4LDggKzE2MTUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNj
ZXNzQXJndW1lbnRJbmRleFF1aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0
cmluZygpKSkgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSA9ICpiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChKU0NlbGw6OmNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICBpZiAoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3Ry
aW5nID0gYXNTdHJpbmcoc3Vic2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkg
ewpAQCAtMTY1MSwxMCArMTY2MCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgfQogCiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNv
ZGVPZmZzZXQoKSk7CkBAIC0xODQ1LDYgKzE4NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICAKQEAgLTE4NjIsMTAgKzE4NzIsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0
eUtleShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChleGVjLCBwcm9wZXJ0eSk7CiAgICAgfQpAQCAtMTkxNCwxMCArMTkyNCwxMCBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIo
aW5kZXgpKQogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlm
aWVyIHByb3BlcnR5ID0ga2V5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5t
ZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsK
ICAgICB9CkBAIC0yMTIyLDcgKzIxMzIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0VG9TY29wZShFCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCksIFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlh
bGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5t
ZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAg
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlD
YWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dElu
Zm8sIHNsb3QsIGlkZW50KTsKQEAgLTIzNzEsMTEgKzIzODEsMTIgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSB1bnByb2ZpbGVkTXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoYSAqIGIpKTsKQEAgLTIzODMsNiArMjM5NCw3IEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgcHJvZmlsZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlLCBib29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUp
CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCkBAIC0yMzkwLDEwICsyNDAyLDEwIEBAIEFM
V0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9m
aWxlLT5vYnNlcnZlTEhTQW5kUkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRv
TnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ2OCwxMSAr
MjQ4MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFM
V0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpT
VmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ4
MCw2ICsyNDkzLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgog
CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2Jz
ZXJ2ZUxIU0FuZFJIU1R5cGVzID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAK
QEAgLTI0ODcsMTAgKzI1MDEsMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgcHJvZgogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIp
OwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIg
PSBvcDIudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihhIC0gYik7CkBAIC0yNTgwLDEzICsyNTk0LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DaGVja0lmRXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCghIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBp
ZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAog
fSAvLyBleHRlcm4gIkMiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
eGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+
ZXhjZXB0aW9uKCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24g
Iiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAg
ICByZXR1cm4gTExJbnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTYsNyArNTcs
OCBAQCB2b2lkKiBjYWxsVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24o
KSwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhj
ZXB0aW9uKCksICIgKGNhbGxUb1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50
OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9i
amVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2Vw
dGlvbigpKQorICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9F
TkQoKTsKIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBC
eXRlY29kZVNlcXVlbmNlOjpmb3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVu
Y2VQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2hlYWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVh
ZGVyW2ldKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaGVhZGVyLCBoZWFkZXIpOwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAg
ICAgICAgc2VxdWVuY2UtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9K
UyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJD
b21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSwyOCArMTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkKIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAg
SlNBcnJheSogcHJvZmlsZWRCeXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIHByb2ZpbGVkQnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2Zp
bGVkQnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVz
KTsKICAgICAKICAgICBKU0FycmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytp
KQogICAgICAgICBkZXNjcmlwdGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3Jp
cHRpb25zW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGNvdW50ZXJzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9
IG1fY291bnRlcnMuYmVnaW4oKSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKQEAgLTE0NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRv
SlMoRXhlY1N0YXRlKiBleGUKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvdW50ZXJzLCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNp
dGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X29zckV4aXRTaXRlcy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBtX29zckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNp
dGVzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAg
ICAgZXhpdHMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVj
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwy
NCArMTAwLDI1IEBAIHZvaWQgRGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpT
VmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAg
ICAKICAgICBKU0FycmF5KiBieXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBi
eXRlY29kZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZWNvZGVzLCBieXRlY29kZXMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxh
dGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwgbV9jb21waWxhdGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlv
bnMpOwogICAgIAogICAgIEpTQXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGV2ZW50cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1Zh
bHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhS
YXdQb2ludGVyKG1fY29kZUFkZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZp
c2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW5TdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9y
aWdpblN0YWNrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Niw2ICsxOTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1
bHQgewogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJl
c3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gRUNNQSA5LjQuMi4zOiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1h
cnJheXNwZWNpZXNjcmVhdGUKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQo
KTsKICAgICBpZiAoTElLRUxZKGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUs
NyArMjA4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZh
c3RQYXRoLCBudWxscHRyKTsKIAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlz
Q29uc3RydWN0b3IoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb25zdHJ1Y3Rvci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5
bWJvbCk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxw
dHIpOwogICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0
aCwgbnVsbHB0cik7OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlv
biwgbnVsbHB0cik7CiAKICAgICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIy
OCw3ICsyMzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihs
ZW5ndGgpKTsKICAgICBKU09iamVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0
cnVjdG9yLCBhcmdzLCAiU3BlY2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBj
b25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3
T2JqZWN0KTsKIH0KQEAgLTI4NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGgKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291
bnQ7CiAgICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpA
QCAtMzMwLDMxICszMzMsMzIgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIAogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAg
ICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0
aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmosIGV4ZWMsIHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKTsKIAogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
VG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0
aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgCiAgICAgLy8gMi4gTGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmpvaW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUo
ZnVuYykgaXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1l
dGhvZCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4
NywxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmlu
Z0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdGhpc0FycmF5LT50cnlHZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVu
dCkgewogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBw
ZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMs
MTQgKzQwNywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0
cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1
MiArNDI0LDUyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpT
U3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYg
RU5BQkxFKElOVEwpCiAgICAgQXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9
IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpz
RW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBj
b252ZXJzaW9uRnVuY3Rpb24gPSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudG9Mb2NhbGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYg
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9
IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1l
bnQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBl
bGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9
IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1l
bnQsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQs
MTYgQEAgc3RhdGljIGlubGluZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMg
SlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBK
U1N0cmluZyogc2VwYXJhdG9yLCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IC8vIDUuIElmIGxlbiBpcyB6ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAo
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0m
IHZtID0gZXhlYy52bSgpOwotCiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIp
LgogICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50
MCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3
aXNlLCBsZXQgUiBiZSA/IFRvU3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBz
dGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0Vt
cHR5U3RyaW5nKCZleGVjKTsKICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmlu
ZygmZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBM
ZXQgayBiZSAxLgpAQCAtNTI0LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4
ZWNTdGF0ZSYgZXhlYywKICAgICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2sp
IHsKICAgICAgICAgLy8gYi4gTGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSku
CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJ
ZiBlbGVtZW50IGlzIHVuZGVmaW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3Ry
aW5nOyBvdGhlcndpc2UsIGxldCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUs
NyArNTQyLDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAg
ICAgICAgICAgbmV4dCA9IGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG5leHQgPSBlbGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0
aGUgU3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAt
NTYxLDYgKzU2OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJm
bHkucHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdK
b2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEg
PSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3du
VG9CZU9LID0gZmFsc2U7CkBAIC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1Ymxp
Y0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpv
aW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVy
Zmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRv
QmVPSyA9IGZhbHNlOwpAQCAtNjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBm
YXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBq
c0RvdWJsZU51bWJlcih2YWx1ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoc3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlw
ZShzdGF0ZS52bSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tu
b3duVG9CZU9LID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNl
OgogICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
dGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3Rh
dGUsIGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYz
MCw2ICs2NDAsOSBAQCBnZW5lcmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gMS4gTGV0IE8gYmUgPyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50
b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0
IGxlbiBiZSA/IFRvTGVuZ3RoKD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0
aCA9IHRvTGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3Ig
aXMgdW5kZWZpbmVkLCBsZXQgc2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcg
IiwiLgpAQCAtNjUzLDcgKzY2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihs
ZW5ndGg2NCkgPT0gbGVuZ3RoKTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9
IGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVj
LCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBM
ZXQgc2VwIGJlID8gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0
b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VM
WShsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVz
ZUZhc3RKb2luKHRoaXNPYmplY3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAg
LTcwMSw3ICs3MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
cmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5
LiIpKTsKQEAgLTcxNCw2ICs3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQ
dXNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlm
IChpc0pTQXJyYXkodGhpc1ZhbHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpA
QCAtNzI2LDcgKzc0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgp
OyBuKyspIHsKQEAgLTczOCw3ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5n
dGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAg
ICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqZWN0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAg
LTc5OCw0MSArODEzLDQxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKysp
IHsKICAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAg
IGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2Vy
RXhpc3RzKSB7CiAgICAgICAgICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMs
IGxvd2VyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBw
ZXIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAg
ICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2Jq
ZWN0LT5nZXQoZXhlYywgdXBwZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7
Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRl
eElubGluZShleGVjLCB1cHBlciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVz
dWx0OwpAQCAtODU2LDcgKzg3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRl
eChleGVjLCAwKTsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0Pihl
eGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBw
dXRMZW5ndGgoZXhlYywgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAg
LTg2NywxMSArODg0LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMv
anMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAg
LTg5MiwxNCArOTEwLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0g
YmVnaW4pOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAg
ICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBpZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgbiwgdik7CkBAIC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgewpAQCAtOTMyLDcgKzk1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAK
QEAgLTk2NywxMiArOTg1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGRlbGV0ZUNvdW50OyArK2spIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgaywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgy
LDcgKzEwMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVD
b3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhl
YywgdGhpc09iaiwgayArIGJlZ2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0g
c3RkOjptYXg8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRk
aXRpb25hbEFyZ3MgPCBkZWxldGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlm
dENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0
aW9uYWxBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFk
ZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpT
aGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFk
ZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhp
c09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KGsgKyAyKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAg
LTEwMTMsMjQgKzEwMzEsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlm
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTUuNC40LjEzCiAKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewogICAgICAgICB1bnNoaWZ0PEpTQXJy
YXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
bnJBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBr
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKQEAgLTEw
NDAsMjYgKzEwNjAsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxNS40LjQuMTQKICAgICBK
U09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhl
YywgMSwgbGVuZ3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgSlNW
YWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCkBAIC0xMDY4LDYgKzEwOTAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyAxNS40LjQuMTUKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRo
aXNPYmopCkBAIC0xMDg5LDE4ICsxMTE0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNW
YWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZG8gewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1ZTo6
c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0gd2hpbGUgKGluZGV4LS0pOwogCkBAIC0xMTA5LDIzICsxMTMzLDI1IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogc3RhdGljIGJvb2wgbW92ZUVsZW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2lnbmVkIHRhcmdl
dE9mZnNldCwgSlNBcnJheSogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgpCiB7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWSgh
aGFzQW55QXJyYXlTdG9yYWdlKHNvdXJjZS0+aW5kZXhpbmdUeXBlKCkpICYmICFzb3VyY2UtPnN0
cnVjdHVyZSgpLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzb3VyY2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCBzb3VyY2UsIGkpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAg
ICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCArIGksIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTU0LDcgKzExODAsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4CiAKICAgICBpZiAoIXJl
c3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCkpIHsKICAgICAgICAgaWYgKCFt
b3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKSkg
ewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTk5LDEyICsxMjI1LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICBJbmRleGluZ1R5cGUg
dHlwZSA9IGZpcnN0QXJyYXktPm1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhzZWNvbmRUeXBl
KTsKICAgICBpZiAodHlwZSA9PSBOb25BcnJheSB8fCAhZmlyc3RBcnJheS0+Y2FuRmFzdENvcHko
dm0sIHNlY29uZEFycmF5KSB8fCBmaXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSA+PSBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJh
eVNpemUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAgICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3Vs
dCwgMCwgZmlyc3RBcnJheSwgZmlyc3RBcnJheVNpemUpCiAgICAgICAgICAgICB8fCAhbW92ZUVs
ZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRBcnJheSwgc2Vj
b25kQXJyYXlTaXplKSkgewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTQgQEAgdm9pZCBC
b29sZWFuQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogLy8gRUNNQSAxNS42LjIKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYm9vbGVh
biA9IGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIFN0
cnVjdHVyZSogYm9vbGVhblN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBib29sZWFuU3RydWN0dXJlKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+
dm0oKSwgYm9vbGVhbik7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6
Y3JlYXRlKHZtLCBib29sZWFuU3RydWN0dXJlKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUo
dm0sIGJvb2xlYW4pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkocmV2aXNpb24g
MjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MiwxMCArNDIsMTIgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBmdQogCiBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRh
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0
aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKwor
Ly8gU2VlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgVGhyb3dTY29wZS5jcHAgZm9yIGRldGFpbHMg
b24gaG93IENhdGNoU2NvcGVzIHdvcmsuCisKK0NhdGNoU2NvcGU6OkNhdGNoU2NvcGUoVk0mIHZt
LCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUo
dm0sIEV4Y2VwdGlvbkV2ZW50OjpDYXRjaFNjb3BlRW50cnksIGxvY2F0aW9uKQoreworfQorCitD
YXRjaFNjb3BlOjp+Q2F0Y2hTY29wZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3Rv
cEV4Y2VwdGlvblNjb3BlKTsKKworICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OkNhdGNoU2NvcGVFeGl0LCBtX2RlcHRoLCBtX2xvY2F0
aW9uKTsKKyAgICAKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7CisgICAg
ICAgIGxvZ0V2ZW50SGVhZGVyKEV4Y2VwdGlvbkV2ZW50OjpDYXRjaFNjb3BlRXhpdCwgbV9sb2Nh
dGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKQorICAgICAgICAg
ICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1Ry
YWNlcykKKyAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3ZtLmV4Y2VwdGlvbigpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShF
WENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXRjaFNjb3BlX2gKKyNkZWZpbmUgQ2F0Y2hTY29w
ZV9oCisKKyNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAg
ICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNz
IENhdGNoU2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIENhdGNoU2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAg
ICBDYXRjaFNjb3BlKGNvbnN0IENhdGNoU2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBDYXRjaFNjb3Bl
KENhdGNoU2NvcGUmJikgPSBkZWZhdWx0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhdGNo
U2NvcGUoKTsKKworICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgbV92
bS5tX25lZWRFeGNlcHRpb25DaGVjayA9IGZhbHNlOworICAgICAgICBtX3ZtLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgfQorfTsKKworI2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwK
KyAgICBKU0M6OkNhdGNoU2NvcGUoKHZtX18pLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24o
X19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pKQorCisjZWxzZSAvLyBub3QgRU5BQkxF
KEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisKK2NsYXNzIENhdGNoU2NvcGUgOiBwdWJs
aWMgRXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgQ2F0Y2hTY29w
ZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCisgICAgeyB9CisgICAgQ2F0
Y2hTY29wZShjb25zdCBDYXRjaFNjb3BlJikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRj
aFNjb3BlJiYpID0gZGVmYXVsdDsKKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckV4Y2Vw
dGlvbigpIHsgbV92bS5jbGVhckV4Y2VwdGlvbigpOyB9Cit9OworCisjZGVmaW5lIERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm1fXykgXAorICAgIEpTQzo6Q2F0Y2hTY29wZSgodm1fXykpCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBDYXRjaFNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA1NDg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmlu
ZSBCRUdJTl9OT19TRVRfUEMoKSBcCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCi0g
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpCisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOyBcCisgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7IFwKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSkK
IAogI2lmbmRlZiBOREVCVUcKICNkZWZpbmUgU0VUX1BDX0ZPUl9TVFVCUygpIGRvIHsgXApAQCAt
OTksMTAgKzEwMSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBDSEVDS19FWENFUFRJ
T04oKSBkbyB7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGRvRXhjZXB0aW9uRnV6emlu
Z0lmRW5hYmxlZChleGVjLCAiQ29tbW9uU2xvd1BhdGhzIiwgcGMpOyAgIFwKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkgeyAgICAgICAgICAgXAotICAgICAgICAgICAgUkVU
VVJOX1RPX1RIUk9XKGV4ZWMsIHBjKTsgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkgeyAgIFwKKyAgICAgICAgICAgIFJFVFVSTl9U
T19USFJPVyhleGVjLCBwYyk7ICAgICAgICAgICAgXAogICAgICAgICAgICAgRU5EX0lNUEwoKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5l
IEVORCgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDQsNyArMTQ2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZGVmaW5lIENBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKSBk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEV4ZWNTdGF0ZSogY2NlRXhl
YyA9IChleGVjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIElu
c3RydWN0aW9uKiBjY2VQQyA9IChwYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBDQUxMX0VORF9J
TVBMKGNjZUV4ZWMsIExMSW50OjpjYWxsVG9UaHJvdyhjY2VFeGVjKSk7ICAgICBcCiAgICAgfSB3
aGlsZSAoZmFsc2UpCiAKQEAgLTQyNyw3ICs0MjksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbXVsKQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTVmFs
dWUgcmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxlZnQudG9OdW1i
ZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkp
OwogICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihhICogYik7CkBAIC00NDIsNyArNDQ0LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3N1YikKICAgICBKU1ZhbHVlIGxlZnQgPSBPUF9DKDIpLmpzVmFsdWUoKTsKICAg
ICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7CiAgICAgZG91YmxlIGEgPSBsZWZ0
LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVtYmVyKGV4ZWMpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoYSAtIGIpOwpAQCAtNDU3LDEwICs0NTksMTAgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2RpdikKICAgICBKU1ZhbHVlIGxlZnQgPSBPUF9DKDIpLmpzVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7CiAgICAgZG91Ymxl
IGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBS
RVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVtYmVyKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgLyBiKTsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkco
cmVzdWx0LCB7CkBAIC00NzIsNyArNDc0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX21v
ZCkKIHsKICAgICBCRUdJTigpOwogICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9O
dW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVl
KCkpOwogICAgIGRvdWJsZSBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7CiAg
ICAgUkVUVVJOKGpzTnVtYmVyKGpzTW9kKGEsIGIpKSk7CkBAIC00ODIsMTAgKzQ4NCwxMCBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfcG93KQogewogICAgIEJFR0lOKCk7CiAgICAgZG91Ymxl
IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBPUF9DKDMpLmpz
VmFsdWUoKS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVU
VVJOKEpTVmFsdWUoKSk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKG9wZXJhdGlvbk1hdGhQb3coYSwg
YikpKTsKIH0KQEAgLTQ5NCw3ICs0OTYsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbHNo
aWZ0KQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFs
dWUoKSk7CiAgICAgdWludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMp
OwogICAgIFJFVFVSTihqc051bWJlcihhIDw8IChiICYgMzEpKSk7CkBAIC01MDQsNyArNTA2LDcg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3JzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAg
IGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBP
UF9DKDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA+
PiAoYiAmIDMxKSkpOwpAQCAtNTE0LDcgKzUxNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF91cnNoaWZ0KQogewogICAgIEJFR0lOKCk7CiAgICAgdWludDMyX3QgYSA9IE9QX0MoMikuanNW
YWx1ZSgpLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRV
Uk4oSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50
MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGEgPj4g
KGIgJiAzMSkpKSk7CkBAIC01MzEsNyArNTMzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2JpdGFuZCkKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1
ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihK
U1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGEgJiBiKSk7CkBAIC01NDEsNyArNTQzLDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG9yKQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJf
dCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gT1BfQygzKS5q
c1ZhbHVlKCkudG9JbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSB8IGIpKTsKQEAg
LTU1MSw3ICs1NTMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0eG9yKQogewogICAg
IEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAg
aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKICAgICBSRVRVUk4o
anNOdW1iZXIoYSBeIGIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtODcs
NyArODcsNyBAQCBpbmxpbmUgYm9vbCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1CiAgICAg
ICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBpKTsKIAogICAgIGF1dG8gcHJv
cGVydHkgPSBwcm9wTmFtZS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKEV4
ZWNTdGF0ZSoKIAogICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcik7CiAjaWYg
TExJTlRfU0xPV19QQVRIX1RSQUNJTkcKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24g
Iiwgdm0tPmV4Y2VwdGlvbigpLCAiLlxuIik7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0
aW9uICIsIHNjb3BlLmV4Y2VwdGlvbigpLCAiLlxuIik7CiAjZW5kaWYKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NywxNiArODcsMTkgQEAgYm9vbCBjaGVja01vZHVsZVN5bnRheChF
eGVjU3RhdGUqIGV4ZWMsIAogCiBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0
aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0
ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlYy0+dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkg
PT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKICAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUo
c291cmNlKTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1
dGFibGU6OmNyZWF0ZShleGVjLCBzb3VyY2UpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSB8fCBwcm9ncmFtKTsKICAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAgICAgcmV0dXJuZWRFeGNl
cHRpb24gPSBleGVjLT52bSgpLmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT52bSgpLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIApAQCAtMTA1LDkgKzEwOCw5IEBAIEpTVmFsdWUgZXZhbHVhdGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCAKICAgICBKU09iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxK
U09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVj
LCB0aGlzT2JqKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBy
ZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICByZXR1
cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTE0
Nyw5ICsxNTAsMTEgQEAgc3RhdGljIFN5bWJvbCogY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludAog
CiBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIHJlamVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEFTU0VSVChleGVjLT5oYWRF
eGNlcHRpb24oKSk7Ci0gICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+
dmFsdWUoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5l
eGNlcHRpb24oKS0+dmFsdWUoKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIEpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgZGVmZXJyZWQtPnJlamVjdChl
eGVjLCBleGNlcHRpb24pOwogICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwpAQCAtMTc2
LDE3ICsxODEsMTkgQEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZQog
CiBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIGluaXRpYXRvcikKIHsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0
b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkp
OwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
dm0uYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFi
bGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAotICAg
IFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZShleGVjLT52bSgp
KTsKKyAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUodm0p
OwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKTsKIAogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhl
IE1vZHVsZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KICAg
ICBnbG9iYWxPYmplY3QtPm1vZHVsZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwgSlNNb2R1
bGVMb2FkZXI6OlN0YXR1czo6RmV0Y2gsIHNvdXJjZS52aWV3KCkudG9TdHJpbmcoKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAKICAgICByZXR1cm4gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9i
amVjdCwga2V5LCBqc1VuZGVmaW5lZCgpLCBpbml0aWF0b3IpOwpAQCAtMjEzLDE4ICsyMjAsMjAg
QEAgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRNb2R1bGUoRXhlY1N0YXRlKgogCiBKU0ludGVybmFs
UHJvbWlzZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgSlNWYWx1ZSBpbml0aWF0b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0
ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlYy0+dm0oKS5pc0NvbGxlY3RvckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkg
PT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5
bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBj
cmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJ
bnNlcnQgdGhlIGdpdmVuIHNvdXJjZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkg
YXMgdGhlIGZldGNoZWQgcmVnaXN0cnkgZW50cnkuCiAgICAgLy8gRklYTUU6IEludHJvZHVjZSBK
U1NvdXJjZUNvZGUgb2JqZWN0IHRvIHdyYXAgYXJvdW5kIHRoaXMgc291cmNlLgogICAgIGdsb2Jh
bE9iamVjdC0+bW9kdWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01vZHVsZUxvYWRl
cjo6U3RhdHVzOjpGZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0KTsKIAogICAg
IHJldHVybiBsb2FkTW9kdWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9iamVjdCwga2V5LCBqc1VuZGVm
aW5lZCgpLCBpbml0aWF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc29sZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc29sZU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTYsMTIgKzE5NiwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNB
c3NlcnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQq
IGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwog
ICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgYm9vbCBjb25kaXRpb24gPSBleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xl
YW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBpZiAoY29uZGl0aW9uKQpAQCAtMjI1LDYgKzIyNyw4IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Byb2ZpbGUoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjM2LDcg
KzI0MCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9
CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGNsaWVudC0+cHJv
ZmlsZShleGVjLCB0aXRsZSk7CkBAIC0yNDUsNiArMjQ5LDggQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yNTYsNyArMjYyLDcgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIGNvbnN0
IFN0cmluZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVj
LCBleGVjLT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY2xpZW50LT5wcm9maWxlRW5kKGV4ZWMs
IHRpdGxlKTsKQEAgLTI2NSw2ICsyNzEsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNv
bGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTI3Niw3ICsyODQsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3Ry
aW5nJiB0aXRsZSh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4
ZWMtPmFyZ3VtZW50KDApKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBjbGllbnQtPnRha2VIZWFwU25hcHNob3QoZXhl
YywgdGl0bGUpOwpAQCAtMjkyLDYgKzMwMCw4IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVPckRlZmF1
bHRMYWJlbFN0cmluZygKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c29sZVByb3RvRnVuY1RpbWUoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENv
bnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29s
ZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzAxLDcgKzMxMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgdGl0bGUgPSBBU0NJSUxpdGVyYWwoImRl
ZmF1bHQiKTsKICAgICBlbHNlIHsKICAgICAgICAgdGl0bGUgPSB2YWx1ZU9yRGVmYXVsdExhYmVs
U3RyaW5nKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAK
QEAgLTMxMSw2ICszMjEsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNUaW1lRW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xp
ZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQo
KTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTMyMCw3ICszMzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHRpdGxlID0gIEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdCIp
OwogICAgIGVsc2UgewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmco
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgc3RhdGlj
IGRvdWJsZSBtaWxsaXNlY29uZHNGcm9tQ29tcG9uZW50cwogSlNPYmplY3QqIGNvbnN0cnVjdERh
dGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQg
bnVtQXJncyA9IGFyZ3Muc2l6ZSgpOwogCiAgICAgZG91YmxlIHZhbHVlOwpAQCAtMTY3LDcgKzE2
OCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
dmFsdWUgPSBtaWxsaXNlY29uZHNGcm9tQ29tcG9uZW50cyhleGVjLCBhcmdzLCBXVEY6OkxvY2Fs
VGltZSk7CiAKICAgICBTdHJ1Y3R1cmUqIGRhdGVTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+
ZGF0ZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVl
KTsKQEAgLTIwMiwxMCArMjAzLDEyIEBAIENhbGxUeXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2Fs
bERhdGEoSlMKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmluZyBkYXRlU3RyID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIocGFyc2VEYXRlKGV4ZWMtPnZtKCksIGRhdGVTdHIpKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihwYXJzZURhdGUodm0sIGRhdGVTdHIp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMyw3ICs2MDMsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnVuY1RvUHJpbWl0aXZlU3ltYm9sKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52
bSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiRGF0ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0
aXZlXSBleHBlY3RlZCB8dGhpc3wgdG8gYmUgYW4gb2JqZWN0LiIpOwpAQCAtNjE0LDcgKzYxNSw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIEpTVmFs
dWUgaGludFZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSB0eXBlID0gdG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKGV4ZWMsIGhpbnRW
YWx1ZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKIAogICAgIGlmICh0eXBlID09IE5vUHJlZmVyZW5jZSkKQEAgLTExMjMsMjAgKzExMjQs
MjEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOwor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMo
ZXhlYywgTm90U3RyaWN0TW9kZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUgdGltZVZhbHVlID0gb2JqZWN0LT50
b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBpZiAodGltZVZhbHVlLmlzTnVtYmVy
KCkgJiYgISh0aW1lVmFsdWUuaXNJbnQzMigpIHx8IHN0ZDo6aXNmaW5pdGUodGltZVZhbHVlLmFz
RG91YmxlKCkpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAK
LSAgICBKU1ZhbHVlIHRvSVNPVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPnRvSVNPU3RyaW5nKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgSlNWYWx1ZSB0b0lTT1ZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+dG9JU09TdHJpbmcpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CkBAIC0xMTQ1LDcgKzExNDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIikpOwog
CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGFzT2JqZWN0KHRvSVNPVmFsdWUpLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBpZiAocmVz
dWx0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoInRvSVNPU3RyaW5nIGRpZCBub3QgcmV0dXJuIGEgcHJpbWl0aXZl
IHZhbHVlIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw5ICs1MCwxMSBAQCB2b2lkIEVycm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhF
cnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6
IGpzVW5kZWZpbmVkKCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJy
b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhp
bmcsIGZhbHNlKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2
ICsxNTgsNyBAQCB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTCiBTdHJp
bmcgRXJyb3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBuYW1lVmFsdWU7CiAgICAgYXV0byBuYW1lUHJvcGVy
dE5hbWUgPSB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lOwpAQCAtMTc3LDE0ICsxNzgsMTQgQEAgU3Ry
aW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKAogICAgICAgICB9CiAgICAgICAg
IGN1cnJlbnRPYmogPSBvYmotPmdldFByb3RvdHlwZURpcmVjdCgpOwogICAgIH0KLSAgICBBU1NF
UlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgIFN0cmluZyBuYW1lU3RyaW5nOwogICAgIGlmICghbmFtZVZhbHVlKQogICAgICAgICBuYW1l
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJFcnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1l
U3RyaW5nID0gbmFtZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIApAQCAtMTkzLDE0ICsx
OTQsMTQgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKAogICAgIFBy
b3BlcnR5U2xvdCBtZXNzYWdlU2xvdCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5KTsKICAgICBpZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzLCBleGVjLCBtZXNzYWdlUHJvcGVydE5hbWUsIG1lc3NhZ2VTbG90KSAmJiBtZXNzYWdlU2xv
dC5pc1ZhbHVlKCkpCiAgICAgICAgIG1lc3NhZ2VWYWx1ZSA9IG1lc3NhZ2VTbG90LmdldFZhbHVl
KGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0TmFtZSk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZVN0
cmluZzsKICAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IFN0
cmluZygpOwogICAgIGVsc2UgewogICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZVZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQ
cm90b0YKIAogICAgIC8vIDMuIExldCBuYW1lIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUg
W1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJuYW1lIi4KICAgICBK
U1ZhbHVlIG5hbWUgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5h
bWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgLy8gNC4gSWYgbmFtZSBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG5hbWUg
YmUgIkVycm9yIjsgZWxzZSBsZXQgbmFtZSBiZSBUb1N0cmluZyhuYW1lKS4KQEAgLTk0LDEzICs5
NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAg
IG5hbWVTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAg
IG5hbWVTdHJpbmcgPSBuYW1lLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAKICAgICAvLyA1LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJtZXNzYWdl
Ii4KICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLm1lc3NhZ2UpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gKHNpYykKQEAgLTExMSw3ICsxMTEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG1lc3Nh
Z2VTdHJpbmcgPSBTdHJpbmcoKTsKICAgICBlbHNlIHsKICAgICAgICAgbWVzc2FnZVN0cmluZyA9
IG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkV2ZW50LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5oIgorCisjaWYgRU5BQkxFKEVYQ0VQVElP
Tl9TQ09QRV9WRVJJRklDQVRJT04pCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdURiB7CisgICAgCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgSlNDOjpFeGNlcHRpb25FdmVudCBldmVudCkKK3sKKyAgICBjb25zdCBjaGFyKiBldmVudE5h
bWU7CisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6
Q2F0Y2hTY29wZUVudHJ5OgorICAgICAgICBldmVudE5hbWUgPSAiQ2F0Y2hTY29wZSBFbnRyeSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29w
ZUV4aXQ6CisgICAgICAgIGV2ZW50TmFtZSA9ICJDYXRjaFNjb3BlIEV4aXQiOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEpTQzo6RXhjZXB0aW9uRXZlbnQ6Ok5lZWRFeGNlcHRpb25DaGVjazoK
KyAgICAgICAgZXZlbnROYW1lID0gIk5lZWQgZXhjZXB0aW9uIGNoZWNrIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnk6CisgICAg
ICAgIGV2ZW50TmFtZSA9ICJUaHJvd1Njb3BlIEVudHJ5IjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBKU0M6OkV4Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRXhpdDoKKyAgICAgICAgZXZlbnRO
YW1lID0gIlRocm93U2NvcGUgRXhpdCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpF
eGNlcHRpb25FdmVudDo6VGhyb3c6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvdyI7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIG91dC5wcmludChldmVudE5hbWUpOworfQorICAgIAor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZF
UklGSUNBVElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uRXZlbnQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK2VudW0gY2xhc3MgRXhjZXB0aW9uRXZlbnQgeworICAgIENhdGNoU2NvcGVF
bnRyeSwKKyAgICBDYXRjaFNjb3BlRXhpdCwKKyAgICBOZWVkRXhjZXB0aW9uQ2hlY2ssCisgICAg
VGhyb3dTY29wZUVudHJ5LAorICAgIFRocm93U2NvcGVFeGl0LAorICAgIFRocm93Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisgICAgCitjbGFzcyBQcmludFN0
cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpFeGNlcHRpb25F
dmVudCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElP
Tl9TQ09QRV9WRVJJRklDQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAgb3V0
LnByaW50KGxvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIsIGxvY2F0aW9uLmZpbGUsICI6Iiwg
bG9jYXRpb24ubGluZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bi5oCShyZXZpc2lvbiAyMDU0ODUpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Rocm93U2NvcGVMb2NhdGlvbi5oOjIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9u
IHsKKyAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0KKyAgICBUaHJvd1Njb3BlTG9jYXRpb24o
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5l
KQorICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCisgICAgICAgICwgZmlsZShm
aWxlKQorICAgICAgICAsIGxpbmUobGluZSkKKyAgICB7IH0KKyAgICAKKyAgICBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07CisgICAgY29uc3QgY2hhciogZmlsZSB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBsaW5lIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDkgKzI3LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBUaHJvd1Njb3BlTG9j
YXRpb24gewotICAgIFRocm93U2NvcGVMb2NhdGlvbigpIHsgfQotICAgIFRocm93U2NvcGVMb2Nh
dGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVk
IGxpbmUpCitzdHJ1Y3QgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiB7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbigpIHsgfQorICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQogICAgICAgICA6
IGZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAgICAgICAgICwgZmlsZShmaWxlKQogICAgICAg
ICAsIGxpbmUobGluZSkKQEAgLTQxLDMgKzQxLDExIEBAIHN0cnVjdCBUaHJvd1Njb3BlTG9jYXRp
b24gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworICAgIAor
Y2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRl
ZiBFeGNlcHRpb25IZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKKyNpbmNs
dWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGhyb3dTY29wZS5oIgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRp
b25TY29wZS5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
ICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorRXhj
ZXB0aW9uU2NvcGU6OkV4Y2VwdGlvblNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnQgZW50cnlF
dmVudCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKKyAgICA6IG1fdm0odm0pCisg
ICAgLCBtX3ByZXZpb3VzU2NvcGUodm0ubV90b3BFeGNlcHRpb25TY29wZSkKKyAgICAsIG1fbG9j
YXRpb24obG9jYXRpb24pCisgICAgLCBtX2RlcHRoKG1fcHJldmlvdXNTY29wZSA/IG1fcHJldmlv
dXNTY29wZS0+bV9kZXB0aCArIDEgOiAwKQoreworICAgIG1fdm0ubV90b3BFeGNlcHRpb25TY29w
ZSA9IHRoaXM7CisgICAgCisgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50cykgewor
ICAgICAgICBsb2dFdmVudEhlYWRlcihlbnRyeUV2ZW50LCBtX2xvY2F0aW9uKTsKKyAgICAgICAg
aWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCisgICAgICAgICAgICBkYXRhTG9nKCIsIG5l
ZWRzIGNoZWNrIik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgIAorICAgICAgICBp
ZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICAg
ICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7CisgICAgfQorfQorCitFeGNlcHRpb25TY29wZTo6fkV4
Y2VwdGlvblNjb3BlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9u
U2NvcGUpOworICAgIG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSA9IG1fcHJldmlvdXNTY29wZTsK
K30KKwordm9pZCBFeGNlcHRpb25TY29wZTo6bG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQgZXZlbnQs
IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAgbG9nRXZlbnRIZWFkZXIo
ZXZlbnQsIGxvY2F0aW9uKTsKKyAgICBkYXRhTG9nKCJcbiIpOworfQorCit2b2lkIEV4Y2VwdGlv
blNjb3BlOjpsb2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudCBldmVudCwgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBsb2NhdGlvbikKK3sKKyAgICBkYXRhTG9nKCI8IiwgbV92bS5tX2V4Y2VwdGlv
bkV2ZW50Q291bnQrKywgIj4gWyIsIG1fZGVwdGgsICJdICIsIGV2ZW50LCAiOiAiLCBsb2NhdGlv
bik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikK
KyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRXhjZXB0aW9uU2NvcGVfaAorI2RlZmluZSBFeGNlcHRpb25TY29wZV9oCisKKyNp
bmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbjsK
KyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2Ns
YXNzIEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVy
biBtX3ZtOyB9CisgICAgdW5zaWduZWQgZGVwdGgoKSBjb25zdCB7IHJldHVybiBtX2RlcHRoOyB9
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgbV92bS5tX25lZWRF
eGNlcHRpb25DaGVjayA9IGZhbHNlOworICAgICAgICByZXR1cm4gbV92bS5leGNlcHRpb24oKTsK
KyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgRXhjZXB0aW9uU2NvcGUoVk0mLCBFeGNlcHRp
b25FdmVudCBlbnRyeUV2ZW50LCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICBFeGNlcHRp
b25TY29wZShjb25zdCBFeGNlcHRpb25TY29wZSYpID0gZGVsZXRlOworICAgIEV4Y2VwdGlvblNj
b3BlKEV4Y2VwdGlvblNjb3BlJiYpID0gZGVmYXVsdDsKKyAgICB+RXhjZXB0aW9uU2NvcGUoKTsK
KworICAgIHZvaWQgbG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRp
b24pOworICAgIHZvaWQgbG9nRXZlbnRIZWFkZXIoRXhjZXB0aW9uRXZlbnQsIEV4Y2VwdGlvbkV2
ZW50TG9jYXRpb24pOworCisgICAgVk0mIG1fdm07CisgICAgRXhjZXB0aW9uU2NvcGUqIG1fcHJl
dmlvdXNTY29wZTsKKyAgICBFeGNlcHRpb25FdmVudExvY2F0aW9uIG1fbG9jYXRpb247CisgICAg
dW5zaWduZWQgbV9kZXB0aDsKK307CisgICAgCisjZWxzZSAvLyBub3QgRU5BQkxFKEVYQ0VQVElP
Tl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJs
aWM6CisgICAgQUxXQVlTX0lOTElORSBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Cisg
ICAgQUxXQVlTX0lOTElORSBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIHsgcmV0dXJuIG1fdm0uZXhj
ZXB0aW9uKCk7IH0KKworcHJvdGVjdGVkOgorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uU2Nv
cGUoVk0mIHZtKQorICAgICAgICA6IG1fdm0odm0pCisgICAgeyB9CisgICAgRXhjZXB0aW9uU2Nv
cGUoY29uc3QgRXhjZXB0aW9uU2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShF
eGNlcHRpb25TY29wZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBWTSYgbV92bTsKK307CisgICAgCisj
ZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEV4Y2VwdGlvblNjb3BlX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBA
IEpTT2JqZWN0KiBjb25zdHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEUKICAgICB9CiAKICAgICBT
dHJ1Y3R1cmUqIHN1YmNsYXNzU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3Ry
dWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJl
dHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGZ1bmN0aW9uLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlKCksIHN1YmNsYXNzU3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQ4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAvLyBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBwcm9w
ZXJ0eSBvZiBGIHRvIDAuCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBpZiAodGFyZ2V0
T2JqZWN0LT5oYXNPd25Qcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3Ro
KSkgewotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIC8vIGEuIExldCBMIGJlIHRoZSBsZW5ndGgg
cHJvcGVydHkgb2YgVGFyZ2V0IG1pbnVzIHRoZSBsZW5ndGggb2YgQS4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDEzICsyMTks
MTYgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpkZWZpbmVPd25QcgogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgVHlw
ZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpICsgb2Zmc2V0KSkKICAgICAgICAgICAgIGV4ZWMtPnIoZmly
c3RFbGVtZW50RGVzdCArIGkpID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZz
ZXQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVz
dCArIGkpID0gZ2V0KGV4ZWMsIGkgKyBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5j
cHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
dHRlclNldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE1ICs3MywxNyBAQCBHZXR0ZXJT
ZXR0ZXIqIEdldHRlclNldHRlcjo6d2l0aFNldHRlcihWCiAKIEpTVmFsdWUgY2FsbEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgLy8gRklYTUU6IFNvbWUgY2FsbGVycyBtYXkgaW52b2tlIGdldCgpIHdp
dGhvdXQgY2hlY2tpbmcgZm9yIGFuIGV4Y2VwdGlvbiBmaXJzdC4KICAgICAvLyBXZSB3b3JrIGFy
b3VuZCB0aGF0IGJ5IGNoZWNraW5nIGhlcmUuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4gZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlv
bigpLT52YWx1ZSgpOwogCiAgICAgSlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0
ZXIqPihnZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0dGVyLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXR0ZXItPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CiAg
ICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJhc2UsIEFy
Z0xpc3QoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsMTEg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Q6OmRpcwogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExvZyhFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBTdHJpbmcgdmFsdWUgPSB0YXJnZXQudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGRhdGFMb2codmFsdWUsICJcbiIpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA1NDg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDcgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9u
OjpjcmVhdGVTdWJjbAogewogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gV2UgYWxsb3cgbmV3VGFyZ2V0
ID09IEpTVmFsdWUoKSBiZWNhdXNlIHRoZSBBUEkgbmVlZHMgdG8gYmUgYWJsZSB0byBjcmVhdGUg
Y2xhc3NlcyB3aXRob3V0IGhhdmluZyBhIHJlYWwgSlMgZnJhbWUuCiAgICAgLy8gU2luY2Ugd2Ug
ZG9uJ3QgYWxsb3cgc3ViY2xhc3NpbmcgaW4gdGhlIEFQSSB3ZSBqdXN0IHRyZWF0IG5ld1Rhcmdl
dCA9PSBKU1ZhbHVlKCkgYXMgbmV3VGFyZ2V0ID09IGV4ZWMtPmNhbGxlZSgpCiAgICAgQVNTRVJU
KCFuZXdUYXJnZXQgfHwgbmV3VGFyZ2V0LmlzQ29uc3RydWN0b3IoKSk7CkBAIC0xMTIsMTMgKzEx
MywxMyBAQCBTdHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsCiAKICAgICAg
ICAgICAgIC8vIE5vdGUsIFJlZmxlY3QuY29uc3RydWN0IG1pZ2h0IGNhdXNlIHRoZSBwcm9maWxl
IHRvIGNodXJuIGJ1dCB3ZSBkb24ndCBjYXJlLgogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5
cGVWYWx1ZSA9IG5ld1RhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3Rv
dHlwZSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHByb3RvdHlwZVZhbHVlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0RnVuY3Rpb24tPnJhcmVEYXRhKHZtKS0+Y3JlYXRlSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZSh2bSwgcHJvdG90eXBlLCBiYXNlQ2xhc3MpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5l
d1RhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAg
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U09iamVjdCo+KHByb3RvdHlwZVZhbHVlKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgb25s
eSBoYXBwZW5zIGlmIHNvbWVvbmUgUmVmbGVjdC5jb25zdHJ1Y3RzIG91ciBidWlsdGluIGNvbnN0
cnVjdG9yIHdpdGggYW5vdGhlciBidWlsdGluIGNvbnN0cnVjdG9yIGFzIHRoZSBuZXcudGFyZ2V0
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3Iu
Y3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRsQ29sbGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDkgQEAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHNlYXJjaExvY2FsZURhdGEoYwogCiB2b2lkIEludGxDb2xsYXRvcjo6
aW5pdGlhbGl6ZUNvbGxhdG9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgbG9jYWxlcywgSlNW
YWx1ZSBvcHRpb25zVmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4xLjEgSW5pdGlh
bGl6ZUNvbGxhdG9yIChjb2xsYXRvciwgbG9jYWxlcywgb3B0aW9ucykgKEVDTUEtNDAyIDIuMCkK
ICAgICAvLyAxLiBJZiBjb2xsYXRvciBoYXMgYW4gW1tpbml0aWFsaXplZEludGxPYmplY3RdXSBp
bnRlcm5hbCBzbG90IHdpdGggdmFsdWUgdHJ1ZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9u
LgogICAgIC8vIDIuIFNldCBjb2xsYXRvci5bW2luaXRpYWxpemVkSW50bE9iamVjdF1dIHRvIHRy
dWUuCkBAIC0xNjksNyArMTcyLDcgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xs
YXRvcihFeAogICAgIC8vIDMuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxv
Y2FsZUxpc3QobG9jYWxlcykuCiAgICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2Fs
aXplTG9jYWxlTGlzdChzdGF0ZSwgbG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQo
cmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IDUuIElmIG9wdGlvbnMgaXMgdW5kZWZpbmVkLCB0aGVuCkBAIC0xODEsMTQgKzE4NCwxNCBAQCB2
b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgICAgIC8vIGEuIExl
dCBvcHRpb25zIGJlIFRvT2JqZWN0KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9u
c1ZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9w
dGlvbnMpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgLy8gNy4gTGV0IHUgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJ1c2FnZSIsICJzdHJpbmci
LCDCqyJzb3J0IiwgInNlYXJjaCLCuywgInNvcnQiKS4KLSAgICBTdHJpbmcgdXNhZ2VTdHJpbmcg
PSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFt
ZXMtPnVzYWdlLCB7ICJzb3J0IiwgInNlYXJjaCIgfSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwi
c29ydFwiIG9yIFwic2VhcmNoXCIiLCAic29ydCIpOworICAgIFN0cmluZyB1c2FnZVN0cmluZyA9
IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdl
LCB7ICJzb3J0IiwgInNlYXJjaCIgfSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9y
IFwic2VhcmNoXCIiLCAic29ydCIpOwogICAgIC8vIDguIFJldHVybklmQWJydXB0KHUpLgotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gOS4gU2V0IGNvbGxhdG9yLltbdXNhZ2Vd
XSB0byB1LgogICAgIGlmICh1c2FnZVN0cmluZyA9PSAic29ydCIpCkBAIC0yMTIsOSArMjE1LDkg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IG9wdDsKIAogICAgIC8vIDEzLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRp
b24ob3B0aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwgImJlc3Qg
Zml0IsK7LCAiYmVzdCBmaXQiKS4KLSAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hl
ciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhl
ciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOworICAgIFN0cmluZyBt
YXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hl
ciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIp
OwogICAgIC8vIDE0LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIC8vIDE1LiBTZXQgb3B0LltbbG9jYWxlTWF0Y2hlcl1dIHRvIG1hdGNo
ZXIuCiAgICAgb3B0LmFkZChBU0NJSUxpdGVyYWwoImxvY2FsZU1hdGNoZXIiKSwgbWF0Y2hlcik7
CkBAIC0yMzMsMTYgKzIzNiwxNiBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxh
dG9yKEV4CiAgICAgewogICAgICAgICBTdHJpbmcgbnVtZXJpY1N0cmluZzsKICAgICAgICAgYm9v
bCB1c2VzRmFsbGJhY2s7Ci0gICAgICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPm51bWVyaWMsIHVzZXNG
YWxsYmFjayk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgYm9v
bCBudW1lcmljID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5
TmFtZXMtPm51bWVyaWMsIHVzZXNGYWxsYmFjayk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghdXNlc0Zh
bGxiYWNrKQogICAgICAgICAgICAgbnVtZXJpY1N0cmluZyA9IEFTQ0lJTGl0ZXJhbChudW1lcmlj
ID8gInRydWUiIDogImZhbHNlIik7CiAgICAgICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJrbiIp
LCBudW1lcmljU3RyaW5nKTsKICAgICB9CiAgICAgewotICAgICAgICBTdHJpbmcgY2FzZUZpcnN0
ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5h
bWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0
IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBudWxs
cHRyKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBTdHJpbmcg
Y2FzZUZpcnN0ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+Y2FzZUZpcnN0LCB7ICJ1cHBlciIsICJsb3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJz
dCBtdXN0IGJlIGVpdGhlciBcInVwcGVyXCIsIFwibG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVs
bHB0cik7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJrZiIpLCBjYXNlRmly
c3QpOwogICAgIH0KQEAgLTI3Nyw5ICsyODAsOSBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlh
bGl6ZUNvbGxhdG9yKEV4CiAgICAgbV9udW1lcmljID0gKHJlc3VsdC5nZXQoQVNDSUlMaXRlcmFs
KCJrbiIpKSA9PSAidHJ1ZSIpOwogCiAgICAgLy8gMjQuIExldCBzIGJlIEdldE9wdGlvbihvcHRp
b25zLCAic2Vuc2l0aXZpdHkiLCAic3RyaW5nIiwgwqsiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIs
ICJ2YXJpYW50IsK7LCB1bmRlZmluZWQpLgotICAgIFN0cmluZyBzZW5zaXRpdml0eVN0cmluZyA9
IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1l
cy0+c2Vuc2l0aXZpdHksIHsgImJhc2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCIgfSwg
InNlbnNpdGl2aXR5IG11c3QgYmUgZWl0aGVyIFwiYmFzZVwiLCBcImFjY2VudFwiLCBcImNhc2Vc
Iiwgb3IgXCJ2YXJpYW50XCIiLCBudWxscHRyKTsKKyAgICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJp
bmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5z
ZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9LCAic2Vu
c2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBv
ciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOwogICAgIC8vIDI1LiBSZXR1cm5JZkFicnVwdChzKS4K
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDI2LiBJZiBzIGlzIHVuZGVmaW5l
ZCwgdGhlbgogICAgIC8vIGEuIElmIHUgaXMgInNvcnQiLCB0aGVuIGxldCBzIGJlICJ2YXJpYW50
Ii4KQEAgLTMwMCwxMSArMzAzLDExIEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29s
bGF0b3IoRXgKIAogICAgIC8vIDI4LiBMZXQgaXAgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJpZ25v
cmVQdW5jdHVhdGlvbiIsICJib29sZWFuIiwgdW5kZWZpbmVkLCBmYWxzZSkuCiAgICAgYm9vbCB1
c2VzRmFsbGJhY2s7Ci0gICAgYm9vbCBpZ25vcmVQdW5jdHVhdGlvbiA9IGludGxCb29sZWFuT3B0
aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0
dWF0aW9uLCB1c2VzRmFsbGJhY2spOworICAgIGJvb2wgaWdub3JlUHVuY3R1YXRpb24gPSBpbnRs
Qm9vbGVhbk9wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVu
Y3R1YXRpb24sIHVzZXNGYWxsYmFjayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAg
aWdub3JlUHVuY3R1YXRpb24gPSBmYWxzZTsKICAgICAvLyAyOS4gUmV0dXJuSWZBYnJ1cHQoaXAp
LgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMzAuIFNldCBjb2xsYXRvci5b
W2lnbm9yZVB1bmN0dWF0aW9uXV0gdG8gaXAuCiAgICAgbV9pZ25vcmVQdW5jdHVhdGlvbiA9IGln
bm9yZVB1bmN0dWF0aW9uOwpAQCAtMzE4LDExICszMjEsMTMgQEAgdm9pZCBJbnRsQ29sbGF0b3I6
OmluaXRpYWxpemVDb2xsYXRvcihFeAogCiB2b2lkIEludGxDb2xsYXRvcjo6Y3JlYXRlQ29sbGF0
b3IoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBBU1NFUlQoIW1fY29sbGF0
b3IpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkQ29sbGF0b3IpIHsKICAgICAgICAgaW5pdGlh
bGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgVUVycm9yQ29kZSBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7CkBAIC00MTYsNiArNDIxLDkgQEAgY29uc3QgY2hhciogSW50bENv
bGxhdG9yOjpzZW5zaXRpdml0eVN0cgogCiBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZl
ZE9wdGlvbnMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEwLjMu
NSBJbnRsLkNvbGxhdG9yLnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMoKSAoRUNNQS00MDIgMi4w
KQogICAgIC8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCB3aG9zZSBwcm9wZXJ0
aWVzIGFuZCBhdHRyaWJ1dGVzIGFyZSBzZXQgYXMgaWYKICAgICAvLyBjb25zdHJ1Y3RlZCBieSBh
biBvYmplY3QgbGl0ZXJhbCBhc3NpZ25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3Bl
cnRpZXMgdGhlCkBAIC00MjcsMTAgKzQzNSw5IEBAIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJl
c29sdmVkT3B0aW9ucygKIAogICAgIGlmICghbV9pbml0aWFsaXplZENvbGxhdG9yKSB7CiAgICAg
ICAgIGluaXRpYWxpemVDb2xsYXRvcihzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmc3RhdGUpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlLCBqc1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51c2FnZSwganNOb250cml2aWFsU3RyaW5nKCZz
dGF0ZSwgQVNDSUlMaXRlcmFsKHVzYWdlU3RyaW5nKG1fdXNhZ2UpKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Mywx
NCArODMsMTYgQEAgdm9pZCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYQogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3Io
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTAuMS4yIEludGwuQ29s
bGF0b3IgKFtsb2NhbGVzIFssIG9wdGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJ
ZiBOZXdUYXJnZXQgaXMgdW5kZWZpbmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVu
Y3Rpb24gb2JqZWN0LCBlbHNlIGxldCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIu
IExldCBjb2xsYXRvciBiZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQs
ICVDb2xsYXRvclByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGNvbGxhdG9y
KS4KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKHN0YXRlLCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRsQ29s
bGF0b3JDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPmNvbGxhdG9yU3RydWN0dXJlKCkp
OwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKLSAgICBJbnRsQ29sbGF0b3IqIGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUo
c3RhdGUtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IElu
dGxDb2xsYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjb2xsYXRvcik7
CiAKICAgICAvLyA0LiBSZXR1cm4gSW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2NhbGVz
LCBvcHRpb25zKS4KQEAgLTEzNCwxMyArMTM2LDE1IEBAIENhbGxUeXBlIEludGxDb2xsYXRvckNv
bnN0cnVjdG9yOjpnZXRDYWwKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29s
bGF0b3JDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTAuMi4yIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9j
YWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBM
ZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgog
ICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVM
aXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJy
dXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRM
b2NhbGVzKCVDb2xsYXRvciUuW1thdmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3RlZExvY2FsZXMs
IG9wdGlvbnMpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw2ICs3OCw4IEBAIHZvaWQgSW50bENvbGxhdG9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGkKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENv
bGxhdG9yRnVuY0NvbXBhcmUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ly8gMTAuMy40IENvbGxhdG9yIENvbXBhcmUgRnVuY3Rpb25zIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gMS4gTGV0IGNvbGxhdG9yIGJlIHRoZSB0aGlzIHZhbHVlLgogICAgIC8vIDIuIEFzc2VydDog
VHlwZShjb2xsYXRvcikgaXMgT2JqZWN0IGFuZCBjb2xsYXRvciBoYXMgYW4gW1tpbml0aWFsaXpl
ZENvbGxhdG9yXV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSBpcyB0cnVlLgpAQCAtODgsMTMg
KzkwLDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAgICAv
LyA1LiBMZXQgWCBiZSBUb1N0cmluZyh4KS4KICAgICBKU1N0cmluZyogeCA9IHN0YXRlLT5hcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSk7CiAgICAgLy8gNi4gUmV0dXJuSWZBYnJ1cHQoWCkuCi0g
ICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgLy8gNy4gTGV0IFkgYmUgVG9TdHJpbmcoeSkuCiAgICAgSlNTdHJpbmcqIHkgPSBz
dGF0ZS0+YXJndW1lbnQoMSkudG9TdHJpbmcoc3RhdGUpOwogICAgIC8vIDguIFJldHVybklmQWJy
dXB0KFkpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIC8vIDkuIFJldHVybiBDb21wYXJlU3RyaW5ncyhjb2xsYXRvciwg
WCwgWSkuCkBAIC0xMjIsNyArMTI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJ
bnRsQ29sbGF0bwogCiAgICAgICAgIC8vIGMuIExldCBiYyBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRl
KEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRDb21wYXJlID0gSlNCb3VuZEZ1bmN0
aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgY29sbGF0
b3IsIG51bGxwdHIsIDIsIEFTQ0lJTGl0ZXJhbCgiY29tcGFyZSIpKTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAv
LyBkLiBTZXQgY29sbGF0b3IuW1tib3VuZENvbXBhcmVdXSB0byBiYy4KICAgICAgICAgY29sbGF0
b3ItPnNldEJvdW5kQ29tcGFyZSh2bSwgYm91bmRDb21wYXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVU
aW1lRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSw3IEBAIHN0YXRpYyBK
U09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKIHsKICAgICAvLyAxMi4xLjEgVG9EYXRl
VGltZU9wdGlvbnMgYWJzdHJhY3Qgb3BlcmF0aW9uIChFQ01BLTQwMiAyLjApCiAgICAgVk0mIHZt
ID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIC8vIDEuIElmIG9wdGlvbnMgaXMgdW5kZWZpbmVkLCB0aGVuIGxldCBvcHRpb25zIGJl
IG51bGwsIGVsc2UgbGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgLy8gMi4g
UmV0dXJuSWZBYnJ1cHQob3B0aW9ucykuCkBAIC0yMjQsNyArMjI1LDcgQEAgc3RhdGljIEpTT2Jq
ZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0
RW1wdHlPYmplY3QoJmV4ZWMsIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90
eXBlT2JqZWN0U3RydWN0dXJlKCkpOwogICAgIGVsc2UgewogICAgICAgICBKU09iamVjdCogb3Jp
Z2luYWxUb09iamVjdCA9IG9yaWdpbmFsT3B0aW9ucy50b09iamVjdCgmZXhlYyk7Ci0gICAgICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG9wdGlvbnMg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYywgb3JpZ2luYWxUb09iamVjdCk7CiAgICAgfQpA
QCAtMjQxLDI1ICsyNDIsMjUgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0Fu
eURhdAogICAgIC8vIGlpaS4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2
YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCiAg
ICAgSlNWYWx1ZSB3ZWVrZGF5ID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT53ZWVrZGF5KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IXdlZWtkYXkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAK
ICAgICBKU1ZhbHVlIHllYXIgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PnllYXIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgheWVh
ci5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAgIEpT
VmFsdWUgbW9udGggPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRo
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1vbnRoLmlz
VW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1
ZSBkYXkgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmRheSk7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFkYXkuaXNVbmRlZmluZWQo
KSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CkBAIC0yNzMsMTkgKzI3NCwxOSBAQCBz
dGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgLy8gaWlpLiBSZXR1
cm5JZkFicnVwdCh2YWx1ZSkuCiAgICAgLy8gaXYuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQs
IHRoZW4gbGV0IG5lZWREZWZhdWx0cyBiZSBmYWxzZS4KICAgICBKU1ZhbHVlIGhvdXIgPSBvcHRp
b25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIpOwotICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghaG91ci5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgbWludXRlID0gb3B0aW9ucy0+
Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5taW51dGUpOwotICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmICghbWludXRlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBzZWNvbmQgPSBvcHRpb25zLT5n
ZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNlY29uZCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFzZWNvbmQuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
bmVlZERlZmF1bHRzID0gZmFsc2U7CkBAIC0yOTksMTUgKzMwMCwxNSBAQCBzdGF0aWMgSlNPYmpl
Y3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgICAgIEpTU3RyaW5nKiBudW1lcmljID0g
anNOb250cml2aWFsU3RyaW5nKCZleGVjLCBBU0NJSUxpdGVyYWwoIm51bWVyaWMiKSk7CiAKICAg
ICAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBudW1l
cmljKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoLCBu
dW1lcmljKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwg
bnVtZXJpYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCkBAIC00MjgsMTMgKzQyOSwxMyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25p
Y2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRM
b2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChleGVjLCBsb2NhbGVzKTsKICAgICAvLyA0
LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKSwKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyA1LiBMZXQgb3B0aW9ucyBiZSBUb0RhdGVUaW1lT3B0aW9ucyhvcHRp
b25zLCAiYW55IiwgImRhdGUiKS4KICAgICBKU09iamVjdCogb3B0aW9ucyA9IHRvRGF0ZVRpbWVP
cHRpb25zQW55RGF0ZShleGVjLCBvcmlnaW5hbE9wdGlvbnMpOwogICAgIC8vIDYuIFJldHVybklm
QWJydXB0KG9wdGlvbnMpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDcu
IExldCBvcHQgYmUgYSBuZXcgUmVjb3JkLgpAQCAtNDQzLDcgKzQ0NCw3IEBAIHZvaWQgSW50bERh
dGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyA4LiBMZXQgbWF0Y2hlciBiZSBH
ZXRPcHRpb24ob3B0aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwg
ImJlc3QgZml0IsK7LCAiYmVzdCBmaXQiKS4KICAgICBTdHJpbmcgbG9jYWxlTWF0Y2hlciA9IGlu
dGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0
Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVp
dGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDku
IFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAvLyAxMC4gU2V0IG9wdC5bW2xvY2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIGxvY2Fs
ZU9wdC5hZGQodm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlci5zdHJpbmcoKSwgbG9jYWxl
TWF0Y2hlcik7CkBAIC00NzIsNyArNDczLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6Omlu
aXRpYWxpemVEYXRlVAogICAgIC8vIDE3LiBMZXQgdHogYmUgR2V0KG9wdGlvbnMsICJ0aW1lWm9u
ZSIpLgogICAgIEpTVmFsdWUgdHpWYWx1ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+dGltZVpvbmUpOwogICAgIC8vIDE4LiBSZXR1cm5JZkFicnVwdCh0eikuCi0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gMTkuIElmIHR6IGlzIG5vdCB1bmRlZmlu
ZWQsIHRoZW4KQEAgLTQ4MSw3ICs0ODIsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5p
dGlhbGl6ZURhdGVUCiAgICAgICAgIC8vIGEuIExldCB0eiBiZSBUb1N0cmluZyh0eikuCiAgICAg
ICAgIFN0cmluZyBvcmlnaW5hbFR6ID0gdHpWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAg
ICAgIC8vIGIuIFJldHVybklmQWJydXB0KHR6KS4KLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIC8vIGMuIElmIHRoZSByZXN1bHQgb2YgSXNWYWxpZFRpbWVa
b25lTmFtZSh0eikgaXMgZmFsc2UsIHRoZW4gaS4gVGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlv
bi4KICAgICAgICAgLy8gZC4gTGV0IHR6IGJlIENhbm9uaWNhbGl6ZVRpbWVab25lTmFtZSh0eiku
CkBAIC01MTQsNyArNTE1LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVE
YXRlVAogICAgIGF1dG8gc2hvcnRMb25nID0geyAic2hvcnQiLCAibG9uZyIgfTsKIAogICAgIFN0
cmluZyB3ZWVrZGF5ID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0
eU5hbWVzLT53ZWVrZGF5LCBuYXJyb3dTaG9ydExvbmcsICJ3ZWVrZGF5IG11c3QgYmUgXCJuYXJy
b3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIXdlZWtkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHdl
ZWtkYXkgPT0gIm5hcnJvdyIpCkBAIC01MjYsNyArNTI3LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVG
b3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyBlcmEgPSBpbnRsU3Ry
aW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwgbmFycm93U2hv
cnRMb25nLCAiZXJhIG11c3QgYmUgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIs
IG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWVyYS5pc051
bGwoKSkgewogICAgICAgICBpZiAoZXJhID09ICJuYXJyb3ciKQpAQCAtNTM4LDcgKzUzOSw3IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBT
dHJpbmcgeWVhciA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlO
YW1lcy0+eWVhciwgdHdvRGlnaXROdW1lcmljLCAieWVhciBtdXN0IGJlIFwiMi1kaWdpdFwiIG9y
IFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGlmICgheWVhci5pc051bGwoKSkgewogICAgICAgICBpZiAoeWVhciA9PSAiMi1kaWdpdCIpCkBA
IC01NDgsNyArNTQ5LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRl
VAogICAgIH0KIAogICAgIFN0cmluZyBtb250aCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bW9udGgsIHR3b0RpZ2l0TnVtZXJpY05hcnJvd1Nob3J0
TG9uZywgIm1vbnRoIG11c3QgYmUgXCIyLWRpZ2l0XCIsIFwibnVtZXJpY1wiLCBcIm5hcnJvd1wi
LCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmICghbW9udGguaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1vbnRoID09
ICIyLWRpZ2l0IikKQEAgLTU2NCw3ICs1NjUsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGRheSA9IGludGxTdHJpbmdPcHRp
b24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+ZGF5LCB0d29EaWdpdE51bWVyaWMs
ICJkYXkgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWRheS5pc051bGwoKSkgewogICAgICAg
ICBpZiAoZGF5ID09ICIyLWRpZ2l0IikKQEAgLTU3NCw3ICs1NzUsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGhvdXIgPSBp
bnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIsIHR3
b0RpZ2l0TnVtZXJpYywgImhvdXIgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIs
IG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG5lZWQg
aG91cjEyIHRvIG1ha2UgdGhlIGhvdXIgc2tlbGV0b24gcGF0dGVybiBkZWNpc2lvbiwgc28gZG8g
dGhpcyBlYXJseS4KQEAgLTU4Miw3ICs1ODMsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6
aW5pdGlhbGl6ZURhdGVUCiAgICAgYm9vbCBpc0hvdXIxMlVuZGVmaW5lZDsKICAgICBib29sIGhy
MTIgPSBpbnRsQm9vbGVhbk9wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5o
b3VyMTIsIGlzSG91cjEyVW5kZWZpbmVkKTsKICAgICAvLyAzMy4gUmV0dXJuSWZBYnJ1cHQoaHIx
MikuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFob3VyLmlzTnVsbCgp
KSB7CkBAIC02MDUsNyArNjA2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxp
emVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyBtaW51dGUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4
ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0ZSwgdHdvRGlnaXROdW1lcmljLCAi
bWludXRlIG11c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAg
ICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtaW51dGUuaXNOdWxsKCkpIHsKICAg
ICAgICAgaWYgKG1pbnV0ZSA9PSAiMi1kaWdpdCIpCkBAIC02MTUsNyArNjE2LDcgQEAgdm9pZCBJ
bnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyBz
ZWNvbmQgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMt
PnNlY29uZCwgdHdvRGlnaXROdW1lcmljLCAic2Vjb25kIG11c3QgYmUgXCIyLWRpZ2l0XCIgb3Ig
XCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCFzZWNvbmQuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHNlY29uZCA9PSAiMi1kaWdpdCIp
CkBAIC02MjUsNyArNjI2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVE
YXRlVAogICAgIH0KIAogICAgIFN0cmluZyB0aW1lWm9uZU5hbWUgPSBpbnRsU3RyaW5nT3B0aW9u
KGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnRpbWVab25lTmFtZSwgc2hvcnRMb25n
LCAidGltZVpvbmVOYW1lIG11c3QgYmUgXCJzaG9ydFwiIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7
Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdGltZVpvbmVOYW1lLmlzTnVs
bCgpKSB7CiAgICAgICAgIGlmICh0aW1lWm9uZU5hbWUgPT0gInNob3J0IikKQEAgLTYzOSw3ICs2
NDAsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8g
MjYuIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAiZm9ybWF0TWF0Y2hlciIsICJz
dHJpbmciLCDCqyJiYXNpYyIsICJiZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAgICAgaW50bFN0
cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5mb3JtYXRNYXRjaGVy
LCB7ICJiYXNpYyIsICJiZXN0IGZpdCIgfSwgImZvcm1hdE1hdGNoZXIgbXVzdCBiZSBlaXRoZXIg
XCJiYXNpY1wiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDI3LiBSZXR1
cm5JZkFicnVwdChtYXRjaGVyKS4KLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBBbHdheXMgdXNlIElDVSBkYXRlIGZvcm1hdCBnZW5lcmF0b3IsIHJhdGhlciB0aGFuIG91ciBv
d24gcGF0dGVybiBsaXN0IGFuZCBtYXRjaGVyLgpAQCAtODM0LDE1ICs4MzUsMTcgQEAgY29uc3Qg
Y2hhciogSW50bERhdGVUaW1lRm9ybWF0Ojp0aW1lWm9uZQogCiBKU09iamVjdCogSW50bERhdGVU
aW1lRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBleGVjKQogeworICAgIFZNJiB2
bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICAvLyAxMi4zLjUgSW50bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRP
cHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5l
dyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFzIGlmIGNv
bnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBm
b2xsb3dpbmcgcHJvcGVydGllcyB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJu
YWwgc2xvdCBvZiB0aGlzIERhdGVUaW1lRm9ybWF0IG9iamVjdCAoc2VlIDEyLjQpOiBsb2NhbGUs
IGNhbGVuZGFyLCBudW1iZXJpbmdTeXN0ZW0sIHRpbWVab25lLCBob3VyMTIsIHdlZWtkYXksIGVy
YSwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGFuZCB0aW1lWm9uZU5h
bWUuIFByb3BlcnRpZXMgd2hvc2UgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90cyBhcmUgbm90
IHByZXNlbnQgYXJlIG5vdCBhc3NpZ25lZC4KICAgICAvLyBOb3RlOiBJbiB0aGlzIHZlcnNpb24g
b2YgdGhlIEVDTUFTY3JpcHQgMjAxNSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEksIHRoZSB0aW1l
Wm9uZSBwcm9wZXJ0eSB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRpbWUgem9uZSBp
ZiBubyB0aW1lWm9uZSBwcm9wZXJ0eSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0
IHByb3ZpZGVkIHRvIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yLiBUaGUgcHJl
dmlvdXMgdmVyc2lvbiBsZWZ0IHRoZSB0aW1lWm9uZSBwcm9wZXJ0eSB1bmRlZmluZWQgaW4gdGhp
cyBjYXNlLgogICAgIGlmICghbV9pbml0aWFsaXplZERhdGVUaW1lRm9ybWF0KSB7CiAgICAgICAg
IGluaXRpYWxpemVEYXRlVGltZUZvcm1hdChleGVjLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYg
dm0gPSBleGVjLnZtKCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdCgmZXhlYyk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5sb2NhbGUsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9sb2NhbGUpKTsKICAgICBvcHRp
b25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGVuZGFyLCBqc05vbnRyaXZp
YWxTdHJpbmcoJmV4ZWMsIG1fY2FsZW5kYXIpKTsKQEAgLTg4OSw3ICs4OTIsNyBAQCBKU1ZhbHVl
IEludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0KEV4ZWNTCiAgICAgLy8gMTIuMy40IEZvcm1hdERh
dGVUaW1lIGFic3RyYWN0IG9wZXJhdGlvbiAoRUNNQS00MDIgMi4wKQogICAgIGlmICghbV9pbml0
aWFsaXplZERhdGVUaW1lRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVEYXRlVGltZUZvcm1h
dChleGVjLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgQVNTRVJUKCFl
eGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgfQogCiAgICAgLy8gMS4gSWYgeCBpcyBub3QgYSBmaW5pdGUgTnVtYmVyLCB0aGVuIHRo
cm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDE0ICs4MywxNiBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpmaW5pCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxEYXRlVGlt
ZUZvcm1hdChFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMi4xLjIg
SW50bC5EYXRlVGltZUZvcm1hdCAoW2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4w
KQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUg
dGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJn
ZXQuCiAgICAgLy8gMi4gTGV0IGRhdGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNv
bnN0cnVjdG9yKG5ld1RhcmdldCwgJURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSkuCiAgICAgLy8g
My4gUmV0dXJuSWZBYnJ1cHQoZGF0ZVRpbWVGb3JtYXQpLgogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0
YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yKj4o
c3RhdGUtPmNhbGxlZSgpKS0+ZGF0ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIElu
dGxEYXRlVGltZUZvcm1hdCogZGF0ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNy
ZWF0ZShzdGF0ZS0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRh
dGVUaW1lRm9ybWF0ID0gSW50bERhdGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CiAgICAgQVNTRVJUKGRhdGVUaW1lRm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFs
aXplRGF0ZVRpbWVGb3JtYXQoZGF0ZVRpbWVGb3JtYXQsIGxvY2FsZXMsIG9wdGlvbnMpLgpAQCAt
MTM0LDYgKzEzNiw4IEBAIENhbGxUeXBlIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjoK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1
Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgLy8gMTIuMi4yIEludGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09m
KGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZh
aWxhYmxlTG9jYWxlcyBiZSAlRGF0ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgpA
QCAtMTQyLDcgKzE0Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVU
aW0KIAogICAgIC8vIDIuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2Fs
ZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNh
bm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlm
IChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVl
c3RlZExvY2FsZXMsIG9wdGlvbnMpLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0
ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBA
IHZvaWQgSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlOjpmaW5pc2gKIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVU
aW1lKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjMuNCBEYXRl
VGltZSBGb3JtYXQgRnVuY3Rpb25zIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gTGV0IGR0ZiBi
ZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUoZHRmKSBpcyBPYmplY3Qg
YW5kIGR0ZiBoYXMgYW4gW1tpbml0aWFsaXplZERhdGVUaW1lRm9ybWF0XV0gaW50ZXJuYWwgc2xv
dCB3aG9zZSB2YWx1ZSBpcyB0cnVlLgpAQCAtOTksNyArMTAxLDcgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgICAgICAvLyBhLiBMZXQgeCBiZSBUb051bWJl
cihkYXRlKS4KICAgICAgICAgdmFsdWUgPSBkYXRlLnRvTnVtYmVyKHN0YXRlKTsKICAgICAgICAg
Ly8gYi4gUmV0dXJuSWZBYnJ1cHQoeCkuCi0gICAgICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTM4
LDcgKzE0MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAog
ICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFs
dWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0s
IHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEsIEFT
Q0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBkdGYuW1tib3Vu
ZEZvcm1hdF1dIHRvIGJmLgogICAgICAgICBkdGYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZv
cm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9y
bWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
TnVtYmVyRm9ybWF0LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3
ICsxNjQsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAg
Ly8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2Nh
bGVzKS4KICAgICBhdXRvIHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0
KHN0YXRlLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2Nh
bGVzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gSWYgb3B0aW9u
cyBpcyB1bmRlZmluZWQsIHRoZW4KQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJlIFRv
T2JqZWN0KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2JqZWN0
KCZzdGF0ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODYsNyArMTg2
LDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDgu
IExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJp
bmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmluZyBt
YXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hl
ciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIp
OwogICAgIC8vIDkuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gMTAuIFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hl
ci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsK
QEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1i
ZXJGCiAgICAgLy8gMTYuIExldCBzIGJlIEdldE9wdGlvbihvcHRpb25zLCAic3R5bGUiLCAic3Ry
aW5nIiwgwqsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSLCuywgImRlY2ltYWwiKS4K
ICAgICBTdHJpbmcgc3R5bGVTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAicGVy
Y2VudCIsICJjdXJyZW5jeSIgfSwgInN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBc
InBlcmNlbnRcIiwgb3IgXCJjdXJyZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICAvLyAxNy4gUmV0
dXJuSWZBYnJ1cHQocykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxOC4g
U2V0IG51bWJlckZvcm1hdC5bW3N0eWxlXV0gdG8gcy4KICAgICBpZiAoc3R5bGVTdHJpbmcgPT0g
ImRlY2ltYWwiKQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5p
dGlhbGl6ZU51bWJlckYKICAgICAvLyAxOS4gTGV0IGMgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJj
dXJyZW5jeSIsICJzdHJpbmciLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuCiAgICAgU3RyaW5nIGN1
cnJlbmN5ID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sICJjdXJyZW5jeSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAgIC8v
IDIwLiBSZXR1cm5JZkFicnVwdChjKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IC8vIDIxLiBJZiBjIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIWN1cnJlbmN5Lmlz
TnVsbCgpKSB7CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0
aWFsaXplTnVtYmVyRgogICAgIC8vIDI0LiBMZXQgY2QgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJj
dXJyZW5jeURpc3BsYXkiLCAic3RyaW5nIiwgwqsiY29kZSIsICJzeW1ib2wiLCAibmFtZSLCuywg
InN5bWJvbCIpLgogICAgIFN0cmluZyBjdXJyZW5jeURpc3BsYXlTdHJpbmcgPSBpbnRsU3RyaW5n
T3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJl
bmN5RGlzcGxheSIpLCB7ICJjb2RlIiwgInN5bWJvbCIsICJuYW1lIiB9LCAiY3VycmVuY3lEaXNw
bGF5IG11c3QgYmUgZWl0aGVyIFwiY29kZVwiLCBcInN5bWJvbFwiLCBvciBcIm5hbWVcIiIsICJz
eW1ib2wiKTsKICAgICAvLyAyNS4gUmV0dXJuSWZBYnJ1cHQoY2QpLgotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgLy8gMjYuIElmIHMgaXMgImN1cnJlbmN5Iiwgc2V0IG51bWJlckZv
cm1hdC5bW2N1cnJlbmN5RGlzcGxheV1dIHRvIGNkLgogICAgIGlmIChtX3N0eWxlID09IFN0eWxl
OjpDdXJyZW5jeSkgewpAQCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAyOC4gUmV0dXJuSWZBYnJ1cHQobW5pZCkuCiAgICAg
Ly8gMjkuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtSW50ZWdlckRpZ2l0c11dIHRvIG1uaWQu
CiAgICAgdW5zaWduZWQgbWluaW11bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2Vy
RGlnaXRzIiksIDEsIDIxLCAxKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1f
bWluaW11bUludGVnZXJEaWdpdHMgPSBtaW5pbXVtSW50ZWdlckRpZ2l0czsKIApAQCAtMjgyLDcg
KzI4Miw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAv
LyAzMi4gUmV0dXJuSWZBYnJ1cHQobW5mZCkuCiAgICAgLy8gMzMuIFNldCBudW1iZXJGb3JtYXQu
W1ttaW5pbXVtRnJhY3Rpb25EaWdpdHNdXSB0byBtbmZkLgogICAgIHVuc2lnbmVkIG1pbmltdW1G
cmFjdGlvbkRpZ2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5p
bXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIG1fbWluaW11bUZyYWN0aW9uRGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwogCkBA
IC0yOTksMjAgKzI5OSwyMCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1i
ZXJGCiAgICAgLy8gMzYuIFJldHVybklmQWJydXB0KG14ZmQpLgogICAgIC8vIDM3LiBTZXQgbnVt
YmVyRm9ybWF0LltbbWF4aW11bUZyYWN0aW9uRGlnaXRzXV0gdG8gbXhmZC4KICAgICB1bnNpZ25l
ZCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBt
aW5pbXVtRnJhY3Rpb25EaWdpdHMsIDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWF4aW11bUZyYWN0aW9uRGlnaXRz
ID0gbWF4aW11bUZyYWN0aW9uRGlnaXRzOwogCiAgICAgLy8gMzguIExldCBtbnNkIGJlIEdldChv
cHRpb25zLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtaW5pbXVt
U2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIC8vIDM5
LiBSZXR1cm5JZkFicnVwdChtbnNkKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gNDAuIExldCBteHNkIGJlIEdldChvcHRpb25zLCAibWF4aW11bVNpZ25pZmljYW50RGln
aXRzIikuCiAgICAgSlNWYWx1ZSBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlv
bnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25p
ZmljYW50RGlnaXRzIikpOwogICAgIC8vIDQxLiBSZXR1cm5JZkFicnVwdChteHNkKS4KLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNDIuIElmIG1uc2QgaXMgbm90IHVuZGVm
aW5lZCBvciBteHNkIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTMyMCwxMiArMzIwLDEyIEBA
IHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAgICAgLy8gYS4g
TGV0IG1uc2QgYmUgR2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnRE
aWdpdHMiLCAxLCAyMSwgMSkuCiAgICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibWluaW11bVNpZ25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAgICAg
ICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQobW5zZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gTGV0IG14c2QgYmUgR2V0TnVtYmVyT3B0aW9u
KG9wdGlvbnMsICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiLCBtbnNkLCAyMSwgMjEpLgogICAg
ICAgICB1bnNpZ25lZCBtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWdu
aWZpY2FudERpZ2l0cyIpLCBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CiAgICAg
ICAgIC8vIGQuIFJldHVybklmQWJydXB0KG14c2QpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIGUuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVt
U2lnbmlmaWNhbnREaWdpdHNdXSB0byBtbnNkLgogICAgICAgICBtX21pbmltdW1TaWduaWZpY2Fu
dERpZ2l0cyA9IG1pbmltdW1TaWduaWZpY2FudERpZ2l0czsKQEAgLTMzOSw3ICszMzksNyBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgaWYgKHVzZXNGYWxs
YmFjaykKICAgICAgICAgdXNlR3JvdXBpbmcgPSB0cnVlOwogICAgIC8vIDQ0LiBSZXR1cm5JZkFi
cnVwdChnKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDQ1LiBTZXQgbnVt
YmVyRm9ybWF0LltbdXNlR3JvdXBpbmddXSB0byBnLgogICAgIG1fdXNlR3JvdXBpbmcgPSB1c2VH
cm91cGluZzsKQEAgLTM2MSwxMSArMzYxLDE0IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5p
dGlhbGl6ZU51bWJlckYKIAogdm9pZCBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGVOdW1iZXJGb3Jt
YXQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghbV9udW1i
ZXJGb3JtYXQpOwogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KSB7CiAgICAg
ICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBV
TnVtYmVyRm9ybWF0U3R5bGUgc3R5bGU7CkBAIC00NzksNiArNDgyLDkgQEAgY29uc3QgY2hhciog
SW50bE51bWJlckZvcm1hdDo6Y3VycmVuY3lEaQogCiBKU09iamVjdCogSW50bE51bWJlckZvcm1h
dDo6cmVzb2x2ZWRPcHRpb25zKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICAvLyAxMS4zLjUgSW50bC5OdW1iZXJGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygp
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0
IHdob3NlIHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8vIGNv
bnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBm
b2xsb3dpbmcgcHJvcGVydGllcyB0aGUKQEAgLTQ5MCwxMCArNDk2LDkgQEAgSlNPYmplY3QqIElu
dGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0aQogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVt
YmVyRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5k
ZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBvcHRp
b25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBtX2xvY2Fs
ZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJudW1iZXJpbmdTeXN0ZW0iKSwganNTdHJpbmcoJnN0YXRlLCBtX251bWJlcmluZ1N5c3Rl
bSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1h
dENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywxNCArODMsMTYgQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Q29uc3RydWN0b3I6OmZpbmlzaAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIC8vIDExLjEuMiBJbnRsLk51bWJlckZvcm1hdCAoW2xvY2FsZXMgWywg
b3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRl
ZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2Ug
bGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBi
ZSBPcmRpbmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQ
cm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NT
dHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJGb3Jt
YXRDb25zdHJ1Y3Rvcio+KHN0YXRlLT5jYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZv
cm1hdDo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxOdW1iZXJGb3Jt
YXQqIG51bWJlckZvcm1hdCA9IEludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
KTsKICAgICBBU1NFUlQobnVtYmVyRm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFs
aXplTnVtYmVyRm9ybWF0KG51bWJlckZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzQs
NiArMTM2LDggQEAgQ2FsbFR5cGUgSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1
bmNTdXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgLy8gMTEuMi4yIEludGwuTnVtYmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVz
IFssIG9wdGlvbnNdKSAoRUNNQS00MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxv
Y2FsZXMgYmUgJU51bWJlckZvcm1hdCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCkBAIC0xNDIsNyAr
MTQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAgICAg
Ly8gMi4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2Nh
bGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXpl
TG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4g
UmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxl
cywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlOjpmaW5pc2hDcgogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1hdE51bWJlcihFeGVjU3RhdGUqIHN0YXRl
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4zLjQgRm9ybWF0IE51bWJlciBGdW5jdGlvbnMg
KEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgbmYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAg
Ly8gMi4gQXNzZXJ0OiBUeXBlKG5mKSBpcyBPYmplY3QgYW5kIG5mIGhhcyBhbiBbW2luaXRpYWxp
emVkTnVtYmVyRm9ybWF0XV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSAgdHJ1ZS4KQEAgLTg5
LDcgKzkxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAg
IC8vIDQuIExldCB4IGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICBkb3VibGUgbnVtYmVyID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvTnVtYmVyKHN0YXRlKTsKICAgICAvLyA1LiBSZXR1cm5JZkFicnVw
dCh4KS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KQEAgLTEy
Niw3ICsxMjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGCiAK
ICAgICAgICAgLy8gYy4gTGV0IGJmIGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlzIHZh
bHVlwrspLgogICAgICAgICBib3VuZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB0YXJnZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEsIEFT
Q0lJTGl0ZXJhbCgiZm9ybWF0IikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBuZi5bW2JvdW5k
Rm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIG5mLT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRGb3Jt
YXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5j
cHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDkgQEAgdm9pZCBjb252
ZXJ0SUNVTG9jYWxlVG9CQ1A0N0xhbmd1YWdlVGFnKAogCiBib29sIGludGxCb29sZWFuT3B0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5
LCBib29sJiB1c2VzRmFsbGJhY2spCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyA5LjIuOSBHZXRP
cHRpb24gKG9wdGlvbnMsIHByb3BlcnR5LCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8v
IEZvciB0eXBlPSJib29sZWFuIi4gdmFsdWVzIGlzIGFsd2F5cyB1bmRlZmluZWQuCiAKQEAgLTEz
MSwxNCArMTM0LDE0IEBAIGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwK
ICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAgIC8v
IDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyAzLiBMZXQgdmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KICAgICBK
U1ZhbHVlIHZhbHVlID0gb3B0cy0+Z2V0KCZzdGF0ZSwgcHJvcGVydHkpOwogCiAgICAgLy8gNC4g
UmV0dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xNzMsMTQg
KzE3NiwxNCBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAgICAg
SlNPYmplY3QqIG9wdHMgPSBvcHRpb25zLnRvT2JqZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAyLiBS
ZXR1cm5JZkFicnVwdChvcHRzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUg
dmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5J
ZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAv
LyA1LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xOTMsNyArMTk2LDcgQEAg
U3RyaW5nIGludGxTdHJpbmdPcHRpb24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogCiAgICAgICAgIC8vIGlp
LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAKICAgICAgICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmluZWQs
IHRoZW4KQEAgLTIyMSwxNCArMjI0LDE0IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oRXhl
Y1N0YXRlJiBzdGEKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRl
KTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkp
LgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAg
ICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgLy8gNS4gSWYgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjM2
LDcgKzIzOSw3IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oRXhlY1N0YXRlJiBzdGEKICAg
ICAgICAgLy8gYS4gTGV0IHZhbHVlIGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICAgICAgZG91Ymxl
IGRvdWJsZVZhbHVlID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0
dXJuSWZBYnJ1cHQodmFsdWUpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgLy8gMS4gSWYgdmFsdWUgaXMgTmFOIG9yIGxlc3MgdGhhbiBtaW5pbXVt
IG9yIGdyZWF0ZXIgdGhhbiBtYXhpbXVtLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgog
ICAgICAgICBpZiAoIShkb3VibGVWYWx1ZSA+PSBtaW5pbXVtICYmIGRvdWJsZVZhbHVlIDw9IG1h
eGltdW0pKSB7CkBAIC01NTcsMTYgKzU2MCwxNiBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxp
emVMb2NhbGVMaXN0KEV4CiAgICAgfQogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgLy8gNi4g
TGV0IGxlbiBiZSBUb0xlbmd0aChHZXQoTywgImxlbmd0aCIpKS4KICAgICBKU1ZhbHVlIGxlbmd0
aFByb3BlcnR5ID0gbG9jYWxlc09iamVjdC0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAK
ICAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyBLZWVw
IHRyYWNrIG9mIGxvY2FsZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCkBAIC01
ODIsNyArNTg1LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeAog
ICAgICAgICBib29sIGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoJnN0YXRl
LCBrKTsKIAogICAgICAgICAvLyBjLiBSZXR1cm5JZkFicnVwdChrUHJlc2VudCkuCi0gICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAg
ICAgIC8vIGQuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KQEAgLTU5MSw3ICs1OTQsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgICAgICBKU1Zh
bHVlIGtWYWx1ZSA9IGxvY2FsZXNPYmplY3QtPmdldCgmc3RhdGUsIGspOwogCiAgICAgICAgICAg
ICAvLyBpaS4gUmV0dXJuSWZBYnJ1cHQoa1ZhbHVlKS4KLSAgICAgICAgICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAg
ICAgIC8vIGlpaS4gSWYgVHlwZShrVmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvciBleGNlcHRpb24uCkBAIC02MDQsNyArNjA3LDcgQEAgVmVjdG9yPFN0cmlu
Zz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeAogICAgICAgICAgICAgSlNTdHJpbmcqIHRhZyA9
IGtWYWx1ZS50b1N0cmluZygmc3RhdGUpOwogCiAgICAgICAgICAgICAvLyB2LiBSZXR1cm5JZkFi
cnVwdCh0YWcpLgotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gdmkuIElmIElzU3RydWN0
dXJhbGx5VmFsaWRMYW5ndWFnZVRhZyh0YWcpIGlzIGZhbHNlLCB0aHJvdyBhIFJhbmdlRXJyb3Ig
ZXhjZXB0aW9uLgpAQCAtOTM0LDYgKzkzNyw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhF
eGVjU3RhdGUmIHN0YXQKIHsKICAgICAvLyA5LjIuOCBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKQogICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0
cmluZyBtYXRjaGVyOwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0
aGVuCkBAIC05NDEsNyArOTQ1LDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0
ZSYgc3RhdAogICAgICAgICAvLyBhLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywg
ImxvY2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsgImxvb2t1cCIsICJiZXN0IGZpdCIgwrssICJi
ZXN0IGZpdCIpLgogICAgICAgICBtYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3Qg
Zml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVz
dCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtYXRj
aGVyKS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUgImJl
c3QgZml0Ii4KQEAgLTk2MSw3ICs5NjUsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhl
Y1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBsb29rdXBTdXBwb3J0ZWRM
b2NhbGVzKHN0YXRlLCBhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKICAgICB9
CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyA2
LiBMZXQgc3Vic2V0IGJlIENyZWF0ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcykuCkBA
IC05NzAsNyArOTc0LDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3Rh
dAogICAgIC8vIDcuIExldCBrZXlzIGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCkuCiAg
ICAgUHJvcGVydHlOYW1lQXJyYXkga2V5cygmc3RhdGUsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MpOwogICAgIHN1cHBvcnRlZExvY2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVk
TG9jYWxlcywgJnN0YXRlLCBrZXlzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRl
c2M7CkBAIC05ODcsNyArOTkxLDcgQEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0
ZSYgc3RhdAogICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShzdXBw
b3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXNbaV0sIGRlc2MsIHRydWUpOwogCiAgICAgICAgIC8v
IGMuIEFzc2VydDogc3RhdHVzIGlzIG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KLSAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxpbmVz
LmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNyBAQCBKU1Zh
bHVlIGNvbnN0cnVjdEludGxJbnN0YW5jZVdpdGhXb3JrYXJvCiAgICAgLy8gRklYTUU6IFdvcmth
cm91bmQgdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBw
bHkgcGF0dGVybnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MzY3OQogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEludGxJbnN0
YW5jZSo+KHRoaXNWYWx1ZSkpIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxsZWUt
PmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAgaWYg
KEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoJnN0YXRlLCB0aGlzVmFsdWUsIHByb3RvdHlw
ZSkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2Jq
ZWN0KCZzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICBJbnRsSW5zdGFuY2UqIGluc3Rh
bmNlID0gZmFjdG9yeSh2bSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0
dXRlVmFsdWVQcml2YXRlTmFtZSgpLCBpbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgSlNWYWx1ZSBpdGVyYXRv
ck5leHQoRXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm5leHQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwpAQCAt
NTMsNyArNTMsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAg
ICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5h
cHBlbmQodmFsdWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rp
b24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3Is
IG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNPYmplY3QoKSkKQEAgLTgwLDExICs4MCwx
NCBAQCBib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiBleGVjLCBKCiAKIEpTVmFsdWUg
aXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9y
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYm9vbCBk
b25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1bHQpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbihmYWxzZSk7CkBAIC05NywxMiArMTAwLDEzIEBAIHZvaWQgaXRlcmF0b3JDbG9zZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlv
bigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9u
KCk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAgICAgSlNW
YWx1ZSByZXR1cm5GdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5yZXR1cm5LZXl3b3JkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYg
KHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTEyOSw3ICsxMzMsNyBAQCB2b2lk
IGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbm5lclJlc3Vs
dC5pc09iamVjdCgpKSB7CkBAIC0xNjcsNyArMTcxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0
ZXJhYmxlKEV4ZWNTdGF0ZSogcwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICAKICAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQo
c3RhdGUsIHN0YXRlLT5wcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlmIChz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC0xNzksNyArMTgzLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZv
ckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwogCiAgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJn
dW1lbnRzOwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1bmN0
aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwg
aXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOwotICAgIGlmIChzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNs
dWRlICJUaHJvd1Njb3BlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyMCArNDgsMjIg
QEAgdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxCYWNrVHlwZT4KIHZvaWQgZm9yRWFjaEluSXRlcmFi
bGUoRXhlY1N0YXRlKiBzdGF0ZSwgSlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tUeXBl
JiBjYWxsYmFjaykKIHsKICAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBp
dGVyYXRvckZvckl0ZXJhYmxlKHN0YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0
ZXAoc3RhdGUsIGl0ZXJhdG9yKTsKLSAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpIHx8IHZtLmV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgbmV4
dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShzdGF0ZSwgbmV4dCk7Ci0gICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICBjYWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1ZSk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLCBpdGVy
YXRvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU0LDcgKzY1NCw3IEBAIEpTVmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGdldEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBlbGVt
ZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qg
b2YgTyB3aXRoIGFyZ3VtZW50IGluZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMs
IGluZGV4KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
Ly8gQ2FsbCB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50
cyBpbmR4IGFuZCB0cnVlLgogICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4
ZWMsIGluZGV4KSkgewpAQCAtNzA2LDcgKzcwNiw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJS
QVlfSU5ERVgpIHsKICAgICAgICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlz
LCBleGVjLCBsZW5ndGgsIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC03MjYsNyArNzI2LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCA+IE1B
WF9BUlJBWV9JTkRFWCkgewogICAgICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4
KHRoaXMsIGV4ZWMsIGxlbmd0aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIEpTQXJyYXk6
OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIAogICAgICAgICBpZiAobGVuZ3Ro
ID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5
SW5kZXgodGhpcywgZXhlYywgbGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24o
KSkKICAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgSlNB
cnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgb2xkTGVu
Z3RoID0gbGVuZ3RoKCk7CiAgICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAg
IGlmIChhdHRlbXB0VG9JbnRlcmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwg
dmFsdWUsIHRydWUsIHB1dFJlc3VsdCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkgJiYgb2xkTGVuZ3RoIDwgMHhGRkZGRkZGRnUpCisgICAgICAgICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpICYmIG9sZExlbmd0aCA8IDB4RkZGRkZGRkZ1KQogICAgICAgICAgICAg
ICAgIHNldExlbmd0aChleGVjLCBvbGRMZW5ndGggKyAxLCB0cnVlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4gTUFY
X0FSUkFZX0lOREVYKSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgo
dGhpcywgZXhlYywgc3RvcmFnZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAg
IC8vIFBlciBFUzUuMSAxNS40LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAg
ICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3Bl
LmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3Bl
LCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5n
dGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMjU3LDYgKzEyNTcs
OSBAQCB2b2lkIEpTQXJyYXk6OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSlNB
cnJheTo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZp
cnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgdW5zaWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHZlY3RvcjsKICAgICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkBAIC0xMzIxLDcgKzEzMjQs
NyBAQCB2b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAgICAg
Zm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERl
c3QgKyBpIC0gb2Zmc2V0KSA9IGdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4
ZWMtPnZtKCkuZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyAr
ODgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgdW5z
aWduZWQgbGVuZ3RoOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAg
bGVuZ3RoID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50
YXRpb24gZG9lc24ndCBzYXkgc28sIGl0IGlzIGluIGZhY3QgY29ycmVjdCB0byBzYXkKQEAgLTEw
Miw3ICsxMDIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKSk7CiAKICAgICBTdHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50ZXJu
YWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0
KCksIGNvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGFy
cmF5QnVmZmVyU3RydWN0dXJlLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyAr
NTAsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTbGlj
ZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMyX3Qg
YmVnaW4gPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGlu
dDMyX3QgZW5kOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAg
ICBlbmQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5
dGVMZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUlubGluZXMuaAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjQgKzcwLDI2
IEBAIGlubGluZSBib29sIEpTQXJyYXk6OmNhbkZhc3RDb3B5KFZNJiB2bSwKIAogQUxXQVlTX0lO
TElORSB1bnNpZ25lZCBnZXRMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpz
Q2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwog
ICAgIHJldHVybiBsZW5ndGhWYWx1ZS50b1VJbnQzMihleGVjKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBkb3VibGUgdG9MZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxK
U0FycmF5Kj4ob2JqKS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IEpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJu
IGxlbmd0aFZhbHVlLnRvTGVuZ3RoKGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDU0ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjYsOCArMTI2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBoYXNJbnN0YW5jZQogCiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3Ry
dWN0dXJlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24pCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVuY3Rp
b24tPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXRKU0Z1bmN0aW9uID0ganNEeW5hbWlj
Q2FzdDxKU0Z1bmN0aW9uKj4odGFyZ2V0RnVuY3Rpb24pOwogCkBAIC0xNTgsNiArMTU5LDcgQEAg
aW5saW5lIFN0cnVjdHVyZSogZ2V0Qm91bmRGdW5jdGlvblN0cnVjdAogCiBKU0JvdW5kRnVuY3Rp
b24qIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFs
dWUgYm91bmRUaGlzLCBKU0FycmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3Ry
dWN0VHlwZSA9IEpTQzo6Z2V0Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0
RGF0YSk7CiAgICAgYm9vbCBjYW5Db25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVj
dFR5cGU6Ok5vbmU7CkBAIC0xNzAsNyArMTcyLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0JvdW5k
RnVuY3Rpb246OmNyZWF0ZQogICAgICAgICBjYW5Db25zdHJ1Y3QgPyAoc2xvd0Nhc2UgPyBib3Vu
ZEZ1bmN0aW9uQ29uc3RydWN0IDogYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QpIDog
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsCiAgICAgICAgIG5hbWUpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSh2bSwgZXhlYywgZ2xv
YmFsT2JqZWN0LCB0YXJnZXRGdW5jdGlvbik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBKU0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNCb3VuZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0aW9u
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywg
Ym91bmRBcmdzKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAg
Ym9vbCBKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAKICAg
ICAgICAgcHJvdG90eXBlID0gb2JqLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNO
dWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEpTVmFs
dWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVjCiAgICAgCiAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IHN5bnRoZXNpemVQcm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKSB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKQEAgLTM4MSwxMSArMzgxLDExIEBAIEpTU3Ry
aW5nKiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc0NlbGwo
KSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVm
ZXJTdHJpbmcpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIEFTU0VS
VCghdmFsdWUuaXNPYmplY3QoKSk7CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
Miw3ICs2NDIsNyBAQCBpbmxpbmUgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJlCiAg
ICAgfQogCiAgICAgU3RyaW5nSW1wbCogaGludFN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KHZh
bHVlKS0+dmFsdWUoZXhlYykuaW1wbCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTm9Q
cmVmZXJlbmNlOwogCiAgICAgaWYgKFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1bHQiKSkK
QEAgLTc4NCw4ICs3ODQsOSBAQCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29m
PENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZU19J
TkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9v
bCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwg
Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9IGdl
dFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VM
WShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQsIHNs
b3QpOwogfQpAQCAtODk3LDYgKzg5OCw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFsKEV4
ZWNTdGF0ZSogZXgKIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5s
aW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBkbyB7CiAgICAgICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gdjEuYXNOdW1iZXIoKSA9PSB2Mi5hc051bWJlcigpOwpAQCAt
OTI0LDcgKzkyNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMK
ICAgICAgICAgICAgIGlmICh2Mi5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB2
MSA9PSB2MjsKICAgICAgICAgICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjKTsK
LSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgdjEgPSBwMTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYg
djIuaXNJbnQzMigpKQpAQCAtOTM0LDcgKzkzNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1Zh
bHVlOjplcXVhbFNsb3dDYXMKIAogICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2
MiA9IHAyOwogICAgICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywx
NCArMTMzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJO
ZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpIikpOwogICAgIAogICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQz
MihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAKICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAgIHVu
c2lnbmVkIGVsZW1lbnRTaXplID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAg
IGlmIChlbGVtZW50U2l6ZSA+IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKICAg
ICAgICAgbGl0dGxlRW5kaWFuID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFzdCB0
d28gYXJndW1lbnQgKHRoZSBieXRlT2Zmc2V0IGFuZCB2YWx1ZSkiKSk7CiAgICAgCiAgICAgdW5z
aWduZWQgYnl0ZU9mZnNldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgY29uc3QgdW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5hbWUg
QWRhcHRvcjo6VHlwZSk7CkBAIC0xOTEsMTQgKzE5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBzZXRE
YXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9IHU7CiAKICAgICB1LnZhbHVlID0gdG9OYXRpdmVG
cm9tVmFsdWU8QWRhcHRvcj4oZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIAogICAgIGJvb2wgbGl0dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVu
dFNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRT
aXplID4gMSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0bGVF
bmRpYW4gPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsNiAr
NTkyLDggQEAgU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIAogdm9pZCBK
U0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gVGhlICJuYW1lIiBwcm9wZXJ0eSBtYXkgaGF2ZSBi
ZWVuIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSBwcm9wZXJ0eSBsaXN0IGluIGFu
CiAgICAgLy8gb2JqZWN0IGxpdGVyYWwgKGFuZCB0aGVyZWZvcmUgcmVpZmllZCkuCiAgICAgaWYg
KGhhc1JlaWZpZWROYW1lKCkpCkBAIC02MDgsMTAgKzYxMCwxMCBAQCB2b2lkIEpTRnVuY3Rpb246
OnNldEZ1bmN0aW9uTmFtZShFeGVjU3RhCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygn
WycsIFN0cmluZygmdWlkKSwgJ10nKTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1N0cmluZyog
anNTdHIgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBuYW1lID0ganNTdHItPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlaWZ5TmFtZSh2bSwgZXhlYywgbmFt
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZh
bHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoaXNO
ZXV0ZXJlZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg5LDE0ICs4OSwxNCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdl
bmVyaWNUeXBlZEFyCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRl
cmF0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBKU1ZhbHVlIG5leHRJdGVtID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc3Rv
cmFnZS5hcHBlbmQobmV4dEl0ZW0pOwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgaW5saW5lIEpTT2Jq
ZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBW
aWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBzdG9yYWdlLnNp
emUoKSk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3Jh
Z2Uuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGks
IHN0b3JhZ2UuYXQoaSkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlu
bGluZSBKU09iamVjdCogY29uc3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICAgICAgICAgIG9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgbGVuZ3Ro
U2xvdCk7CiAKICAgICAgICAgICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jID0gb2JqZWN0LT5nZXQo
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpOwotICAgICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAg
ICAgLy8gV2Ugd291bGQgbGlrZSBub3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVs
bHkgc2xvdy4gRm9ydHVuYXRlbHksIHVubGVzcwpAQCAtMTgzLDIxICsxODMsMjEgQEAgaW5saW5l
IEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgICAgICAgICAgICAgICAg
IEFyZ0xpc3QgYXJndW1lbnRzOwogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9y
ID0gY2FsbChleGVjLCBpdGVyYXRvckZ1bmMsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBh
cmd1bWVudHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZp
ZXdDbGFzcz4oZXhlYywgc3RydWN0dXJlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aFNsb3QuaXNVbnNldCgpID8gMCA6IGxlbmd0aFNsb3Qu
Z2V0VmFsdWUoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
LSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIH0KIAogICAgICAgICAKICAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBW
aWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwog
ICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzNSw3ICsyMzUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
OwogICAgIFN0cnVjdHVyZSogcGFyZW50U3RydWN0dXJlID0gZnVuY3Rpb24tPmdsb2JhbE9iamVj
dCgpLT50eXBlZEFycmF5U3RydWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBl
KTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1
YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBwYXJlbnRTdHJ1Y3R1cmUp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAKICAgICBzaXplX3QgYXJnQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0yNTIs
MTIgKzI1MiwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAg
ICAgT3B0aW9uYWw8dW5zaWduZWQ+IGxlbmd0aCA9IE51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1p
Y0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAg
ICAgICBvZmZzZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgICAg
ICBsZW5ndGggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5l
IEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3RydQogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBleGVtcGxh
ci0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5k
ZWZpbmVkKCkpCkBAIC02MiwxNCArNjIsMTQgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBz
cGVjaWVzQ29uc3RydQogICAgIH0KIAogICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9y
LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHNwZWNpZXMuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdHJ1Y3RvcigpOwogCiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBjb25zdHJ1Y3QoZXhlYywgc3BlY2llcywgYXJncywgInNwZWNpZXMg
aXMgbm90IGEgY29uc3RydWN0b3IiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBpZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpT
QXJyYXlCdWZmZXJWaWV3Kj4ocmVzdWx0KSkgewpAQCAtMTQ3LDcgKzE0Nyw2IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdD
bGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9GdW5jQ29weVdpdGhpbihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgLy8gMjIuMi4zLjUKQEAgLTE1NywxMyArMTU2LDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIAogICAgIGxvbmcgbGVuZ3RoID0gdGhpc09i
amVjdC0+bGVuZ3RoKCk7CiAgICAgbG9uZyB0byA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0
YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CiAgICAgbG9uZyBmcm9tID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKICAgICBsb25nIGZpbmFsID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVu
ZChleGVjLCAyLCBsZW5ndGgsIGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVk
SlNWYWx1ZSgpOwogCiAgICAgaWYgKGZpbmFsIDwgZnJvbSkKQEAgLTE4Myw3ICsxODIsNiBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBWaWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNz
Kj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwpAQCAtMTk4LDcgKzE5Niw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5p
c05ldXRlcmVkKCkpCkBAIC0yMDksNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBpZiAoc3RkOjppc25hbihz
dGF0aWNfY2FzdDxkb3VibGU+KCp0YXJnZXRPcHRpb24pKSkgewpAQCAtMjMwLDcgKzIyOCw2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVu
YW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8v
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjEzCkBAIC0yNDUsNyArMjQyLDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogCiAgICAgSlNWYWx1ZSB2YWx1ZVRv
RmluZCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRl
cmVkKCkpCkBAIC0yNTUsNyArMjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZW5lcmljVHlwZQogICAgIGF1dG8gdGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JO
YXRpdmVGcm9tVmFsdWVXaXRob3V0Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFy
Z2V0T3B0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7
Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAK
ICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKQEAgLTI2OSw3ICsyNjYsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBl
ZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIFZpZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3Mq
PihleGVjLT50aGlzVmFsdWUoKSk7CkBAIC0yODIsMTEgKzI3OCwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRo
aXNPYmplY3QtPmxlbmd0aCgpOwogCiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhl
Yywgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGpvaW5lci5hcHBlbmQo
KmV4ZWMsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpKSk7Ci0gICAgICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2lu
ZXIuam9pbigqZXhlYykpOwpAQCAtMjk5LDcgKzI5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB9CiAKICAgICBKU1N0cmluZyogc2VwYXJhdG9yU3Ry
aW5nID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAodGhpc09i
amVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtMzEwLDcgKzMwNiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
TGFzdEluZGV4T2YoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIC8vIDIyLjIuMy4xNgpAQCAtMzM4LDcgKzMzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgp
KQpAQCAtMzQ5LDcgKzM0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAg
ICAgdHlwZW5hbWUgVmlld0NsYXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50
eXBlZFZlY3RvcigpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05l
dXRlcmVkKCkpOwogCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAgLTQzMiw3
ICs0MjcsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
KQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyAyMi4yLjMuMjYKQEAgLTQ0NSwxMCArNDM5LDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25l
ZCB0aGlzTGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBiZWdp
biA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0
aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVk
IGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgdGhpc0xl
bmd0aCwgdGhpc0xlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgp
OwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTQ2Nyw3ICs0NjEsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVj
dHVyZShWaWV3Q2xhc3M6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBW
aWV3Q2xhc3M6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwog
ICAgIH0pOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBBU1NFUlQoIXJlc3VsdC0+aXNOZXV0ZXJlZCgpKTsKQEAgLTUxOCw3ICs1
MTIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlZEFycmF5Vmlld1ByaXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0
ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjIzCkBAIC01MzcsOSAr
NTMwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEFT
U0VSVChleGVjLT5hcmd1bWVudCgwKS5pc051bWJlcigpKTsKICAgICBBU1NFUlQoZXhlYy0+YXJn
dW1lbnQoMSkuaXNVbmRlZmluZWQoKSB8fCBleGVjLT5hcmd1bWVudCgxKS5pc051bWJlcigpKTsK
ICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQo
ZXhlYywgMCwgdGhpc0xlbmd0aCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRD
bGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3Ro
KTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkp
OwogCkBAIC01NzIsNyArNTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5l
cmljVHlwZQogICAgIGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAgICAgSlNPYmpl
Y3QqIHJlc3VsdCA9IGNvbnN0cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBu
b3QgYSBjb25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Vmlldyo+KHJlc3VsdCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC04MTUsMTIgKzgxNSwxNCBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIGFzR2xv
YmFsT2JqZWN0KEpTCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNT
dGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3
VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmU7CiAgICAgaWYgKGluaXRpYWxMZW5ndGggPj0gTUlOX0FSUkFZX1NUT1JBR0Vf
Q09OU1RSVUNUSU9OX0xFTkdUSCkKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgQXJyYXlX
aXRoQXJyYXlTdG9yYWdlLCBuZXdUYXJnZXQpOwogICAgIGVsc2UKICAgICAgICAgc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9u
KGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RB
bGxvY2F0aW9uRm9yKHByb2ZpbGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1
cmUsIGluaXRpYWxMZW5ndGgpKTsKQEAgLTgzMyw4ICs4MzUsMTAgQEAgaW5saW5lIEpTQXJyYXkq
IGNvbnN0cnVjdEVtcHR5QXJyYXkoRXhlYwogIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFy
cmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVl
IG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVE
dXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxl
Ojp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBz
dHJ1Y3R1cmUsIHZhbHVlcykpOwogfQpAQCAtODQ2LDggKzg1MCwxMCBAQCBpbmxpbmUgSlNBcnJh
eSogY29uc3RydWN0QXJyYXkoRXhlY1N0YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RB
cnJheShFeGVjU3RhdGUqIGV4ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWdu
ZWQgbGVuZ3RoLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1Rhcmdl
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25z
dHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CkBAIC04NTks
OCArODY1LDEwIEBAIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAog
aW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSog
ZXhlYywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFs
dWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmls
ZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2Zp
bGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRp
dmVJbmRleGVkKGV4ZWMsIHN0cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYwLDcgKzY2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UK
ICAgICB9CiAKICAgICBTdHJpbmcgcyA9IHgudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgaWYgKHMuaXM4Qml0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTSm9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0pvYi5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTSm9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBSZWY8
TWljcm90YXNrPiBjcmVhdGVKU0pvYihWTSYgdm0sIEpTVmFsCiAKIHZvaWQgSlNKb2JNaWNyb3Rh
c2s6OnJ1bihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBDYWxsRGF0YSBo
YW5kbGVyQ2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgaGFuZGxlckNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEobV9qb2IuZ2V0KCksIGhhbmRsZXJDYWxsRGF0YSk7CiAgICAgQVNTRVJUKGhhbmRsZXJDYWxs
VHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CkBAIC03MCw3ICs3Myw3IEBAIHZvaWQgSlNKb2JNaWNy
b3Rhc2s6OnJ1bihFeGVjU3RhdGUqIGV4ZWMKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMCwg
bGVuZ3RoID0gbV9hcmd1bWVudHMtPmxlbmd0aCgpOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkK
ICAgICAgICAgaGFuZGxlckFyZ3VtZW50cy5hcHBlbmQobV9hcmd1bWVudHMtPkpTQXJyYXk6Omdl
dChleGVjLCBpbmRleCkpOwogICAgIHByb2ZpbGVkQ2FsbChleGVjLCBQcm9maWxpbmdSZWFzb246
Ok1pY3JvdGFzaywgbV9qb2IuZ2V0KCksIGhhbmRsZXJDYWxsVHlwZSwgaGFuZGxlckNhbGxEYXRh
LCBqc1VuZGVmaW5lZCgpLCBoYW5kbGVyQXJndW1lbnRzKTsKLSAgICBleGVjLT52bSgpLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVu
dmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDE3ICs3OCwxOSBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hp
bGRyZW4oCiAKIGJvb2wgSlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpT
T2JqZWN0KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZUVudmlyb25t
ZW50KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAg
ICBKU01vZHVsZVJlY29yZDo6UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9k
dWxlUmVjb3JkKCktPnJlc29sdmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVj
LCBwcm9wZXJ0eU5hbWUudWlkKCkpKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEpTTW9k
dWxlUmVjb3JkOjpSZXNvbHV0aW9uOjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBXaGVu
IHJlc29sdmVJbXBvcnQgcmVzb2x2ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBtb2R1
bGUgZW52aXJvbm1lbnQgbXVzdCBoYXZlIHRoZSBiaW5kaW5nLgogICAgICAgICBKU01vZHVsZUVu
dmlyb25tZW50KiBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50ID0gcmVzb2x1dGlvbi5tb2R1bGVS
ZWNvcmQtPm1vZHVsZUVudmlyb25tZW50KCk7CiAgICAgICAgIFByb3BlcnR5U2xvdCByZWRpcmVj
dFNsb3QoaW1wb3J0ZWRNb2R1bGVFbnZpcm9ubWVudCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldCk7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaW1wb3J0ZWRNb2R1bGVFbnZp
cm9ubWVudC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChpbXBv
cnRlZE1vZHVsZUVudmlyb25tZW50LCBleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJl
Y3RTbG90KTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50
LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmly
b25tZW50LCBleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVChyZWRpcmVj
dFNsb3QuaXNWYWx1ZSgpKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlZGlyZWN0U2xvdC5n
ZXRWYWx1ZShleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHJlZGlyZWN0
U2xvdC5hdHRyaWJ1dGVzKCksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVy
LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksMTMgKzE0OSwxNSBAQCBK
U0ludGVybmFsUHJvbWlzZSogSlNNb2R1bGVMb2FkZXI6OmZldGNoCiAgICAgICAgIGRhdGFMb2co
IkxvYWRlciBbZmV0Y2hdICIsIHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9i
YWxPYmplY3RNZXRob2RUYWJsZSgpLT5tb2R1bGVMb2FkZXJGZXRjaCkKICAgICAgICAgcmV0dXJu
IGdsb2JhbE9iamVjdC0+Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0
Y2goZ2xvYmFsT2JqZWN0LCBleGVjLCB0aGlzLCBrZXksIGluaXRpYXRvcik7CiAgICAgSlNJbnRl
cm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFs
dWUoKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUu
ZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IGRlZmVycmVkLT5wcm9taXNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIEpTTW9k
dWxlTmFtZXNwYWNlT2JqZWN0OjpKU01vZHVsZU5hbWVzcGEKIHZvaWQgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNNb2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgY29uc3QgSWRlbnRp
ZmllclNldCYgZXhwb3J0cykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogCkBAIC03Nyw3ICs3OCw3IEBA
IHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENyZWEKICAgICAvLyBodHRwOi8v
d3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVz
cGFjZS1leG90aWMtb2JqZWN0cy1pc2V4dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90
aWMtb2JqZWN0cy1wcmV2ZW50ZXh0ZW5zaW9ucwogICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVu
dEV4dGVuc2lvbnModGhpcywgZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KIAog
dm9pZCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0x
MzIsNyArMTMzLDcgQEAgYm9vbCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAog
ICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7CiAKICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHRyYW1wb2xpbmVTbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKIAogICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgZmlsbGVkIHdpdGgg
VERaIHZhbHVlLCB0aHJvdyBhIHJlZmVyZW5jZSBlcnJvci4KICAgICAgICAgaWYgKCF2YWx1ZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVj
b3JkLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzUsNyArNzc1LDcgQEAg
dm9pZCBKU01vZHVsZVJlY29yZDo6aW5zdGFudGlhdGVEZWNsYXJhdAogICAgICAgICBKU01vZHVs
ZVJlY29yZCogaW1wb3J0ZWRNb2R1bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMs
IGltcG9ydEVudHJ5Lm1vZHVsZVJlcXVlc3QpOwogICAgICAgICBpZiAoaW1wb3J0RW50cnkuaXNO
YW1lc3BhY2Uodm0pKSB7CiAgICAgICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbmFt
ZXNwYWNlT2JqZWN0ID0gaW1wb3J0ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsK
LSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgYm9vbCBwdXRSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxl
UHV0VG91Y2hXYXRjaHBvaW50U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRy
eS5sb2NhbE5hbWUsIG5hbWVzcGFjZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9y
ICovIGZhbHNlLCAvKiBpZ25vcmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJl
dmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsMTYgKzIyMCwxOCBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgLCBtX3JlcGxhY2VyQ2FsbFR5cGUoQ2Fs
bFR5cGU6Ok5vbmUpCiAgICAgLCBtX2dhcChnYXAoZXhlYywgc3BhY2UuZ2V0KCkpKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGlmICghbV9yZXBsYWNlci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAobV9yZXBsYWNlci5hc09iamVjdCgpLT5pbmhlcml0cyhKU0FycmF5OjppbmZv
KCkpKSB7CiAgICAgICAgIG1fdXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFu
ZGxlPEpTT2JqZWN0PiBhcnJheSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXJyYXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIG5hbWUgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKG5hbWUu
aXNPYmplY3QoKSkgewpAQCAtMjQ4LDM2ICsyNTAsMzkgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lm
aWVyKEV4ZWNTdGF0ZSogZXhlYwogCiBMb2NhbDxVbmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5n
aWZ5KEhhbmRsZTxVbmtub3duPiB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52
bSgpLCBqc051bGwoKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICBQcm9wZXJ0
eU5hbWVGb3JGdW5jdGlvbkNhbGwgZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVjLT52bSgpLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVj
LT52bSgpLCBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1
ZS5nZXQoKSk7CisgICAgUHJvcGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlO
YW1lKHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkp
OwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgaWYgKGFwcGVuZFN0cmluZ2lmaWVk
VmFsdWUocmVzdWx0LCB2YWx1ZS5nZXQoKSwgb2JqZWN0LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0g
U3RyaW5naWZ5U3VjY2VlZGVkKQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVj
LT52bSgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOwor
ICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4odm0sIGpzVW5kZWZpbmVkKCkpOworICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBMb2NhbDxVbmtu
b3duPih2bSwganNOdWxsKCkpOwogCi0gICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+
dm0oKSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOworICAgIHJldHVybiBM
b2NhbDxVbmtub3duPih2bSwganNTdHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZh
bHVlLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsK
LSAgICBBU1NFUlQoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KHZhbHVlKTsKLSAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgUHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAg
ICBpZiAoIW9iamVjdC0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
dG9KU09OLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgSlNWYWx1ZSB0b0pT
T05GdW5jdGlvbiA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0pT
T04pOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJuIHRvSlNPTklt
cGwodmFsdWUsIHRvSlNPTkZ1bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogfQpAQCAtMzAxLDcgKzMw
Niw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIC8v
IENhbGwgdGhlIHRvSlNPTiBmdW5jdGlvbi4KICAgICB2YWx1ZSA9IHRvSlNPTih2YWx1ZSwgcHJv
cGVydHlOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAg
IC8vIENhbGwgdGhlIHJlcGxhY2VyIGZ1bmN0aW9uLgpAQCAtMzEwLDcgKzMxNSw3IEBAIFN0cmlu
Z2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgYXJncy5hcHBlbmQo
cHJvcGVydHlOYW1lLnZhbHVlKG1fZXhlYykpOwogICAgICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7
CiAgICAgICAgIHZhbHVlID0gY2FsbChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFj
ZXJDYWxsVHlwZSwgbV9yZXBsYWNlckNhbGxEYXRhLCBob2xkZXIsIGFyZ3MpOwotICAgICAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIH0KIApAQCAtMzI0
LDcgKzMyOSw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAog
ICAgIHZhbHVlID0gdW53cmFwQm94ZWRQcmltaXRpdmUobV9leGVjLCB2YWx1ZSk7CiAKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAgIGlmICh2YWx1ZS5pc0Jvb2xl
YW4oKSkgewpAQCAtMzc3LDE0ICszODIsMTQgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3Vs
dCBTdHJpbmdpZmllcgogCiAgICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJT
dGFjay5pc0VtcHR5KCk7CiAgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKHZtLCBtX2V4
ZWMsIG9iamVjdCkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZh
aWxlZDsKICAgICBpZiAoIWhvbGRlclN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJp
bmdpZnlTdWNjZWVkZWQ7CiAKICAgICBkbyB7CiAgICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNr
Lmxhc3QoKS5hcHBlbmROZXh0UHJvcGVydHkoKnRoaXMsIGJ1aWxkZXIpKSB7Ci0gICAgICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAg
ICAgIH0KICAgICAgICAgbV9ob2xkZXJTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC00MzYsNiArNDQx
LDggQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIEFTU0VS
VChtX2luZGV4IDw9IG1fc2l6ZSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdHJpbmdpZmll
ci5tX2V4ZWM7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRp
YWxpemUuCiAgICAgaWYgKCFtX2luZGV4KSB7CkBAIC00NDQsNyArNDUxLDcgQEAgYm9vbCBTdHJp
bmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKG1faXNKU0Fy
cmF5KQogICAgICAgICAgICAgICAgIG1fc2l6ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5s
ZW5ndGgoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NpemUgPSBtX29i
amVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKKyAgICAgICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZCgnWycpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmlu
Z2lmaWVyLm1fdXNpbmdBcnJheVJlcGxhY2VyKQpAQCAtNDUyLDcgKzQ1OSw3IEBAIGJvb2wgU3Ry
aW5naWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9i
amVjdFByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5h
bWVzLnJlbGVhc2VEYXRhKCk7CiAgICAgICAgICAgICB9CkBAIC00ODYsNyArNDkzLDcgQEAgYm9v
bCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgICAgIHZh
bHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgdmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAKQEAgLTUwNCw3ICs1MTEsNyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5l
eHRQcm9wCiAgICAgICAgIGlmICghbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3Bl
cnR5U2xvdChtX29iamVjdC5nZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcm9sbEJhY2tQb2ludCA9IGJ1aWxkZXIubGVuZ3RoKCk7
CkBAIC02NDAsNyArNjQ3LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgICAgICAgICAgICAgICAgICAgICAgaW5WYWx1ZSA9IHNsb3QuZ2V0VmFsdWUobV9l
eGVjLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051
bGwoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjU4LDcg
KzY2NSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAg
ICAgICAgICAgICAgICAgYXJyYXktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChhcnJheSwgbV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRl
eFN0YWNrLmxhc3QoKSwgZmlsdGVyZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAg
ICAgICAgICAgIGluZGV4U3RhY2subGFzdCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJh
eVN0YXJ0VmlzaXRNZW1iZXI7CkBAIC02NzUsNyArNjgyLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFs
dWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5k
KDApOwogICAgICAgICAgICAgICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFy
cmF5KG1fZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncykpOwogICAgICAgICAgICAgICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhl
YywgcHJvcGVydHlTdGFjay5sYXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRW
aXNpdE1lbWJlcjoKQEAgLTY5OCw3ICs3MDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxr
ZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhlIGhvbGRlciBtYXkgYmUgbW9kaWZpZWQgYnkg
dGhlIHJldml2ZXIgZnVuY3Rpb24gc28gYW55IGxvb2t1cCBtYXkgdGhyb3cKLSAgICAgICAgICAg
ICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaW5WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC03
MTcsNyArNzI0LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQog
ICAgICAgICAgICAgICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KG9iamVjdCwgbV9leGVjLCBwcm9wKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgbV9leGVjLCBwcm9w
LCBmaWx0ZXJlZFZhbHVlLCBzbG90KTsKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAg
ICAgaW5kZXhTdGFjay5sYXN0KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0
VmlzaXRNZW1iZXI7CkBAIC03NTQsNyArNzYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBKU09OUHJvdG9GdQogICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkpTT04ucGFyc2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKSk7
CiAgICAgSlNTdHJpbmc6OlNhZmVWaWV3IHNvdXJjZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvU3RyaW5nKGV4ZWMpLT52aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUgdW5maWx0ZXJlZDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlz
aW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDYgKzM1MSw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93
KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICAvLyAzLiBFUzYgUHJveHkuCiAKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU09iamVjdCogY3VycmVudCA9IG9iamVjdDsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
b3duRGVzY3JpcHRvcjsKICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtMzYyLDEzICszNjMsMTMgQEAg
Ym9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgIC8vIDku
MS45LjEtMiBMZXQgb3duRGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgogICAgICAg
ICBib29sIG93bkRlc2NyaXB0b3JGb3VuZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIG93bkRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghb3duRGVz
Y3JpcHRvckZvdW5kKSB7CiAgICAgICAgICAgICAvLyA5LjEuOS4xLTMtYSBMZXQgcGFyZW50IGJl
ID8gTy5bW0dldFByb3RvdHlwZU9mXV0oKS4KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gY3VycmVudC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
Ly8gOS4xLjkuMS0zLWIgSWYgcGFyZW50IGlzIG5vdCBudWxsLCB0aGVuCkBAIC00MDAsNyArNDAx
LDcgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBK
U09iamVjdCogcmVjZWl2ZXJPYmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAgICAgIFBy
b3BlcnR5RGVzY3JpcHRvciBleGlzdGluZ0Rlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZXhpc3Rp
bmdEZXNjcmlwdG9yRm91bmQgPSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyA5LjEu
OS4xLTQtZCBJZiBleGlzdGluZ0Rlc2NyaXB0b3IgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAt
MTI5Miw3ICsxMjkzLDcgQEAgYm9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hl
YwogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+
aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBp
ZiAoIWlzRXh0ZW5zaWJsZSkgewpAQCAtMTU1Miw3ICsxNTUzLDcgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjYWxsVG9QcmltaQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBw
cm9wZXJ0eU5hbWUpOwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgaWYgKGZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6
OlRha2VzSGludCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTE1ODAsNyArMTU4MSw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWkKIAogICAgIEpTVmFs
dWUgcmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25z
dF9jYXN0PEpTT2JqZWN0Kj4ob2JqZWN0KSwgY2FsbEFyZ3MpOwogICAgIEFTU0VSVCghcmVzdWx0
LmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCk7CiAgICAgaWYgKHJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbW9kZSA9
PSBUeXBlSGludE1vZGU6OkRvZXNOb3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5l
ZCBhbiBvYmplY3QiKSk7CkBAIC0xNjE4LDcgKzE2MTksNyBAQCBKU1ZhbHVlIEpTT2JqZWN0Ojpv
cmRpbmFyeVRvUHJpbWl0aXZlKEV4CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQog
Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAKICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiTm8gZGVmYXVsdCB2YWx1ZSIpKTsKIH0KQEAgLTE3MTgsNyArMTcxOSw3IEBA
IGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpT
VmFsdWUgb2JqZWN0VmFsdWUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlm
ICghb2JqZWN0VmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTE3NDAsMTIgKzE3NDEsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQ
cml2YQogdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJh
dGlvbk1vZGUgbW9kZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJv
dG8gPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTc1NywxMCArMTc1OSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVz
KEpTT2JqZWN0CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5
cGUtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2
bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE4
NTgsMTYgKzE4NjAsMjAgQEAgdm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5h
bQogCiBkb3VibGUgSlNPYmplY3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFBy
ZWZlck51bWJlcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAvLyBzaG91bGQgYmUg
cGlja2VkIHVwIHNvb24gaW4gTm9kZXMuY3BwCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgLy8gc2hvdWxkIGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAogICAgICAg
ICByZXR1cm4gMC4wOwogICAgIHJldHVybiBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiB9CiAK
IEpTU3RyaW5nKiBKU09iamVjdDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJl
ZmVyU3RyaW5nKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhl
Yyk7CiAgICAgcmV0dXJuIHByaW1pdGl2ZS50b1N0cmluZyhleGVjKTsKIH0KQEAgLTMwNzYsMTUg
KzMwODIsMTggQEAgYm9vbCB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKAogCiBi
b29sIEpTT2JqZWN0OjpkZWZpbmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBib29sIHRocm93RXhjZXB0aW9uKQogeworICAgIFZNJiB2bSAgPSBleGVjLT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
Ly8gVHJhY2sgb24gdGhlIGdsb2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHku
CiAgICAgLy8gQ3VycmVudGx5IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92
ZSBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGlj
dWxhcmx5IHdoZW4gY2hhbmdpbmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFs
bG93IG5vbi1jb25maWd1cmFibGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVz
IHRvIGJlIGRlbGV0ZWQuIEZvciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhp
cyB3b3JrLgotICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZShleGVjLT52bSgp
LCBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6
SWdub3JlQ29uZmlndXJhYmxlKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKICAg
ICBib29sIGlzQ3VycmVudERlZmluZWQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
cHJvcGVydHlOYW1lLCBjdXJyZW50KTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRoaXMtPmlz
RXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIHRoaXMsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1
cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBAIC0zMTg0LDEyICsz
MTkzLDEzIEBAIHZvaWQgSlNPYmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMKIHZvaWQg
SlNPYmplY3Q6OmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlKG1vZGUsIEpTT2JqZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0
LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGlmIChuZXh0UHJvdG8uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMDEs
MTAgKzMyMTEsMTAgQEAgdm9pZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5h
bWVzLCBtb2RlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbmV4dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4
ZWMpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBpZiAobmV4dFByb3RvLmlzTnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjIwLDcg
KzMyMzAsNyBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBlCiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBtZXRo
b2QgPSBnZXQoZXhlYywgaWRlbnQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIGlmICghbWV0aG9kLmlzQ2VsbCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1
NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDE2ICs0MCwxNiBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJy
YXlMaWtlKEV4ZWNTdGF0ZSogCiAgICAgCiAgICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKICAg
ICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBkb3VibGUg
bGVuZ3RoQXNEb3VibGUgPSBsZW5ndGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aEFzRG91YmxlID49IDAuMCAm
JiBsZW5ndGhBc0RvdWJsZSA9PSBzdGQ6OnRydW5jKGxlbmd0aEFzRG91YmxlKSk7CiAgICAgdWlu
dDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aEFzRG91YmxlKTsKICAg
ICBmb3IgKHVpbnQ2NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAg
ICAgICAgSlNWYWx1ZSBuZXh0ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KTsKLSAg
ICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUnVudGlt
ZVR5cGUgdHlwZSA9IHJ1bnRpbWVUeXBlRm9yVmFsdWUobmV4dCk7CkBAIC05Niw4ICs5NiwxMCBA
QCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3Rk
OjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+
Ojp0eXBlIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENhbGxiYWNrV2hlbk5vRXhj
ZXB0aW9uIGNhbGxiYWNrKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgZm91bmQgPSBj
b25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQsIHNsb3QpOwogfQpAQCAtMTA1LDYgKzEwNyw3IEBA
IEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0
byYgc3RydWN0dXJlSURUYWJsZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5j
dGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAg
LTExMiwxNCArMTE1LDE0IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHkKICAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQo
b2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNWYWx1ZSBw
cm90b3R5cGU7CiAgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVy
bmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlu
cXVpcnkpKQogICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlw
ZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0
UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2Jq
ZWN0KCkpCkBAIC0xMzQsNiArMTM3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpn
ZXROb25JbmRleAogICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIGF1dG8mIHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6
R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0Ojpn
ZXRQcm90b3R5cGU7CkBAIC0xNDUsNyArMTQ5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXROb25JbmRleAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTE1Myw3ICsx
NTcsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAg
ICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4
ZWMpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEw
Myw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RydWN0dXJlKiBw
cm9taXNlU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVy
ZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIEpTUHJvbWlzZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZtLCBwcm9t
aXNlU3RydWN0dXJlKTsKICAgICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVj
dCwgZXhlYy0+YXJndW1lbnQoMCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgcHJpdmF0ZToKIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQz
Ml90IGluZGV4ZWRMZW5ndGggPSBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVM
ZW5ndGgoZXhlYywgYmFzZSk7CiAKQEAgLTExOSwxOCArMTIwLDE4IEBAIGlubGluZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnQKIAogICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFjY2Vz
c1Byb3BlcnRpZXNRdWlja2x5Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09IGJh
c2UtPmdldEFycmF5TGVuZ3RoKCkpIHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5n
ZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIG51bWJlclN0cnVj
dHVyZVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLnNpemUoKTsKIAogICAgICAgICBiYXNlLT5t
ZXRob2RUYWJsZSh2bSktPmdldEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbmFtZXMgdmVjdG9yIGNvbnRhaW5z
IGFsbCBpbmRleGVkIHByb3BlcnR5IG5hbWVzLgogICAgICAgICAvLyBTbyBkaXNhYmxlIGluZGV4
ZWQgcHJvcGVydHkgZW51bWVyYXRpb24gcGhhc2UgYnkgc2V0dGluZyB8aW5kZXhlZExlbmd0aHwg
dG8gMC4KICAgICAgICAgaW5kZXhlZExlbmd0aCA9IDA7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0UHJvcGVydHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVt
ZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsMTAgQEAgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogSlNQcm9wZXJ0eU5hbWVJdAogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9y
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IHByb3BlcnR5TmFtZUVu
dW1lcmF0b3IoZXhlYywgaXRlcmF0ZWRPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6
OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lv
biAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAwLDE2ICsyMDAsMTggQEAgSlNPYmplY3QqIEpTU2NvcGU6Om9i
amVjdEF0U2NvcGUoSlNTY29wZQogLy8gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVz
dWx0IG9mIGlzVW5zY29wYWJsZSBiZWNvbWVzIGZhbHNlLgogc3RhdGljIGlubGluZSBib29sIGlz
VW5zY29wYWJsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU09iamVjdCogb2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChzY29wZS0+dHlwZSgpICE9IFdpdGhTY29wZVR5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEpTVmFsdWUgdW5zY29wYWJsZXMgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudW5zY29wYWJsZXNTeW1ib2wpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIXVuc2NvcGFibGVzLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBKU1ZhbHVlIGJsb2NrZWQgPSBqc0Nhc3Q8SlNPYmplY3QqPih1
bnNjb3BhYmxlcyktPmdldChleGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGJsb2NrZWQudG9Cb29sZWFuKGV4ZWMpOwpAQCAt
MjE4LDYgKzIyMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1Vuc2NvcGFibGUoRXhlY1N0YXQK
IEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU2Nv
cGVDaGFpbkl0ZXJhdG9yIGVuZCA9IHNjb3BlLT5lbmQoKTsKICAgICBTY29wZUNoYWluSXRlcmF0
b3IgaXQgPSBzY29wZS0+YmVnaW4oKTsKICAgICB3aGlsZSAoMSkgewpAQCAtMjQwLDcgKzI0Myw3
IEBAIEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYg
KG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWlz
VW5zY29wYWJsZShleGVjLCBzY29wZSwgb2JqZWN0LCBpZGVudCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpLCAiV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlz
VW5zY29wYWJsZSBiZWNvbWVzIGZhbHNlIik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFX1VOVVNFRCh0aHJvd1Njb3BlLCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSwgIldoZW4gYW4g
ZXhjZXB0aW9uIG9jY3VycywgdGhlIHJlc3VsdCBvZiBpc1Vuc2NvcGFibGUgYmVjb21lcyBmYWxz
ZSIpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCwx
MSBAQCB2b2lkIEpTU3RyaW5nOjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsCiAKIGJvb2wgSlNT
dHJpbmc6OmVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogb3RoZXIpIGNv
bnN0CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIHN0cjEgPSB2YWx1ZShleGVjKTsKICAgICBT
dHJpbmcgc3RyMiA9IG90aGVyLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJldHVybiBXVEY6OmVxdWFsKCpzdHIxLmltcGwoKSwgKnN0cjIuaW1w
bCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9p
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZ0pvaW5lci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEw
OCw3IEBAIEpTVmFsdWUgSlNTdHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBBU1NF
UlQobV9zdHJpbmdzLnNpemUoKSA8PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBqb2luZWRMZW5ndGgoc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzIsNiArNTcyLDggQEAgVG9rZW5UeXBlIExpdGVyYWxQYXJz
ZXI8Q2hhclR5cGU+OjpMZXhlcgogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNWYWx1
ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRl
KQogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgUGFyc2VyU3RhdGUgc3RhdGUgPSBpbml0aWFsU3RhdGU7
CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgb2JqZWN0U3RhY2s7CiAgICAgSlNWYWx1ZSBsYXN0
VmFsdWU7CkBAIC01ODMsNyArNTg1LDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBl
Pjo6cGFyc2UoUAogICAgICAgICAgICAgc3RhcnRQYXJzZUFycmF5OgogICAgICAgICAgICAgY2Fz
ZSBTdGFydFBhcnNlQXJyYXk6IHsKICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkobV9leGVjLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkobV9leGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKICAgICAgICAgICAgICAgICBvYmplY3RTdGFjay5hcHBlbmQoYXJyYXkpOwogICAgICAgICAg
ICAgfQpAQCAtNjgxLDcgKzY4Myw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46
OnBhcnNlKFAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3Qob2JqZWN0U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0
eU5hbWUgaWRlbnQgPSBpZGVudGlmaWVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgIGlm
IChtX21vZGUgIT0gU3RyaWN0SlNPTiAmJiBpZGVudCA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+dW5kZXJzY29yZVByb3RvKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBT
dHJpY3RKU09OICYmIGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRVbmRlcnNjb3JlUHJvdG8uYWRkKG9i
amVjdCkuaXNOZXdFbnRyeSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9y
TWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBw
cm9wZXJ0eSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAg
LTY5Myw3ICs2OTUsNyBAQCBKU1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQ
CiAgICAgICAgICAgICAgICAgICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJz
ZUluZGV4KGlkZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0
SW5kZXgobV9leGVjLCBpbmRleC52YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4
ZWMtPnZtKCksIGlkZW50LCBsYXN0VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnQsIGxhc3RWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnR5
cGUgPT0gVG9rQ29tbWEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDcgKzYxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVj
LT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNNYXAqIG1h
cCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgbWFwU3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJh
YmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShtYXApOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRk
ZXJGdW5jdGlvbkNhbGxEYXRhOwpAQCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhl
YywgaXRlcmFibGUsIFsmXShWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRl
bSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
ICAgIGlmICghbmV4dEl0ZW0uaXNPYmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgSlNWYWx1ZSBrZXkgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KDApKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBuZXh0SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGFyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hdGhPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hdGhPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDggKzE2
MiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICB1aW50MzJfdCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
LnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoY2x6MzIo
dmFsdWUpKSk7CiB9CkBAIC0xODUsMTMgKzE4NywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY0h5cG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25l
ZCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIG1heCA9IDA7
CiAgICAgVmVjdG9yPGRvdWJsZSwgOD4gYXJnczsKICAgICBhcmdzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYXJnc0NvdW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnc0NvdW50
OyArK2kpIHsKICAgICAgICAgYXJncy51bmNoZWNrZWRBcHBlbmQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoaSkudG9OdW1iZXIoZXhlYykpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICAgICAgaWYgKHN0ZDo6aXNp
bmYoYXJnc1tpXSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91Ymxl
TnVtYmVyKCtzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKQEAgLTI5
Miw4ICsyOTYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNJTXVsKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQzMl90IGxlZnQgPSBleGVjLT5hcmd1bWVu
dCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBpbnQzMl90IHJpZ2h0ID0gZXhlYy0+YXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGxlZnQg
KiByaWdodCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9h
ZGVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTIsMTEgKzExMiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1vZHVsZUxvYWRlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgY29uc3QgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50
b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDEpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFNvdXJjZUNvZGUg
c291cmNlQ29kZSA9IG1ha2VTb3VyY2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKQEAgLTE0
MiwxMiArMTQyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1
ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVs
ZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4
ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW1vZHVsZVJlY29yZCkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKIAog
ICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwg
bW9kdWxlUmVjb3JkLT5yZXF1ZXN0ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtF
TFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBzaXpl
X3QgaSA9IDA7CiAgICAgZm9yIChhdXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1v
ZHVsZXMoKSkKQEAgLTE1OCw2ICsxNjAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1vZHVsZUxvYWRlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVy
UHJvdG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5h
bWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW1v
ZHVsZVJlY29yZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTE2Niw3ICsxNzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5t
b2R1bGVLZXkoKSwgIlxuIik7CiAKICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2
MywxMSBAQCB2b2lkIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+
Y2FsbGVlKCkpLT5lcnJvclN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEFTU0VSVChlcnJvclN0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywg
ZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwx
MSBAQCB2b2lkIE51bWJlckNvbnN0cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWCiAvLyBFQ01BIDE1
LjcuMQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51
bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkb3Vi
bGUgbiA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvTnVtYmVyKGV4ZWMpIDogMDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
CiAgICAgTnVtYmVyT2JqZWN0KiBvYmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBzdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjEsNiArMTIxLDggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNv
bnN0cnVjdAogewogICAgIE9iamVjdENvbnN0cnVjdG9yKiBvYmplY3RDb25zdHJ1Y3RvciA9IGpz
Q2FzdDxPYmplY3RDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gb2JqZWN0Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG5ld1RhcmdldCBj
b25kaXRpb24gaW4gdGhpcyBjYWxsZXIgc2lkZSBpbnN0ZWFkIG9mIEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlIHNpZGUuCiAgICAgLy8gU2luY2UgaWYgd2UgZm91bmQg
dGhpcyBjb25kaXRpb24gaXMgbWV0LCB3ZSBzaG91bGQgbm90IGZhbGwgaW50byB0aGUgdHlwZSBj
b252ZXJzaW9uIGluIHRoZSBzdGVwIDMuCkBAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdAogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3VGFy
Z2V0ICE9IG9iamVjdENvbnN0cnVjdG9yKSB7CiAgICAgICAgIC8vIGEuIFJldHVybiA/IE9yZGlu
YXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKE5ld1RhcmdldCwgIiVPYmplY3RQcm90b3R5cGUlIiku
CiAgICAgICAgIFN0cnVjdHVyZSogb2JqZWN0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPm9i
amVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yKCkpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMsIG9iamVjdFN0cnVjdHVyZSk7CiAgICAgfQpAQCAtMjExLDggKzIxMywx
MCBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVj
U3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihleGVjLCBvYmplY3QpKTsKIH0KQEAg
LTIzMSw3ICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBvYmplY3RWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RWYWx1ZSk7CiAKICAgICBpZiAo
IWNoZWNrUHJvdG9TZXR0ZXJBY2Nlc3NBbGxvd2VkKGV4ZWMsIG9iamVjdCkpIHsKQEAgLTI0MSwx
NiArMjQ1LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAog
ICAgIGJvb2wgc2hvdWxkVGhyb3dJZkNhbnRTZXQgPSB0cnVlOwogICAgIGJvb2wgZGlkU2V0UHJv
dG90eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMsIHByb3RvVmFsdWUsIHNob3Vs
ZFRocm93SWZDYW50U2V0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3RvdHlwZSwgdm0u
ZXhjZXB0aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGRpZFNl
dFByb3RvdHlwZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdFZhbHVlKTsKIH0KIAogSlNWYWx1ZSBvYmplY3RD
b25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAoIW9iamVjdC0+
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RPYmpl
Y3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwpAQCAtMjYxLDE5ICsy
NjcsMjEgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiBKU1Zh
bHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
ZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIGZvciAoYXV0byYgcHJvcGVydHlOYW1lIDogcHJvcGVydGllcykg
ewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBk
aWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9y
KQpAQCAtMjg1LDcgKzI5Myw3IEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9w
ZXJ0eUQKIAogICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChkZXNjcmlwdG9ycyk7CiAgICAg
ICAgIGRlc2NyaXB0b3JzLT5wdXRPd25EYXRhUHJvcGVydHlNYXlCZUluZGV4KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgZnJvbURlc2NyaXB0b3IsIHNsb3QpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwpAQCAtMjkzLDE5ICszMDEsMjMgQEAgSlNWYWx1
ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+
YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
Yywgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1
bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsK
IH0KQEAgLTMxMyw4ICszMjUsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmpl
Y3RDb25zdAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3Ms
IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKIH0KQEAgLTMyMiw4ICszMzYsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVz
ZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9P
YmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4
ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6SW5jbHVkZSkpOwogfQpAQCAtMzMxLDE2ICszNDcsMjAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24g
Y2FjaGUuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG93blByb3BlcnR5S2V5cyhleGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmlu
Z3MsIERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhl
YykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQo
MCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlL
ZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKIH0KQEAgLTM2MCw0MCArMzgwLDQwIEBA
IGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChkZXNj
cmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFi
bGUpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5lbnVtZXJhYmxlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZXNjLnNldEVudW1lcmFibGUodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25maWd1cmFibGUpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlv
bi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpOwotICAgICAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSB2YWx1ZTsKICAgICBpZiAoZGVzY3JpcHRp
b24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZSkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnZhbHVlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBkZXNjLnNldFZhbHVlKHZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS53cml0YWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRh
YmxlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBk
ZXNjLnNldFdyaXRhYmxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2
bS5leGNlcHRpb24oKSkKKyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9w
ZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2V0KSkgewogICAgICAgICBKU1ZhbHVl
IGdldCA9IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFn
ZXQuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC00
MDMsMTIgKzQyMywxMiBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5zZXRHZXR0ZXIoZ2V0KTsK
LSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVz
Y3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpKSB7
CiAgICAgICAgIEpTVmFsdWUgc2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuc2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoIXNldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKQEAgLTQxOCw3ICs0MzgsNyBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5z
ZXRTZXR0ZXIoc2V0KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxz
ZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIWRlc2MuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkKQEAgLTQ0NSw3ICs0NjUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3BlcnRp
ZXMgY2FuIG9ubHkgYmUgZGVmaW5lZCBvbiBPYmplY3RzLiIpKTsKICAgICBKU09iamVjdCogb2Jq
ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7CiAgICAgYXV0byBzdWNjZXNzID0gdG9Qcm9wZXJ0eURlc2NyaXB0b3Io
ZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRlc2NyaXB0b3IpOwpAQCAtNDUzLDcgKzQ3Myw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIXN1Y2Nl
c3MpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEFTU0VS
VCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlz
QWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBvYmotPm1ldGhvZFRhYmxl
KHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHRydWUpOwogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG9iaik7CkBAIC00NjEsMTYgKzQ4MSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0CiAKIHN0YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvcGVydGllcykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIGFzT2JqZWN0KHByb3BlcnRp
ZXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVj
dChwcm9wZXJ0aWVzKSwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRF
bnVtUHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5TmFtZXMoYXNPYmplY3QocHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogICAgIHNpemVfdCBudW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7
CiAgICAgVmVjdG9yPFByb3BlcnR5RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CiAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgbWFya0J1ZmZlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bVByb3BlcnRpZXM7IGkrKykgewogICAgICAgICBKU1ZhbHVlIHByb3AgPSBwcm9wZXJ0aWVzLT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lc1tpXSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0
b3I7CiAgICAgICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcCwgZGVzY3Jp
cHRvcikpCkBAIC00OTAsOCArNTEzLDggQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGll
cyhFeGVjU3RhdAogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFt
ZXNbaV07CiAgICAgICAgIGlmIChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcml2YXRlTmFtZShw
cm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJv
cGVydHlOYW1lLCBkZXNjcmlwdG9yc1tpXSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yc1tpXSwgdHJ1ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgfQogICAgIHJldHVybiBvYmplY3Q7CkBAIC01MzEsNiArNTU0
LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yU2VhbChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3Qs
IHJldHVybiBPLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYg
KCFvYmouaXNPYmplY3QoKSkKQEAgLTUzOCwxNCArNTY0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
b2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkgewotICAgICAgICBvYmpl
Y3QtPnNlYWwoZXhlYy0+dm0oKSk7CisgICAgICAgIG9iamVjdC0+c2VhbCh2bSk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFj
aCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkg
cHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0g
ICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhv
YmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRp
ZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNN
b2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIFByb3BlcnR5TmFtZUFycmF5
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVy
dHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTU1OSwxNCArNTg1LDE0IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZp
Z3VyYWJsZV1dIGlzIHRydWUsIHNldCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAg
ICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKGZhbHNlKTsKICAgICAgICAgLy8gYy4gQ2FsbCB0
aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggUCwgZGVz
YywgYW5kIHRydWUgYXMgYXJndW1lbnRzLgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4
ZWMtPnZtKCkpLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzYywgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAg
ICB9CiAKICAgICAvLyAzLiBTZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5
IG9mIE8gdG8gZmFsc2UuCi0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJl
dmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVj
dCwgZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8u
CkBAIC01NzUsMTUgKzYwMSwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dENvbnN0CiAKIEpTT2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoaXNKU0ZpbmFs
T2JqZWN0KG9iamVjdCkgJiYgIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+aW5kZXhpbmdU
eXBlKCkpKSB7Ci0gICAgICAgIG9iamVjdC0+ZnJlZXplKGV4ZWMtPnZtKCkpOworICAgICAgICBv
YmplY3QtPmZyZWV6ZSh2bSk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCiAgICAg
Ly8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0Fu
ZFN5bWJvbHMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blBy
b3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9u
dEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVu
dW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNjAxLDE0ICs2MzAsMTQgQEAgSlNPYmplY3QqIG9iamVj
dENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogICAgICAgICAvLyBjLiBJZiBkZXNjLltbQ29uZmln
dXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1cmFibGVdXSB0byBmYWxzZS4KICAg
ICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBkLiBDYWxsIHRo
ZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLCBkZXNj
LCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBk
ZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKICAgICAvLyAz
LiBTZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2Uu
Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4dGVuc2lvbnMo
b2JqZWN0LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAvLyA0LiBSZXR1cm4gTy4KQEAgLTYxNywxMiArNjQ2LDE0IEBAIEpTT2JqZWN0KiBv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3QKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gTy4KICAgICBK
U1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICBKU09iamVjdCogcmVz
dWx0ID0gb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXNPYmplY3Qob2JqKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC02MzksNiArNjcwLDkgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCByZXR1
cm4gdHJ1ZS4KICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICgh
b2JqLmlzT2JqZWN0KCkpCkBAIC02NDYsMTIgKzY4MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9i
aik7CiAKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNTZWFsZWQoZXhlYy0+dm0oKSkpKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxl
ZCh2bSkpKTsKIAogICAgIC8vIDIuIEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAg
b2YgTywKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3NBbmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMt
PnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51
bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
dm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVy
YXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpA
QCAtNjcwLDEzICs3MDQsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogICAgIC8vIDMuIElmIHRoZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBv
ZiBPIGlzIGZhbHNlLCB0aGVuIHJldHVybiB0cnVlLgogICAgIC8vIDQuIE90aGVyd2lzZSwgcmV0
dXJuIGZhbHNlLgogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaXNFeHRlbnNpYmxl
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJ
c0Zyb3plbihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBU
eXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhl
Yy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY4NCwxMiArNzIx
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qo
b2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0
LT5pc0Zyb3plbihleGVjLT52bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihvYmplY3QtPmlzRnJvemVuKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2gg
bmFtZWQgb3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHBy
b3BlcnRpZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAg
IG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVz
TW9kZTo6SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVB
cnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFBy
b3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC03MDksMTkgKzc0NiwyMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5z
aWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUu
CiAgICAgLy8gNC4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2li
bGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKCFpc0V4dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBp
ZiAoIW9iai5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogICAg
IGJvb2wgaXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTczNSwx
MyArNzc0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIEpT
QXJyYXkqIG93blByb3BlcnR5S2V5cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qs
IFByb3BlcnR5TmFtZU1vZGUgcHJvcGVydHlOYW1lTW9kZSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9k
ZSBkb250RW51bVByb3BlcnRpZXNNb2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5TmFt
ZUFycmF5IHByb3BlcnRpZXMoZXhlYywgcHJvcGVydHlOYW1lTW9kZSk7CiAgICAgb2JqZWN0LT5t
ZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
aWVzLCBFbnVtZXJhdGlvbk1vZGUoZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU0FycmF5KiBrZXlzID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWVNb2RlKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCBpbmxpbmUgSlNP
YmplY3QqIGNvbnN0cnVjdE9iamVjdChFeGVjU3RhCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVj
dE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3Qq
IGRlc2NyaXB0aW9uID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlw
dG9yKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSAr
ODksMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBp
ZiAoIXRoaXNPYmplY3QpCkBAIC0xMDEsNiArMTA0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0lzUHJvdG90eXBlT2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywg
U3RyaWN0TW9kZSk7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3Qo
ZXhlYyk7CiAgICAgaWYgKCF0aGlzT2JqKQpAQCAtMTA5LDkgKzExNSw4IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDAp
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgdiA9IGFzT2Jq
ZWN0KGV4ZWMtPmFyZ3VtZW50KDApKS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAg
IHdoaWxlICh0cnVlKSB7CkBAIC0xMjAsNyArMTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICBpZiAodiA9PSB0aGlzT2JqKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICB2ID0g
YXNPYmplY3QodiktPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAg
fQogfQpAQCAtMTMxLDcgKzEzNiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAg
ICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBT
dHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgZ2V0ID0gZXhlYy0+
YXJndW1lbnQoMSk7CkBAIC0xNDAsNyArMTQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIGdldHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTYwLDcgKzE2NSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIEpTVmFsdWUgc2V0ID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xNjksNyAr
MTc0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJpbnZh
bGlkIHNldHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwpAQCAtMTg1LDEyICsxOTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVj
LCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3Bl
cnR5U2xvdCBzbG90KHRoaXNPYmplY3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBl
OjpHZXRPd25Qcm9wZXJ0eSk7CkBAIC0yMTIsMTIgKzIyMCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
UHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIzOSwxMiArMjUwLDE1IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29sIGVudW1l
cmFibGUgPSB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKQEAgLTI1NCw5
ICsyNjgsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogLy8g
MTUuMi40LjMgT2JqZWN0LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZygpCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIExldCBPIGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyBUb09iamVjdCBwYXNzaW5nIHRoZSB0aGlzIHZhbHVlIGFzIHRoZSBhcmd1bWVudC4K
ICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0
cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMi4gTGV0IHRvU3RyaW5nIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyBw
YXNzaW5nICJ0b1N0cmluZyIgYXMgdGhlIGFyZ3VtZW50LgpAQCAtMjkyLDcgKzMwOSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRoaXNPYmplY3QtPmdldFByb3BlcnR5U2xvdChleGVjLCB0b1N0cmluZ1RhZ1N5
bWJvbCwgWyZdIChib29sIGZvdW5kLCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU2xvdCkgLT4g
SlNWYWx1ZSB7CiAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgSlNWYWx1ZSBzdHJp
bmdUYWcgPSB0b1N0cmluZ1RhZ1Nsb3QuZ2V0VmFsdWUoZXhlYywgdG9TdHJpbmdUYWdTeW1ib2wp
OwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nVGFnLmlzU3RyaW5nKCkpIHsK
ICAgICAgICAgICAgICAgICBKU1JvcGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKHZt
KTsKQEAgLTMwNyw3ICszMjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvCiAgICAgICAgIH0KIAogICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVjdC0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPnRvU3RyaW5nTmFtZSh0aGlzT2JqZWN0LCBleGVjKTsKLSAg
ICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgU3RyaW5n
IG5ld1N0cmluZyA9IFdURjo6dHJ5TWFrZVN0cmluZygiW29iamVjdCAiLCBXVEZNb3ZlKHRhZyks
ICJdIik7CiAgICAgICAgIGlmICghbmV3U3RyaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCwxMSArNDQs
MTIgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogewogICAgIC8v
IGV4Y2VwdGlvbiBmb3IgdGhlIERhdGUgZXhjZXB0aW9uIGluIGRlZmF1bHRWYWx1ZSgpCiAgICAg
Vk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHAxID0gdjEudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBw
MiA9IHYyLnRvUHJpbWl0aXZlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogCiAgICAgaWYgKHAxLmlzU3RyaW5nKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJ
KHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDExIEBAIHZvaWQg
UHJvcGVydHlEZXNjcmlwdG9yOjpzZXRVbmRlZmluZWQoKQogR2V0dGVyU2V0dGVyKiBQcm9wZXJ0
eURlc2NyaXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNl
dHRlcjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBpZiAobV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLmlzVW5kZWZpbmVkKCkp
CiAgICAgICAgIGdldHRlclNldHRlci0+c2V0R2V0dGVyKHZtLCBnbG9iYWxPYmplY3QsIGpzQ2Fz
dDxKU09iamVjdCo+KG1fZ2V0dGVyKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU1LDIzICs1NSwyMyBAQCBQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0
cnVjdG9yKFZNJiB2CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VS
ZXZvY2FibGVQcm94eShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSA8IDIpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5LnJldm9jYWJsZSBuZWVkcyB0byBiZSBjYWxsZWQg
d2l0aCB0d28gYXJndW1lbnRzOiB0aGUgdGFyZ2V0IGFuZCB0aGUgaGFuZGxlciIpKTsKIAotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwogICAgIEpTVmFs
dWUgdGFyZ2V0ID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0KDEp
OwogICAgIFByb3h5T2JqZWN0KiBwcm94eSA9IFByb3h5T2JqZWN0OjpjcmVhdGUoZXhlYywgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0YXJnZXQsIGhhbmRsZXIpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgUHJveHlSZXZva2UqIHJl
dm9rZSA9IFByb3h5UmV2b2tlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cHJveHlSZXZva2VTdHJ1Y3R1cmUoKSwgcHJveHkpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZp
ZXIodm0sICJwcm94eSIpLCBwcm94eSwgTm9uZSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0s
IG1ha2VJZGVudGlmaWVyKHZtLCAicmV2b2tlIiksIHJldm9rZSwgTm9uZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAy
MDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEyICs1MywxMyBAQCBQcm94eU9iamVjdDo6UHJveHlPYmpl
Y3QoVk0mIHZtLCBTdHJ1Y3R1CiBTdHJpbmcgUHJveHlPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25z
dCBKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Y29uc3QgUHJveHlPYmplY3QqIHByb3h5ID0ganNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4ob2Jq
ZWN0KTsKICAgICB3aGlsZSAocHJveHkpIHsKICAgICAgICAgY29uc3QgSlNPYmplY3QqIHRhcmdl
dCA9IHByb3h5LT50YXJnZXQoKTsKICAgICAgICAgaWYgKGlzQXJyYXkoZXhlYywgdGFyZ2V0KSkK
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50b1N0
cmluZ05hbWUodGFyZ2V0LCBleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgcHJveHkgPSBqc0R5bmFtaWNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4odGFy
Z2V0KTsKQEAgLTE0Myw3ICsxNDQsNyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQo
RXhlY1N0YXRlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgSlNWYWx1ZSBnZXRIYW5kbGVyID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxE
YXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBBU0NJSUxpdGVyYWwoIidnZXQn
IHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIG9iamVjdCBzaG91bGQgYmUgY2FsbGFibGUi
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYg
KGdldEhhbmRsZXIuaXNVbmRlZmluZWQoKSkKQEAgLTE1NCw3ICsxNTUsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY2VpdmVyKTsKICAg
ICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKQEAg
LTE2OCw3ICsxNjksNyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRl
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICByZXR1cm4gdHJhcFJlc3VsdDsKQEAgLTE3Niw4ICsxNzcsMTAgQEAgc3Rh
dGljIEpTVmFsdWUgcGVyZm9ybVByb3h5R2V0KEV4ZWNTdGF0ZQogCiBib29sIFByb3h5T2JqZWN0
OjpwZXJmb3JtR2V0KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
cGVyZm9ybVByb3h5R2V0KGV4ZWMsIHRoaXMsIHNsb3QudGhpc1ZhbHVlKCksIHByb3BlcnR5TmFt
ZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB1bnNpZ25lZCBpZ25v
cmVkQXR0cmlidXRlcyA9IDA7CiAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBpZ25vcmVkQXR0cmli
dXRlcywgcmVzdWx0KTsKQEAgLTIxMSw3ICsyMTQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJm
b3JtSW50ZXJuYWxNZXRob2RHCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUg
Y2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImdldE93blByb3BlcnR5RGVzY3JpcHRvciIpLCBBU0NJSUxpdGVyYWwoIidnZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3InIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBi
ZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAg
cmV0dXJuIHBlcmZvcm1EZWZhdWx0R2V0T3duUHJvcGVydHkoKTsKQEAgLTIyMCw3ICsyMjMsNyBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAgICAgYXJndW1lbnRz
LmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1
YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3JNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRz
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVz
dWx0LmlzVW5kZWZpbmVkKCkgJiYgIXRyYXBSZXN1bHQuaXNPYmplY3QoKSkgewpAQCAtMjMwLDcg
KzIzMyw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKIAogICAg
IFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgYm9vbCBp
c1RhcmdldFByb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0
LmlzVW5kZWZpbmVkKCkpIHsKQEAgLTI0Myw3ICsyNDYsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29y
ayBpZiAndGFyZ2V0JyBpcyBhbm90aGVyIFByb3h5LiBXZSBkb24ndCBoYXZlIGlzRXh0ZW5zaWJs
ZSBpbXBsZW1lbnRlZCBpbiBhIHdheSB0aGF0IGZpdHMgdy8gUHJveHlzLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0Mzc1CiAgICAgICAgIGJv
b2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFpc0V4dGVu
c2libGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB0ZXN0IGZvciB0
aGlzIGVycm9yLiBJJ20gbm90IHN1cmUgaG93IHRvIGJlY2F1c2UKQEAgLTI1NywxMSArMjYwLDEx
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICB9CiAKICAg
ICBib29sIGlzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRyYXBS
ZXN1bHRBc0Rlc2NyaXB0b3I7CiAgICAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgdHJhcFJl
c3VsdCwgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2U7CiAgICAgYm9vbCB2YWxp
ZCA9IHZhbGlkYXRlQW5kQXBwbHlQcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgbnVsbHB0ciwgcHJv
cGVydHlOYW1lLCBpc0V4dGVuc2libGUsCkBAIC0yODAsNyArMjgzLDcgQEAgYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdl
dHRlclNldHRlciA9IHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3Iuc2xvd0dldHRlclNldHRlcihleGVj
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBzbG90LnNldEdldHRlclNsb3QodGhpcywgdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCksIGdldHRlclNldHRlcik7CiAgICAgfSBlbHNlIGlmICh0cmFwUmVzdWx0QXNEZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSAmJiAhdHJhcFJlc3VsdEFzRGVzY3JpcHRvci52YWx1ZSgp
LmlzRW1wdHkoKSkKQEAgLTMxOSw3ICszMjIsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3Jt
SGFzUHJvcGVydHkoRXhlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGU7CiAgICAgSlNWYWx1ZSBoYXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywg
Y2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIEFTQ0lJTGl0ZXJhbCgi
J2hhcycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGhhc01ldGhvZC5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSgp
OwpAQCAtMzI4LDE3ICszMzEsMTcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3Bl
cnR5KEV4ZQogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlk
KCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgaGFzTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50
cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJl
c3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgaXNQcm9wZXJ0
eURlc2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhl
YywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTsgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGlzUHJvcGVydHlEZXNjcmlwdG9yRGVm
aW5lZCkgewogICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CkBA
IC0zNDYsNyArMzQ5LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4
ZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSAnaGFzJyBtdXN0IHJldHVy
biAndHJ1ZScgZm9yIGEgbm9uLWV4dGVuc2libGUgJ3RhcmdldCcgb2JqZWN0IHdpdGggYSBjb25m
aWd1cmFibGUgcHJvcGVydHkiKSk7CkBAIC00MTksNyArNDIyLDcgQEAgYm9vbCBQcm94eU9iamVj
dDo6cGVyZm9ybVB1dChFeGVjU3RhdGUqIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENh
bGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgc2V0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0
aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+c2V0LCBBU0NJ
SUxpdGVyYWwoIidzZXQnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBj
YWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2Jq
ZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAoc2V0TWV0aG9kLmlzVW5kZWZp
bmVkKCkpCkBAIC00MzEsMTAgKzQzNCwxMCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0
KEV4ZWNTdGF0ZSogCiAgICAgYXJndW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1l
bnRzLmFwcGVuZCh0aGlzVmFsdWUpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhl
Yywgc2V0TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHRyYXBSZXN1bHRBc0Jv
b2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNDcyLDggKzQ3NSw5IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWMKIGJvb2wgUHJveHlPYmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHB1
dFZhbHVlLCBib29sIHNob3VsZFRocm93KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1l
KTsgCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0
ID0gWyZdICgpIHsKICAgICAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpA
QCAtNTA3LDcgKzUxMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBl
cmYKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBK
U1ZhbHVlIGFwcGx5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJhcHBseSIpLCBBU0NJSUxpdGVyYWwoIidhcHBs
eScgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGFwcGx5
TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTUxOCw3ICs1MjIsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJy
YXkgPSBjb25zdHJ1Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9m
aWxlKj4obnVsbHB0ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CkBAIC01NTcsNyAr
NTYxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgY29u
c3RydWN0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJjb25zdHJ1Y3QiKSwgQVNDSUlMaXRlcmFsKCInY29uc3Ry
dWN0JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY29uc3RydWN0aWJs
ZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlm
IChjb25zdHJ1Y3RNZXRob2QuaXNVbmRlZmluZWQoKSkgewpAQCAtNTY4LDE0ICs1NzIsMTQgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIH0KIAogICAgIEpT
QXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJnQXJyYXkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQo
ZXhlYy0+bmV3VGFyZ2V0KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjb25z
dHJ1Y3RNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpZiAoIXJlc3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXN1bHQgZnJvbSBQcm94eSBoYW5kbGVy
J3MgJ2NvbnN0cnVjdCcgbWV0aG9kIHNob3VsZCBiZSBhbiBvYmplY3QiKSk7CkBAIC02MTgsNyAr
NjIyLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgIENh
bGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVs
ZXRlUHJvcGVydHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNh
bGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImRlbGV0ZVByb3BlcnR5IiksIEFTQ0lJTGl0ZXJh
bCgiJ2RlbGV0ZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQg
YmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBK
U09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5
TWV0aG9kLmlzVW5kZWZpbmVkKCkpCkBAIC02MjgsMTEgKzYzMiwxMSBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQp
OwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0s
IElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNW
YWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBkZWxldGVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRv
Qm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtNjQ2LDcgKzY1MCw3IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5Miw3ICs2
OTYsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvCiAgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBwcmV2
ZW50RXh0ZW5zaW9uc01ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAicHJldmVudEV4dGVuc2lvbnMiKSwgQVNDSUlM
aXRlcmFsKCIncHJldmVudEV4dGVuc2lvbnMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVy
IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAocHJldmVu
dEV4dGVuc2lvbnNNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTcwMSwxNiArNzA1LDE2IEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW8KICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpT
VmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgcHJldmVudEV4dGVuc2lvbnNNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3Vs
dC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmICh0cmFwUmVzdWx0QXNCb29sKSB7CiAgICAgICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNp
YmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkg
ewogICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJQcm94eSdzICdwcmV2ZW50RXh0ZW5zaW9ucycgdHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhv
dWdoIGl0cyB0YXJnZXQgaXMgZXh0ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFs
c2UiKSk7CkBAIC03NDUsNyArNzQ5LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0
ZW5zaWJsZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBl
OwogICAgIEpTVmFsdWUgaXNFeHRlbnNpYmxlTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4
ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJpc0V4dGVuc2libGUi
KSwgQVNDSUlMaXRlcmFsKCInaXNFeHRlbnNpYmxlJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFu
ZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTc1NSwx
NSArNzU5LDE1IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1Jc0V4dGVuc2libGUoRXgKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0
YXJnZXQpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaXNFeHRlbnNpYmxl
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9
IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBib29sIGlzVGFyZ2V0RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNp
YmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
dHJhcFJlc3VsdEFzQm9vbCAhPSBpc1RhcmdldEV4dGVuc2libGUpIHsKQEAgLTgxMiwxNCArODE2
LDE0IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGRlZmlu
ZVByb3BlcnR5TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxs
VHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+ZGVmaW5lUHJvcGVydHksIEFTQ0lJTGl0ZXJhbCgiJ2Rl
ZmluZVByb3BlcnR5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2Fs
bGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZWZpbmVQ
cm9wZXJ0eU1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1
bHREZWZpbmVPd25Qcm9wZXJ0eSgpOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0b3JPYmplY3Qg
PSBjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3Ip
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CkBAIC04MjcsMTEgKzgzMSwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJm
b3JtRGVmaW5lT3duUHJvcGVyCiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZl
UHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGRlc2NyaXB0b3JPYmplY3QpOwogICAgIEpT
VmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZGVmaW5lUHJvcGVydHlNZXRob2QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xl
YW4oZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJl
c3VsdEFzQm9vbCkKQEAgLTgzOSwxMSArODQzLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZv
cm1EZWZpbmVPd25Qcm9wZXIKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlw
dG9yOwogICAgIGJvb2wgaXNUYXJnZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNp
YmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBib29sIHNldHRpbmdDb25maWd1cmFibGVUb0ZhbHNlID0gZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCk7CiAKQEAg
LTkwMSw3ICs5MDUsNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlO
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBvd25LZXlzTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0sICJvd25LZXlzIiksIEFTQ0lJTGl0ZXJhbCgiJ293
bktleXMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKICAgICBpZiAob3duS2V5c01ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBAIC05MTIs
NyArOTE2LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRh
cmdldCk7CiAgICAgSlNWYWx1ZSBhcnJheUxpa2VPYmplY3QgPSBjYWxsKGV4ZWMsIG93bktleXNN
ZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlID0g
dHJhcFJlc3VsdC5tb2RlKCk7CkBAIC05NDAsNyArOTQ0LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6
cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgICAgICAgICAgcmV0dXJuIGRvbnRFeGl0RWFybHk7
CiAKICAgICAgICAgSWRlbnRpZmllciBpZGVudCA9IHZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBkb0V4aXRFYXJseTsKIAogICAgICAg
ICB1bmNoZWNrZWRSZXN1bHRLZXlzLmFkZChpZGVudC5pbXBsKCkpOwpAQCAtOTQ5LDIxICs5NTMs
MjEgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIH07CiAK
ICAgICBjcmVhdGVMaXN0RnJvbUFycmF5TGlrZShleGVjLCBhcnJheUxpa2VPYmplY3QsIGRvbnRU
aHJvd0FuRXhjZXB0aW9uVHlwZUZpbHRlciwgQVNDSUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3Mg
J293bktleXMnIG1ldGhvZCBtdXN0IHJldHVybiBhbiBhcnJheS1saWtlIG9iamVjdCBjb250YWlu
aW5nIG9ubHkgU3RyaW5ncyBhbmQgU3ltYm9scyIpLCBhZGRQcm9wTmFtZSk7Ci0gICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0
ZW5zaWJsZShleGVjKTsKIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXMoJnZtLCBw
cm9wZXJ0eU5hbWVNb2RlKTsKICAgICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJv
cGVydHlOYW1lcyh0YXJnZXQsIGV4ZWMsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9kZSk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJn
ZXRDb25maWd1cmFibGVLZXlzOwogICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdl
dE5vbkNvbmZpZ3VyYWJsZUtleXM7CiAgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6
IHRhcmdldEtleXMpIHsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAg
ICAgICAgIGJvb2wgaXNQcm9wZXJ0eURlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBpZGVudC5pbXBsKCksIGRlc2NyaXB0b3IpOyAKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoaXNQcm9wZXJ0eURlZmluZWQgJiYgIWRl
c2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCiAgICAgICAgICAgICB0YXJnZXROb25Db25maWd1cmFi
bGVLZXlzLmFwcGVuZChpZGVudC5pbXBsKCkpOwpAQCAtMTA1Miw3ICsxMDU2LDcgQEAgYm9vbCBQ
cm94eU9iamVjdDo6cGVyZm9ybVNldFByb3RvdHlwZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgc2V0UHJvdG90eXBlT2ZNZXRo
b2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRl
bnRpZmllcih2bSwgInNldFByb3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ3NldFByb3RvdHlw
ZU9mJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0
aGlzLT50YXJnZXQoKTsKQEAgLTEwNjMsMTEgKzEwNjcsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6
cGVyZm9ybVNldFByb3RvdHlwZShFeAogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAg
ICBhcmd1bWVudHMuYXBwZW5kKHByb3RvdHlwZSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0g
Y2FsbChleGVjLCBzZXRQcm90b3R5cGVPZk1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5k
bGVyLCBhcmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29s
IHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkgewpA
QCAtMTA3NywxMyArMTA4MSwxMyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90
eXBlKEV4CiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlz
RXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh0
YXJnZXRJc0V4dGVuc2libGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSB0
YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXNhbWVWYWx1ZShleGVjLCBwcm90b3R5cGUs
IHRhcmdldFByb3RvdHlwZSkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJQcm94eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAgcmV0dXJuZWQgdHJ1
ZSB3aGVuIGl0cyB0YXJnZXQgaXMgbm9uLWV4dGVuc2libGUgYW5kIHRoZSBuZXcgcHJvdG90eXBl
IHZhbHVlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBwcm90b3R5cGUgdmFsdWUuIEl0
IHNob3VsZCBoYXZlIHJldHVybmVkIGZhbHNlIikpOwpAQCAtMTExNyw3ICsxMTIxLDcgQEAgSlNW
YWx1ZSBQcm94eU9iamVjdDo6cGVyZm9ybUdldFByb3RvdHlwZQogICAgIENhbGxEYXRhIGNhbGxE
YXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlT2ZN
ZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtl
SWRlbnRpZmllcih2bSwgImdldFByb3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldFByb3Rv
dHlwZU9mJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUi
KSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBKU09iamVjdCogdGFy
Z2V0ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC0xMTI3LDcgKzExMzEsNyBAQCBKU1ZhbHVlIFByb3h5
T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIHRyYXBS
ZXN1bHQgPSBjYWxsKGV4ZWMsIGdldFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERh
dGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNPYmplY3QoKSAmJiAhdHJhcFJlc3VsdC5pc051bGwo
KSkgewpAQCAtMTEzNiwxMyArMTE0MCwxMyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0UHJvdG90eXBlCiAgICAgfQogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJn
ZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICBpZiAodGFyZ2V0SXNFeHRlbnNpYmxlKQogICAgICAgICByZXR1cm4gdHJhcFJlc3VsdDsK
IAogICAgIEpTVmFsdWUgdGFyZ2V0UHJvdG90eXBlID0gdGFyZ2V0LT5nZXRQcm90b3R5cGUodm0s
IGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICghc2FtZVZh
bHVlKGV4ZWMsIHRhcmdldFByb3RvdHlwZSwgdHJhcFJlc3VsdCkpIHsKICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdnZXRQcm90b3R5
cGVPZicgdHJhcCBmb3IgYSBub24tZXh0ZW5zaWJsZSB0YXJnZXQgc2hvdWxkIHJldHVybiB0aGUg
c2FtZSB2YWx1ZSBhcyB0aGUgdGFyZ2V0J3MgcHJvdG90eXBlIikpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCByZWZsZWN0T2JqZQogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0pOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShjb25zdHJ1Y3QoZXhlYywgdGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
LCBhcmd1bWVudHMsIG5ld1RhcmdldCkpOwpAQCAtMTM5LDE0ICsxMzksMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAoIXRvUHJvcGVydHlEZXNjcmlwdG9yKGV4
ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpLCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmli
dXRlcygpICYgQWNjZXNzb3IpIHx8ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KSk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAKICAgICAvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5IHNob3VsZCBu
b3QgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgZGVmaW5lT3duUHJvcGVydHkgb3BlcmF0aW9uIGZh
aWxzLgogICAgIGJvb2wgc2hvdWxkVGhyb3cgPSBmYWxzZTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UmVmbGVjdC5nZXQgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7
CiAKICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEp
LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAg
LTIwMCw3ICsyMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmpl
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWly
ZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAKICAgICBhdXRvIGtleSA9
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KGV4ZWMsIGFzT2JqZWN0KHRhcmdldCksIGtleSkpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZs
ZWN0LmlzRXh0ZW5zaWJsZSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0
IikpKTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+aXNFeHRl
bnNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNFeHRl
bnNpYmxlKSk7CiB9CkBAIC0yNTcsNyArMjU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCByZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QucHJldmVudEV4dGVuc2lv
bnMgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHRhcmdldCk7CiAgICAgYm9vbCByZXN1bHQgPSBvYmpl
Y3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQpAQCAtMjc0LDcg
KzI3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBK
U09iamVjdCogdGFyZ2V0T2JqZWN0ID0gYXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTVmFsdWUgcmVjZWl2ZXIgPSB0YXJnZXQ7CkBAIC0zMDcsNyArMzA3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogCiAgICAgYm9vbCBzaG91bGRUaHJv
d0lmQ2FudFNldCA9IGZhbHNlOwogICAgIGJvb2wgZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5z
ZXRQcm90b3R5cGUodm0sIGV4ZWMsIHByb3RvLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihkaWRTZXRQcm90b3R5cGUpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDEzICsyMTYsMTMgQEAg
aW5saW5lIFJlZ0V4cEZsYWdzIHRvRmxhZ3MoRXhlY1N0YXRlKiBleAogICAgIGlmIChmbGFncy5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gTm9GbGFnczsKICAgICBKU1N0cmluZyogZmxh
Z3NTdHJpbmcgPSBmbGFncy50b1N0cmluZyhleGVjKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgZmxhZ3NTdHJpbmcpOwogICAgIGlmICghZmxhZ3NTdHJpbmcpIHsKLSAgICAgICAg
QVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRGbGFn
czsKICAgICB9CiAKICAgICBSZWdFeHBGbGFncyByZXN1bHQgPSByZWdFeHBGbGFncyhmbGFnc1N0
cmluZy0+dmFsdWUoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSW52YWxpZEZs
YWdzOwogICAgIGlmIChyZXN1bHQgPT0gSW52YWxpZEZsYWdzKQogICAgICAgICB0aHJvd1N5bnRh
eEVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQg
dG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmlzVW5k
ZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogcGF0dGVybkFyZy50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVn
RXhwRmxhZ3MgZmxhZ3MgPSB0b0ZsYWdzKGV4ZWMsIGZsYWdzQXJnKTsKQEAgLTI0Nyw3ICsyNDcs
NyBAQCBzdGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiAgICAgICAgIHJl
dHVybiB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywg
cmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
ZXRSZWdFeHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgcmVnRXhwKTsKIH0KQEAgLTI1NSw2ICsyNTUsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiBKU09iamVjdCogY29uc3RydWN0UmVnRXhw
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJn
TGlzdCYgYXJncywgIEpTT2JqZWN0KiBjYWxsZWUsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTVmFsdWUgcGF0dGVybkFyZyA9IGFyZ3MuYXQoMCk7CiAgICAgSlNWYWx1
ZSBmbGFnc0FyZyA9IGFyZ3MuYXQoMSk7CiAKQEAgLTI2Myw3ICsyNjQsNyBAQCBKU09iamVjdCog
Y29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlCiAKICAgICBpZiAobmV3VGFyZ2V0LmlzVW5k
ZWZpbmVkKCkgJiYgY29uc3RydWN0QXNSZWdleHAgJiYgZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkg
ewogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gcGF0dGVybkFyZy5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKGNhbGxlZSA9PSBjb25zdHJ1Y3RvcikgewogICAg
ICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHBhdHRlcm5BcmcgaXMgYSBvYmplY3Qgb3RoZXJ3aXNl
IGNvbnN0cnVjdEFzUmVnZXhwIHdvdWxkIGJlIGZhbHNlLgpAQCAtMjc0LDcgKzI3NSw3IEBAIEpT
T2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoaXNQYXR0ZXJu
UmVnRXhwKSB7CiAgICAgICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+
KHBhdHRlcm5BcmcpLT5yZWdFeHAoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
ZXRSZWdFeHBTdHJ1Y3R1cmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAo
IWZsYWdzQXJnLmlzVW5kZWZpbmVkKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1NDg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMzLDEyICsxMzMsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cENv
bnN0cnVjdG9yOjpyZQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNSZWdFeHAoVk0mIHZtLCBFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAg
ICBKU1ZhbHVlIG1hdGNoVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5tYXRjaFN5bWJvbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1h
dGNoVmFsdWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIG1hdGNoVmFsdWUudG9Cb29s
ZWFuKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcg
QEAgSlNWYWx1ZSBjb2xsZWN0TWF0Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZQogICAgIHN0YXRpYyB1
bnNpZ25lZCBtYXhTaXplRm9yRGlyZWN0UGF0aCA9IDEwMDAwMDsKICAgICAKICAgICBKU0FycmF5
KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gaXRlcmF0ZSA9
IFsmXSAoKSB7CkBAIC0yMzMsMTQgKzIzMywxNCBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZN
JiB2bSwgRXhlY1N0YXRlCiAKIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJp
bmcpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMtPnJl
Z0V4cCgpOwogCiAgICAgQVNTRVJUKHJlZ0V4cC0+Z2xvYmFsKCkpOwogCi0gICAgVk0qIHZtID0g
Jmdsb2JhbE9iamVjdC0+dm0oKTsKLQogICAgIHNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgcyA9IHN0
cmluZy0+dmFsdWUoZXhlYyk7CkBAIC0yNDksMTQgKzI0OSwxNCBAQCBKU1ZhbHVlIFJlZ0V4cE9i
amVjdDo6bWF0Y2hHbG9iYWwoRXhlY1N0CiAgICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCA9IHMubGVuZ3RoKCk7CiAgICAgICAgIHJldHVy
biBjb2xsZWN0TWF0Y2hlcygKLSAgICAgICAgICAgICp2bSwgZXhlYywgc3RyaW5nLCBzLCByZWdF
eHBDb25zdHJ1Y3RvciwgcmVnRXhwLAorICAgICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgcywg
cmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkg
LT4gc2l6ZV90IHsKICAgICAgICAgICAgICAgICByZXR1cm4gYWR2YW5jZVN0cmluZ1VuaWNvZGUo
cywgc3RyaW5nTGVuZ3RoLCBlbmQpOwogICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAg
IHJldHVybiBjb2xsZWN0TWF0Y2hlcygKLSAgICAgICAgKnZtLCBleGVjLCBzdHJpbmcsIHMsIHJl
Z0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHMsIHJl
Z0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCiAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6
ZV90IHsKICAgICAgICAgICAgIHJldHVybiBlbmQgKyAxOwogICAgICAgICB9KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEzICsxNTksMTMgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgICAgICByZWdFeHAgPSBhc1Jl
Z0V4cE9iamVjdChhcmcwKS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5n
IHBhdHRlcm4gPSAhZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZW1wdHlTdHJpbmcoKSA6IGFyZzAu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIFJl
Z0V4cEZsYWdzIGZsYWdzID0gTm9GbGFnczsKICAgICAgICAgaWYgKCFhcmcxLmlzVW5kZWZpbmVk
KCkpIHsKICAgICAgICAgICAgIGZsYWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
aWYgKGZsYWdzID09IEludmFsaWRGbGFncykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
IkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKSk7CkBAIC0x
ODksMjEgKzE4OSwyMiBAQCBzdGF0aWMgaW5saW5lIEZsYWdzU3RyaW5nIGZsYWdzU3RyaW5nKEV4
CiAgICAgc3RyaW5nWzBdID0gMDsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBnbG9iYWxW
YWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgaWdub3JlQ2FzZVZhbHVl
ID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgIEpTVmFsdWUgbXVsdGlsaW5lVmFsdWUg
PSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKICAgICBKU1ZhbHVlIHVuaWNvZGVWYWx1ZSA9IHJl
Z2V4cC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmljb2RlKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIHN0cmluZzsKICAgICBKU1ZhbHVlIHN0aWNreVZhbHVlID0gcmVnZXhwLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnN0aWNreSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBzdHJpbmc7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CkBAIC0yMzgsMTcgKzIzOSwx
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1ZhbHVlIHNv
dXJjZVZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJj
ZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgU3RyaW5nIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTVmFsdWUgZmxhZ3NWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5mbGFncyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU3RyaW5nIGZsYWdzID0gZmxhZ3NWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5v
bnRyaXZpYWxTdHJpbmcoZXhlYywgJy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpKTsKQEAgLTMzOSw3
ICszNDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRo
ZSBSZWdFeHAucHJvdG90eXBlLmZsYWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYW4g
b2JqZWN0IikpOwogCiAgICAgYXV0byBmbGFncyA9IGZsYWdzU3RyaW5nKGV4ZWMsIGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCBmbGFncy5kYXRhKCkpKTsKQEAgLTQ3MiwxMiArNDczLDEzIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBSZWdFeHAq
IHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpOwogCiAgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
OwogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFJlZ0V4cENvbnN0cnVj
dG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKQEAgLTU4Niw3ICs1ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgLy8gMy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0g
TGV0IFMgYmUgPyBUb1N0cmluZyhzdHJpbmcpLgogICAgIEpTU3RyaW5nKiBpbnB1dFN0cmluZyA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIFN0cmluZyBpbnB1dCA9IGlu
cHV0U3RyaW5nLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoIWlucHV0LmlzTnVsbCgpKTsKIApAQCAt
NjAxLDcgKzYwMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8K
ICAgICAvLyAxMS4gTGV0IEEgYmUgQXJyYXlDcmVhdGUoMCkuCiAgICAgLy8gMTIuIExldCBsZW5n
dGhBIGJlIDAuCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3Qo
KTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0
ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3Qt
PnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4ZWMsIHNl
dFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpA
QCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc2V0KTsKIAogICAgIEpTVmFsdWUgYWRk
ZXJGdW5jdGlvbiA9IHNldC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGQpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGRvdWJsZSBjb2RlUG9pbnRBc0RvdWJsZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgICAgIHVpbnQzMl90IGNvZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
b2RlUG9pbnRBc0RvdWJsZSk7CkBAIC0xMjIsMTAgKzEyMiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RXaXRoU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhl
Yy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFleGVj
LT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJpbmdPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsOCBAQCBzdGF0aWMgYm9vbCBpc1N0cmluZ093blByb3BlcnR5KEV4ZWNTdGF0CiAKIGJv
b2wgU3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBTdHJpbmdPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2Jq
ZWN0KTsKIAogICAgIGlmIChpc1N0cmluZ093blByb3BlcnR5KGV4ZWMsIHRoaXNPYmplY3QsIHBy
b3BlcnR5TmFtZSkpIHsKQEAgLTEyMCw3ICsxMjIsNyBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPCiAgICAgICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IHRoaXNP
YmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJl
bnQpOwogICAgICAgICBBU1NFUlQoaXNDdXJyZW50RGVmaW5lZCk7CiAgICAgICAgIGJvb2wgaXNF
eHRlbnNpYmxlID0gdGhpc09iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWxpZGF0
ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwg
aXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJv
d0V4Y2VwdGlvbik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NzcsOSArNDc3LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGwKICAgICBWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNW
YWx1ZSBzZWFyY2hWYWx1ZSwgQ2FsbERhdGEmIGNhbGxEYXRhLAogICAgIENhbGxUeXBlIGNhbGxU
eXBlLCBTdHJpbmcmIHJlcGxhY2VtZW50U3RyaW5nLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBT
dHJpbmcmIHNvdXJjZSA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgc291cmNl
TGVuID0gc291cmNlLmxlbmd0aCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0
ID0gYXNSZWdFeHBPYmplY3Qoc2VhcmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gcmVn
RXhwT2JqZWN0LT5yZWdFeHAoKTsKQEAgLTQ4OCw3ICs0OTAsNyBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgaWYgKGdsb2JhbCkgewogICAgICAgICAvLyBF
UzUuMSAxNS41LjQuMTAgc3RlcCA4LmEuCiAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdElu
ZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZTo6Tm9uZSAmJiAhcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpCkBAIC01MTEsNyAr
NTEzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAg
ICBpbnQgYXJnQ291bnQgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxICsgMjsKICAgICAg
ICAgSlNGdW5jdGlvbiogZnVuYyA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ocmVwbGFjZVZhbHVlKTsK
ICAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGZ1bmMsIGFyZ0NvdW50KTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKHNvdXJjZS5pczhCaXQoKSkgewogICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKQEAgLTUzOSw3ICs1NDEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBF
bmNvZGVkSlNWYWx1ZSByZXBsCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpz
VW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRD
YWxsLmNhbGwoKTsKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpA
QCAtNTc4LDcgKzU4MCw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJl
cGwKICAgICAgICAgICAgICAgICBjYWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAg
ICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IHJlc3VsdC5lbmQ7CkBAIC02MTgsNyArNjIwLDcg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKHN0cmluZyk7CiAKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMu
YXBwZW5kKGNhbGwoZXhlYywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5k
ZWZpbmVkKCksIGFyZ3MpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIGludCByZXBsTGVuID0gcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCk7CkBAIC02
NTgsMTIgKzY2MCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgUmVnRXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7
CiAgICAgaWYgKHJlZ0V4cC0+Z2xvYmFsKCkpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEw
IHN0ZXAgOC5hLgogICAgICAgICBzZWFyY2hWYWx1ZS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm4gcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2godm0s
IGV4ZWMsIHRoaXNWYWx1ZSwgdGhpc1ZhbHVlLT52YWx1ZShleGVjKSwgcmVnRXhwKTsKICAgICB9
CkBAIC02ODgsMTIgKzY5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN0CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2lu
Z1JlZ0V4cFNlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywg
SlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIHJlcGxhY2VtZW50
U3RyaW5nOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEocmVwbGFjZVZhbHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVZh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAK
QEAgLTcwMSwxMSArNzA2LDEzIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGwKICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgcmVwbGFjZW1lbnRTdHJpbmcsIHJlcGxhY2VWYWx1ZSk7CiB9CiAKLXN0YXRpYyBB
TFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYs
IEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVl
LCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1Zh
bHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1
ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBj
b25zdCBTdHJpbmcmIHN0cmluZyA9IGpzU3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcg
c2VhcmNoU3RyaW5nID0gc2VhcmNoVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgc2l6ZV90IG1hdGNoU3RhcnQgPSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwpA
QCAtNzIxLDEyICs3MjgsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUg
cmVwbAogICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7CiAgICAgICAg
IGFyZ3MuYXBwZW5kKGpzU3RyaW5nKTsKICAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChleGVj
LCByZXBsYWNlVmFsdWUsIGNhbGxUeXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBs
YWNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nSW1w
bCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CkBAIC04MTEsMTUgKzgxOCwxOCBAQCBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2UoCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVj
LCBzY29wZSk7CiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICByZXR1cm4gcmVwbGFjZSh2bSwgZXhlYywgc3RyaW5nLCBzZWFyY2hWYWx1ZSwg
cmVwbGFjZVZhbHVlKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNSZXBsYWNlVXNpbmdSZWdFeHAoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpA
QCAtODMxLDggKzg0MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFj
ZVVzaW5nU3RyaW5nU2VhcmNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIHJldHVybiByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goZXhlYy0+dm0oKSwgZXhlYywg
c3RyaW5nLCBleGVjLT5hcmd1bWVudCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAtOTQxLDcg
Kzk1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBkb3VibGUgZG91YmxlUG9zaXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2Vy
KGV4ZWMpOwpAQCAtMTA1Myw3ICsxMDY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmlu
ZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlu
dCBsZW4gPSBzLmxlbmd0aCgpOwpAQCAtMTExMSwyMCArMTEyNCwyMSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIHNwbGl0U3RyaW5nQnlPCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQo
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSk7CiAKICAgICAvLyAzLiBMZXQgUyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9TdHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBh
cyBpdHMgYXJndW1lbnQuCiAgICAgLy8gNy4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGluIFMuCiAgICAgU3RyaW5nIGlucHV0ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAv
LyA0LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9u
IG5ldyBBcnJheSgpCiAgICAgLy8gICAgd2hlcmUgQXJyYXkgaXMgdGhlIHN0YW5kYXJkIGJ1aWx0
LWluIGNvbnN0cnVjdG9yIHdpdGggdGhhdCBuYW1lLgogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNS4gTGV0IGxlbmd0
aEEgYmUgMC4KQEAgLTExNDEsNyArMTE1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICAvLyAgICBvdGhlcndpc2UgbGV0IFIgPSBUb1N0cmluZyhzZXBh
cmF0b3IpLgogICAgIEpTVmFsdWUgc2VwYXJhdG9yVmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKTsKICAgICBTdHJpbmcgc2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDEwLiBJZiBsaW0gPT0gMCwgcmV0
dXJuIEEuCkBAIC0xMjUwLDcgKzEyNjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvCiAgICAgICAgIGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVs
c2UgewogICAgICAgICB1U3RyaW5nID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKICAg
ICB9CkBAIC0xMzAzLDcgKzEzMTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
IAogICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTEzNzcsMTIgKzEzOTEs
MTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBTdHJpbmcgc3RyID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRl
KHMsIHN0cikpKTsKIH0KQEAgLTE0MDMsNyArMTQxNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSB0b0xvY2FsZUNhc2UoRXhlY1MKICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShz
dGF0ZSk7CiAKICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChTKS4KLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBPcHRp
bWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MuCkBAIC0xNDE0LDcgKzE0MjgsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAgVmVjdG9yPFN0cmluZz4gcmVx
dWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOwogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcyku
Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHJl
cXVlc3RlZExvY2FsZXMuCkBAIC0xNDk4LDcgKzE1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlz
VmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAg
ICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAi
PGJpZz4iLCBzLCAiPC9iaWc+IikpOwogfQpAQCAtMTUxMiw3ICsxNTI2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJp
bmcoZXhlYywgIjxzbWFsbD4iLCBzLCAiPC9zbWFsbD4iKSk7CiB9CkBAIC0xNTI2LDcgKzE1NDAs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFj
aGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtl
Tm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsKIH0KQEAg
LTE1NDAsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsK
IH0KQEAgLTE1NTQsNyArMTU2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9
IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+IiwgcywgIjwv
dHQ+IikpOwogfQpAQCAtMTU2OCw3ICsxNTgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVl
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0
cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIs
IHMsICI8L2k+IikpOwogfQpAQCAtMTU4Miw3ICsxNTk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxzdHJpa2U+IiwgcywgIjwvc3RyaWtlPiIpKTsKIH0KQEAgLTE1OTYsNyArMTYxMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2Jq
ZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8c3ViPiIsIHMsICI8L3N1Yj4iKSk7CiB9CkBAIC0xNjEwLDcgKzE2
MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYg
KCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNN
YWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwogfQpAQCAt
MTYyNCw3ICsxNjM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTE2NDMsNyArMTY1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNjk4LDcgKzE3MTIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFj
aGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmco
ZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwpAQCAtMTcxNyw3ICsxNzMxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFs
dWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTE3NjUsNyArMTc3OSw3IEBAIHN0YXRpYyBp
bmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGEKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSk7CiAgICAgU3RyaW5nIHN0ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
dW5zaWduZWQgbGVmdCA9IDA7CkBAIC0xODIzLDE4ICsxODM3LDE4IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4
ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhw
KHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBl
LnN0YXJ0c1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3Ry
aW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBw
b3NpdGlvbkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwpAQCAtMTg0NCw3ICsxODU4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGVsc2UgewogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogICAgICAgICBz
dGFydCA9IGNsYW1wQW5kVHJ1bmNhdGVUb1Vuc2lnbmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihl
eGVjKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTE4NjEsMTggKzE4
NzUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3Ry
aW5nVG9TZWFyY2hJbiA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3Vs
YXJFeHByZXNzaW9uID0gaXNSZWdFeHAodm0sIGV4ZWMsIGEwKTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNz
aW9uKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3Vt
ZW50IHRvIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAK
ICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsK
QEAgLTE4ODMsNyArMTg5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9zaXRpb25BcmcuYXNJbnQzMigp
KTsKICAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRlZmluZWQoKSkgewogICAgICAg
ICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQb3NpdGlvbkFyZy50b0ludGVn
ZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xODkyLDEz
ICsxOTA2LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nSW5jbHVkZXNJbXBsKFZN
JiB2bSwgRXhlY1N0YXRlKiBleGVjLCBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiwgU3RyaW5nIHNl
YXJjaFN0cmluZywgSlNWYWx1ZSBwb3NpdGlvbkFyZykKIHsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgc3RhcnQgPSAwOwogICAgIGlmIChw
b3NpdGlvbkFyZy5pc0ludDMyKCkpCiAgICAgICAgIHN0YXJ0ID0gc3RkOjptYXgoMCwgcG9zaXRp
b25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5j
YXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0g
ICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCkBAIC0xOTE1LDE4ICsxOTMwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMt
PmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZt
LCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmlu
Y2x1ZGVzIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9
IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRp
b25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE5MzYsMTcgKzE5NTEsMTkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGJ1aWx0aW5TdHJpbmdJbmNsdWRlc0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVl
KCk7CiAgICAgQVNTRVJUKGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEw
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25B
cmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTIwMDIsMTQgKzIwMTksMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2Vy
Y2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIEpTU3RyaW5nOjpTYWZlVmlldyBzb3VyY2UgPSB0aGlzVmFsdWUudG9TdHJp
bmcoZXhlYyktPnZpZXcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSA9
IFVOT1JNX05GQzsKICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWQg
YW5kIGlzIG5vdCB1bmRlZmluZWQuCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVm
aW5lZCgpKSB7CiAgICAgICAgIFN0cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgICAgIGlmIChmb3JtU3RyaW5nID09ICJORkMiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1
NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTQgQEAgQ2FsbFR5cGUgU3ltYm9sQ29u
c3RydWN0b3I6OmdldENhbGxEYXRhKAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5
bWJvbENvbnN0cnVjdG9yRm9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IEpTU3RyaW5nKiBzdHJpbmdLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBTdHJpbmcgc3RyaW5nID0gc3RyaW5nS2V5LT52YWx1ZShleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
dm0oKS5zeW1ib2xSZWdpc3RyeSgpLnN5bWJvbEZvcktleShzdHJpbmcpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAko
cmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxh
dGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMyBAQCBKU0FycmF5
KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAgICAgIHJldHVybiBjYWNoZWQ7
CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBjb3VudCA9IHRlbXBsYXRlS2V5LmNvb2tlZFN0
cmluZ3MoKS5zaXplKCk7CiAgICAgSlNBcnJheSogdGVtcGxhdGVPYmplY3QgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIEpTQXJyYXkqIHJhd09iamVjdCA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgbnVsbHB0ciwgY291bnQpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3Vu
dDsgKytpbmRleCkgewpAQCAtNTksMTIgKzYwLDEyIEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0
cnk6OmdldFRlbXBsYXRlT2IKICAgICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShl
eGVjLCByYXdPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERp
cmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3T2JqZWN0LCBSZWFkT25seSB8
IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShl
eGVjLCB0ZW1wbGF0ZU9iamVjdCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBtX3RlbXBsYXRlTWFwLnNl
dCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDM2ICsyNiwyNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRocm93
U2NvcGUuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJWTS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNpZiBFTkFCTEUo
VEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQotCi1uYW1lc3BhY2UgewotCi0vLyBMb2dzIGFsbCBU
aHJvd1Njb3BlIGFjdGl2aXR5IHRvIGhlbHAgZGVidWcgdGhlIHNvdXJjZSBvZiBhIHZlcmlmaWNh
dGlvbiBmYWlsdXJlLgotYm9vbCB0cmFjZU9uID0gZmFsc2U7Ci0KLS8vIEEgbW9yZSB2ZXJib3Nl
IGxvZ2dpbmcgb3B0aW9uIHRvIGR1bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVnaWMg
cG9pbnRzIHRvIGFpZCBkZWJ1Z2dpbmcuCi1ib29sIHRyYWNlV2l0aFN0YWNrVHJhY2VzID0gZmFs
c2U7Ci0KLS8vIERpc2FibGVkIHRlbXBvcmFyaWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRp
b24gZmFpbHVyZXMgYXJlIGZpeGVkLgotYm9vbCB2ZXJpZmljYXRpb25PbiA9IGZhbHNlOwotCi11
bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKLX07CisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCiAKIC8qCi0gICAgVGhyb3dTY29wZSB2ZXJpZmljYXRpb24gd29ya3MgdG8g
c2ltdWxhdGUgZXhjZXB0aW9uIHRocm93cyBhbmQgY2F0Y2ggY2FzZXMgd2hlcmUKKyAgICBFeGNl
cHRpb25TY29wZSB2ZXJpZmljYXRpb24gd29ya3MgdG8gc2ltdWxhdGUgZXhjZXB0aW9uIHRocm93
cyBhbmQgY2F0Y2ggY2FzZXMgd2hlcmUKICAgICBleGNlcHRpb24gY2hlY2tzIGFyZSBtaXNzaW5n
LiBUaGlzIGlzIGhvdyBpdCB3b3JrczoKIAogIDEuIFRoZSBWTSBoYXMgYSBtX25lZWRFeGNlcHRp
b25DaGVjayBiaXQgdGhhdCBpbmRpY2F0ZXMgd2hlcmUgYW4gZXhjZXB0aW9uIGNoZWNrIGlzCiAg
ICAgbmVlZGVkLiBZb3UgY2FuIHRoaW5rIG9mIHRoZSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQg
YmVpbmcgc2V0IGFzIGEgc2ltdWxhdGVkCiAgICAgdGhyb3cuCiAKLSAyLiBFdmVyeSB0aHJvdyBz
aXRlIG11c3QgZGVjbGFyZSBhIFRocm93U2NvcGUgaW5zdGFuY2UgdXNpbmcgREVDTEFSRV9USFJP
V19TQ09QRSBhdAorIDIuIE9ubHkgVGhyb3dTY29wZSBtYXkgdGhyb3dFeGNlcHRpb24sIG9ubHkg
Q2F0Y2hTY29wZSBtYXkgY2F0Y2hFeGNlcHRpb24uCisKKyAgICBFdmVyeSB0aHJvdyBzaXRlIG11
c3QgZGVjbGFyZSBhIFRocm93U2NvcGUgaW5zdGFuY2UgdXNpbmcgREVDTEFSRV9USFJPV19TQ09Q
RSBhdAogICAgIHRoZSB0b3Agb2YgaXRzIGZ1bmN0aW9uIChhcyBlYXJseSBhcyBwb3NzaWJsZSkg
ZS5nLgogIAogICAgICAgICB2b2lkIGZvbyguLi4pCkBAIC02NCw3ICs1Myw3IEBAIHVuc2lnbmVk
IHRyYWNlQ291bnQgPSAwOwogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUs
IC4uLik7CiAgICAgICAgIH0KIAotICAgIE5vdGU6IFZNOjp0aHJvd0V4Y2VwdGlvbigpIG1ldGhv
ZHMgYXJlIHByaXZhdGUsIGFuZCBvbmx5IGNhbGxlYWJsZWJ5IHRoZSBUaHJvd1Njb3BlCisgICAg
Tm90ZTogVk06OnRocm93RXhjZXB0aW9uKCkgbWV0aG9kcyBhcmUgcHJpdmF0ZSwgYW5kIGlzIG9u
bHkgY2FsbGVhYmxlIGJ5IHRoZSBUaHJvd1Njb3BlCiAgICAgZnJpZW5kIGNsYXNzLiBBbGwgdGhy
b3dzIG11c3QgZ28gdGhyb3VnaCBhIFRocm93U2NvcGUuIEhlbmNlLCB3ZSBhcmUgZ3VhcmFudGVl
ZCB0aGF0CiAgICAgYW55IGZ1bmN0aW9uIHRoYXQgY2FuIHRocm93IHdpbGwgaGF2ZSBhIFRocm93
U2NvcGUuCiAKQEAgLTcyLDggKzYxLDE3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAg
IGluc3RlYWQgb2YgaW5zdGFudGlhdGluZyBpdHMgb3duIFRocm93U2NvcGUuICBUaGlzIGFsbG93
cyB0aGUgdGhyb3cgdG8gYmUgYXR0cmlidXRlZAogICAgIHRvIHRoZSBjbGllbnQgY29kZSByYXRo
ZXIgdGhhbiB0aGUgdGhyb3cgaGVscGVyIGl0c2VsZi4KIAorICAgIEV2ZXJ5IGNhdGNoIHNpdGUg
KGkuZS4gYSBzaXRlIHRoYXQgY2FsbHMgY2xlYXJFeGNlcHRpb24oKSkgbXVzdCBkZWNsYXJlIGEg
Q2F0Y2hTY29wZQorICAgIGluc3RhbmNlIHVzaW5nIERFQ0xBUkVfQ0FUQ0hfU0NPUEUgaW4gdGhl
IHNjb3BlIHRoYXQgY2FuIGNsZWFyIHRoZSBleGNlcHRpb24uCisgCisgICAgTm90ZTogVk06OmNs
ZWFyRXhjZXB0aW9uKCkgaXMgcHJpdmF0ZSwgYW5kIGlzIG9ubHkgY2FsbGVhYmxlIGJ5IHRoZSBD
YXRjaFNjb3BlCisgICAgZnJpZW5kIGNsYXNzLiBBbGwgY2xlYXJpbmcgb2YgZXhjZXB0aW9ucyBt
dXN0IGdvIHRocm91Z2ggYSBDYXRjaFNjb3BlLiBIZW5jZSwgd2UgYXJlCisgICAgZ3VhcmFudGVl
ZCB0aGF0IGFueSBmdW5jdGlvbiB0aGF0IGNhbiBjbGVhciBhbiBleGNlcHRpb24gd2lsbCBoYXZl
IGEgQ2F0Y2hTY29wZS4KKwogIDMuIFZlcmlmaWNhdGlvbiBvZiBuZWVkZWQgZXhjZXB0aW9uIGNo
ZWNrcwogCisgICAgVGhyb3dTY29wZSB2ZXJpZmljYXRpb246CisKICAgICBhLiBPbiBjb25zdHJ1
Y3Rpb24sIGVhY2ggVGhyb3dTY29wZSB3aWxsIHZlcmlmeSB0aGF0IFZNOjptX25lZWRFeGNlcHRp
b25DaGVjayBpcwogICAgICAgIG5vdCBzZXQuCiAgCkBAIC05MCw2ICs4OCwxOSBAQCB1bnNpZ25l
ZCB0cmFjZUNvdW50ID0gMDsKICAgICBjLiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhl
IFRocm93U2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sKICAg
ICAgICBpcyBub3Qgc2V0LCB1bmxlc3MgaXQncyBiZWVuIGFzayB0byByZXRocm93IHRoZSBzYW1l
IEV4Y2VwdGlvbiBvYmplY3QuCiAKKyAgICBDYXRjaFNjb3BlIHZlcmlmaWNhdGlvbjoKKworICAg
IGEuIE9uIGRlc3RydWN0aW9uLCBlYWNoIENhdGNoU2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6
bV9uZWVkRXhjZXB0aW9uQ2hlY2sgaXMKKyAgICAgICBub3Qgc2V0LiBJdCBhbHNvIHZlcmlmaWVz
IHRoYXQgdGhlcmUgaXMgbm8gcGVuZGluZyBleGNlcHRpb24uCisKKyAgICAgICBUaGlzIGVuc3Vy
ZXMgdGhhdCBhbGwgZXhjZXB0aW9ucyBhcmUgaGFuZGxlZCBiZWZvcmUgd2UgZXhpdCBhIENhdGNo
U2NvcGUuCisKKyAgICAgICBOb3RlOiBpdCBpcyB3cm9uZyB0byBhc3NlcnQgdGhhdCB0aGVyZSBp
cyBubyBleGNlcHRpb24gb24gZW50cnkgaW50byBhIENhdGNoU2NvcGUuCisgICAgICAgVGhpcyBp
cyBiZWNhdXNlIGEgVGhyb3dTY29wZSBtYXkgZW5jbG9zZSBhIENhdGNoU2NvcGUsIGFuZCB1c2Ug
dGhlIENhdGNoU2NvcGUKKyAgICAgICB0byBjbGVhciB0aGUgZXhjZXB0aW9uIG9ubHkgaW4gc29t
ZSBjYXNlcy4gSGVuY2UsIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBlbnRlcgorICAgICAgIHRoZSBD
YXRjaFNjb3BlIHdpdGggYSBwZW5kaW5nIGV4Y2VwdGlvbi4gVGhlIG9ubHkgaW52YXJpYW50IGlz
IHRoYXQgd2UgbXVzdAorICAgICAgIG5ldmVyIGV4aXQgaXQgd2l0aCBhbiBleGNlcHRpb24gc3Rp
bGwgcGVuZGluZy4KKwogIDQuIFNpbXVsYXRlZCB0aHJvd3MKIAogICAgIFRocm93cyBhcmUgc2lt
dWxhdGVkIGJ5IHNldHRpbmcgdGhlIG1fbmVlZEV4Y2VwdGlvbkNoZWNrIGJpdC4KQEAgLTE1NCwx
MCArMTY1LDEwIEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgIFRoZSBhYm92ZSB3aWxs
IHJlc3VsdCBpbiBhIHZlcmlmaWNhdGlvbiBmYWlsdXJlIGluIGdvbzIoKSdzIFRocm93U2NvcGUu
ICBUaGUgcHJvcGVyIHdheQogICAgIHRvIGZpeCB0aGlzIHZlcmlmaWNhdGlvbiBpcyB0byBkbyB3
aXRoZXIgKDYpIG9yICg3KSBiZWxvdy4KICAKLSAgNi4gQ2hlY2tpbmcgZXhjZXB0aW9ucyB3aXRo
IFRocm93U2NvcGU6OmV4Y2VwdGlvbigpCisgIDYuIENoZWNraW5nIGV4Y2VwdGlvbnMgd2l0aCBU
aHJvd1Njb3BlOjpleGNlcHRpb24oKSAvIENhdGNoU2NvcGU6OmV4Y2VwdGlvbigpCiAgCi0gICAg
IFRocm93U2NvcGU6OmV4Y2VwdGlvbigpIHJldHVybnMgdGhlIHRocm93biBFeGNlcHRpb24gb2Jq
ZWN0IGlmIHRoZXJlIGlzIG9uZSBwZW5kaW5nLgotICAgICBFbHNlIGl0IHJldHVybnMgbnVsbHB0
ci4KKyAgICAgVGhyb3dTY29wZS9DYXRjaFNjb3BlOjpleGNlcHRpb24oKSByZXR1cm5zIHRoZSB0
aHJvd24gRXhjZXB0aW9uIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUKKyAgICAgcGVuZGluZy4gRWxz
ZSBpdCByZXR1cm5zIG51bGxwdHIuCiAgCiAgICAgIEl0IGFsc28gY2xlYXJzIHRoZSBtX25lZWRF
eGNlcHRpb25DaGVjayBiaXQgdGhlcmVieSBpbmRpY2F0aW5nIHRoYXQgd2UndmUgc2F0aXNpZmVk
CiAgICAgIHRoZSBuZWVkZWQgZXhjZXB0aW9uIGNoZWNrLgpAQCAtMTc5LDcgKzE5MCwxMCBAQCB1
bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKICAKICAgICBCdXQgc29tZXRpbWVzLCBmb3Igb3B0aW1p
emF0aW9uIHJlYXNvbnMsIHdlIG1heSBjaG9vc2UgdG8gdGVzdCB0aGUgcmVzdWx0IG9mIHRoZSBj
YWxsZWUKICAgICBmdW5jdGlvbiBpbnN0ZWFkIGRvaW5nIGEgbG9hZCBvZiB0aGUgVk0gZXhjZXB0
aW9uIHZhbHVlLiBTZWUgKDcpIGJlbG93LgotIAorCisgICAgTm90ZTogVk06OmV4Y2VwdGlvbigp
IGlzIGEgcHJpdmF0ZSwgYW5kIGlzIG9ubHkgY2FsbGVhYmxlIHZpYSBUaHJvd1Njb3BlIG9yIENh
dGNoU2NvcGUuCisgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNz
IHNlZXMgd2hlbiBhIGNsaWVudCBpcyBjaGVja2luZyBmb3IgZXhjZXB0aW9ucy4KKwogIDcuIENo
ZWNraW5nIGV4Y2VwdGlvbiBieSBjaGVja2luZyBjYWxsZWUgcmVzdWx0CiAgCiAgICAgVGhpcyBh
cHByb2FjaCBzaG91bGQgb25seSBiZSBhcHBsaWVkIHdoZW4gaXQgbWFrZXMgYSBkaWZmZXJlbmNl
IHRvIHBlcmZvcm1hbmNlLgpAQCAtMjIwLDcgKzIzNCw3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQg
PSAwOwogCiAgICAgYi4gVHVybiBvbiBUaHJvd1Njb3BlIHRyYWNpbmcKICAKLSAgICAgICBKdXN0
IHNldCB0cmFjZU9uPXRydWUgYXQgdGhlIHRvcCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJlYnVp
bGQuIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQKKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4
Y2VwdGlvbkV2ZW50cz10cnVlIGluIHRoZSBWTSwgYW5kIHJlYnVpbGQuIFRoZXJlYWZ0ZXIsIHlv
dSBzaG91bGQKICAgICAgICBzZWUgYSB0cmFjZSBvZiBUaHJvd1Njb3BlcyBiZWluZyBlbnRlcmVk
IGFuZCBleGl0ZWQgYXMgd2VsbCBhcyB0aGVpciBkZXB0aCBlLmcuCiAKICAgICBUaHJvd1Njb3Bl
IFsxXSBFbnRlcjogbGxpbnRfc2xvd19wYXRoX2pmYWxzZSBAIC9Wb2x1bWVzL0RhdGEvd3M2L09w
ZW5Tb3VyY2UvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcDox
MDMyCkBAIC0yMzQsNyArMjQ4LDcgQEAgdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7CiAKICAgICBj
LiBUdXJuIG9uIFRocm93U2NvcGUgc3RhY2sgZHVtcHMKIAotICAgICAgIEp1c3Qgc2V0IHRyYWNl
V2l0aFN0YWNrVHJhY2VzPXRydWUgYXQgdGhlIHRvcCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJl
YnVpbGQuCisgICAgICAgSnVzdCBzZXQgVk06Om1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3Rh
Y2tUcmFjZXM9dHJ1ZSBhdCBpbiB0aGUgVk0sIGFuZCByZWJ1aWxkLgogICAgICAgIFRoZXJlYWZ0
ZXIsIHlvdSBzaG91bGQgc2VlIGEgc3RhY2sgdHJhY2VzIGF0IHZhcmlvdXMgcmVsZXZhbnQgVGhy
b3dTY29wZSBldmVudHMuCiAKICAgICBkLiBVc2luZyB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVj
aygpCkBAIC0yNDksMzMgKzI2MywxOCBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKICAgICAg
ICBpLmUuIHRoZSBvbmUgdGhhdCBwcmVjZWRlZCB0aGUgdGhyb3dTY29wZVByaW50SWZOZWVkQ2hl
Y2soKSB0aGF0IHByaW50ZWQgYSBsaW5lLgogKi8KIAotVGhyb3dTY29wZTo6VGhyb3dTY29wZShW
TSYgdm0sIFRocm93U2NvcGVMb2NhdGlvbiBsb2NhdGlvbikKLSAgICA6IG1fdm0odm0pCi0gICAg
LCBtX3ByZXZpb3VzU2NvcGUodm0ubV90b3BUaHJvd1Njb3BlKQotICAgICwgbV9sb2NhdGlvbihs
b2NhdGlvbikKLSAgICAsIG1fZGVwdGgobV9wcmV2aW91c1Njb3BlID8gbV9wcmV2aW91c1Njb3Bl
LT5tX2RlcHRoICsgMSA6IDApCitUaHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZNJiB2bSwgRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNl
cHRpb25FdmVudDo6VGhyb3dTY29wZUVudHJ5LCBsb2NhdGlvbikKIHsKLSAgICBtX3ZtLm1fdG9w
VGhyb3dTY29wZSA9IHRoaXM7Ci0KLSAgICBpZiAodHJhY2VPbikgewotICAgICAgICBkYXRhTG9n
KCI8IiwgdHJhY2VDb3VudCsrLCAiPiBUaHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXSBFbnRlcjog
IiwgbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbG9jYXRpb24uZmlsZSwgIjoiLCBsb2Nh
dGlvbi5saW5lKTsKLSAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAg
ICAgICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7
Ci0KLSAgICAgICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQotICAgICAgICAgICAgV1RGUmVw
b3J0QmFja3RyYWNlKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNT
YXRpc2ZpZWQoU2l0ZTo6U2NvcGVFbnRyeSk7CisgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVj
a05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUVudHJ5LCBtX2RlcHRo
LCBtX2xvY2F0aW9uKTsKIH0KIAogVGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKG1fdm0ubV90b3BUaHJvd1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUpOwogCiAgICAgaWYgKCFtX2lzUmVsZWFzZWQpCi0gICAg
ICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlNjb3BlRXhpdCk7
CisgICAgICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0
aW9uRXZlbnQ6OlRocm93U2NvcGVFeGl0LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgLy8gSWYgd2UgcmVsZWFzZWQgdGhlIHNjb3BlLCB0aGF0IG1lYW5zIHdlJ3Jl
IGxldHRpbmcgb3VyIGNhbGxlcnMgZG8gdGhlCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjay4g
SG93ZXZlciwgYmVjYXVzZSBvdXIgY2FsbGVyIG1heSBiZSBhIExMSW50IG9yIEpJVApAQCAtMjk3
LDI3ICsyOTYsMjUgQEAgVGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogICAgICAgICB3aWxsQmVI
YW5kbGVCeUxMSW50T3JKSVQgPSB0cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlM
TEludE9ySklUKQotICAgICAgICBzaW11bGF0ZVRocm93KCk7CisgICAgICAgIHNpbXVsYXRlVGhy
b3coRXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVFeGl0KTsKIAotICAgIGlmICh0cmFjZU9uKSB7
Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1f
ZGVwdGgsICJdIEV4aXQ6ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2Nh
dGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24ubGluZSk7CisgICAgaWYgKG1fdm0ubV90cmFjZUV4
Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudDo6
VGhyb3dTY29wZUV4aXQsIG1fbG9jYXRpb24pOwogICAgICAgICBpZiAoIXdpbGxCZUhhbmRsZUJ5
TExJbnRPckpJVCkKICAgICAgICAgICAgIGRhdGFMb2coIiwgd2l0aCByZXRocm93Iik7CiAgICAg
ICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKQogICAgICAgICAgICAgZGF0YUxvZygi
LCBuZWVkcyBjaGVjayIpOwogICAgICAgICBkYXRhTG9nKCJcbiIpOwogCi0gICAgICAgIGlmICh0
cmFjZVdpdGhTdGFja1RyYWNlcykKKyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2
ZW50c1dpdGhTdGFja1RyYWNlcykKICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwog
ICAgIH0KLQotICAgIG1fdm0ubV90b3BUaHJvd1Njb3BlID0gbV9wcmV2aW91c1Njb3BlOwogfQog
CiB2b2lkIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKG1fdm0uZXhjZXB0aW9uKCkgJiYgbV92bS5leGNl
cHRpb24oKSAhPSBleGNlcHRpb24pCi0gICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElz
U2F0aXNmaWVkKFNpdGU6OlRocm93KTsKKyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVj
a05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRp
b24pOwogICAgIAogICAgIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0K
QEAgLTMyNSw3ICszMjIsNyBAQCB2b2lkIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNT
dGF0CiBKU1ZhbHVlIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBlcnJvcikKIHsKICAgICBpZiAoIWVycm9yLmlzQ2VsbCgpIHx8ICFqc0R5bmFtaWND
YXN0PEV4Y2VwdGlvbio+KGVycm9yLmFzQ2VsbCgpKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9u
Q2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4
Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0
aCwgbV9sb2NhdGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhl
YywgZXJyb3IpOwogfQpAQCAtMzMzLDcgKzMzMCw3IEBAIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhy
b3dFeGNlcHRpb24oRXhlY1MKIEpTT2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopCiB7CiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0
PEV4Y2VwdGlvbio+KG9iaikpCi0gICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKFNpdGU6OlRocm93KTsKKyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05l
ZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVudDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRpb24p
OwogICAgIAogICAgIHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIG9iaik7CiB9CkBA
IC0zNDEsNTUgKzMzOCwyNCBAQCBKU09iamVjdCogVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24o
RXhlCiB2b2lkIFRocm93U2NvcGU6OnByaW50SWZOZWVkQ2hlY2soY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQogewogICAgIGlmIChtX3Zt
Lm1fbmVlZEV4Y2VwdGlvbkNoZWNrKQotICAgICAgICBkYXRhTG9nKCI8IiwgdHJhY2VDb3VudCsr
LCAiPiBOZWVkIGV4Y2VwdGlvbiBjaGVjayBhdCAiLCBmdW5jdGlvbk5hbWUsICIgQCAiLCBmaWxl
LCAiOiIsIGxpbmUsICJcbiIpOworICAgICAgICBsb2dFdmVudChFeGNlcHRpb25FdmVudDo6TmVl
ZEV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25FdmVudExvY2F0aW9uKGZ1bmN0aW9uTmFtZSwgZmls
ZSwgbGluZSkpOwogfQogCi12b2lkIFRocm93U2NvcGU6OnNpbXVsYXRlVGhyb3coKQordm9pZCBU
aHJvd1Njb3BlOjpzaW11bGF0ZVRocm93KEV4Y2VwdGlvbkV2ZW50IGV2ZW50KQogewotICAgIFJF
TEVBU0VfQVNTRVJUKG1fdm0ubV90b3BUaHJvd1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUpOworICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50
RXZlbnQgPSBldmVudDsKICAgICBtX3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uID0g
bV9sb2NhdGlvbjsKICAgICBtX3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludERlcHRoID0gbV9kZXB0
aDsKICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrID0gdHJ1ZTsKIAotICAgIGlmICh0cmFj
ZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUg
WyIsIG1fZGVwdGgsICJdIFRocm93IGZyb206ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAi
IEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24ubGluZSwgIlxuIik7Ci0gICAg
ICAgIGlmICh0cmFjZVdpdGhTdGFja1RyYWNlcykKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0
aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9s
b2NhdGlvbik7CisgICAgICAgIGlmIChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3Rh
Y2tUcmFjZXMpCiAgICAgICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKICAgICB9CiB9CiAK
LXZvaWQgVGhyb3dTY29wZTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoVGhy
b3dTY29wZTo6U2l0ZSBzaXRlKQotewotICAgIGlmICghdmVyaWZpY2F0aW9uT24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChVTkxJS0VMWShtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKSkg
ewotICAgICAgICBhdXRvIGZhaWxEZXB0aCA9IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVw
dGg7Ci0gICAgICAgIGF1dG8mIGZhaWxMb2NhdGlvbiA9IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1Bv
aW50TG9jYXRpb247Ci0KLSAgICAgICAgYXV0byBzaXRlTmFtZSA9IFtdIChTaXRlIHNpdGUpIC0+
IGNvbnN0IGNoYXIqIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc2l0ZSkgewotICAgICAgICAgICAg
Y2FzZSBTaXRlOjpTY29wZUVudHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiAiRW50cnkiOwot
ICAgICAgICAgICAgY2FzZSBTaXRlOjpTY29wZUV4aXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICJFeGl0IjsKLSAgICAgICAgICAgIGNhc2UgU2l0ZTo6VGhyb3c6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICJUaHJvdyI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJGQUlMRUQgZXhjZXB0aW9uIGNoZWNr
IHZlcmlmaWNhdGlvbjpcbiIKLSAgICAgICAgICAgICIgICAgRXhjZXB0aW9uIHRocm93biBmcm9t
IFRocm93U2NvcGUgWyIsIGZhaWxEZXB0aCwgIl0gIiwgc2l0ZU5hbWUoc2l0ZSksICI6ICIsIGZh
aWxMb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBmYWlsTG9jYXRpb24uZmlsZSwgIjoiLCBm
YWlsTG9jYXRpb24ubGluZSwgIlxuIgotICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgaW4g
VGhyb3dTY29wZSBbIiwgbV9kZXB0aCwgIl06ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAi
IEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24ubGluZSwgIlxuIgotICAgICAg
ICAgICAgIlxuIik7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0ubV9uZWVkRXhjZXB0
aW9uQ2hlY2spOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJ
RklDQVRJT04pCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04p
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Rocm93U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UaHJvd1Njb3BlLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsODggKzI2
LDY0IEBACiAjaWZuZGVmIFRocm93U2NvcGVfaAogI2RlZmluZSBUaHJvd1Njb3BlX2gKIAotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
U2NvcGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpT
T2JqZWN0OwogCi0jaWYgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNpZiBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7Citj
bGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBUaHJvd1Njb3BlKFZNJiwgVGhyb3dTY29wZUxvY2F0aW9uKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBUaHJvd1Njb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnRMb2NhdGlv
bik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflRocm93U2NvcGUoKTsKIAogICAgIFRocm93U2Nv
cGUoY29uc3QgVGhyb3dTY29wZSYpID0gZGVsZXRlOwogICAgIFRocm93U2NvcGUoVGhyb3dTY29w
ZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0K
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4
Y2VwdGlvbiopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kik7CiAKLSAgICBpbmxpbmUgRXhjZXB0
aW9uKiBleGNlcHRpb24oKQotICAgIHsKLSAgICAgICAgbV92bS5tX25lZWRFeGNlcHRpb25DaGVj
ayA9IGZhbHNlOwotICAgICAgICByZXR1cm4gbV92bS5leGNlcHRpb24oKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgdm9pZCByZWxlYXNlKCkgeyBtX2lzUmVsZWFzZWQgPSB0cnVlOyB9CisgICAgdm9p
ZCByZWxlYXNlKCkgeyBtX2lzUmVsZWFzZWQgPSB0cnVlOyB9CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHByaW50SWZOZWVkQ2hlY2soY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNpbXVs
YXRlVGhyb3coKTsKKyAgICB2b2lkIHNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQpOwogCi0g
ICAgZW51bSBjbGFzcyBTaXRlIHsKLSAgICAgICAgU2NvcGVFbnRyeSwKLSAgICAgICAgU2NvcGVF
eGl0LAotICAgICAgICBUaHJvdwotICAgIH07Ci0gICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVj
a05lZWRJc1NhdGlzZmllZChTaXRlKTsKLQotICAgIFZNJiBtX3ZtOwotICAgIFRocm93U2NvcGUq
IG1fcHJldmlvdXNTY29wZTsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24gbV9sb2NhdGlvbjsKLSAg
ICB1bnNpZ25lZCBtX2RlcHRoOwogICAgIGJvb2wgbV9pc1JlbGVhc2VkIHsgZmFsc2UgfTsKIH07
CiAKICNkZWZpbmUgREVDTEFSRV9USFJPV19TQ09QRSh2bV9fKSBcCi0gICAgSlNDOjpUaHJvd1Nj
b3BlKCh2bV9fKSwgSlNDOjpUaHJvd1Njb3BlTG9jYXRpb24oX19GVU5DVElPTl9fLCBfX0ZJTEVf
XywgX19MSU5FX18pKQorICAgIEpTQzo6VGhyb3dTY29wZSgodm1fXyksIEpTQzo6RXhjZXB0aW9u
RXZlbnRMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykpCiAKICNkZWZp
bmUgdGhyb3dTY29wZVByaW50SWZOZWVkQ2hlY2soc2NvcGVfXykgXAogICAgIHNjb3BlX18ucHJp
bnRJZk5lZWRDaGVjayhfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykKIAotI2Vsc2Ug
Ly8gbm90IEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCisjZWxzZSAvLyBub3QgRU5B
QkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAKLWNsYXNzIFRocm93U2NvcGUgewor
Y2xhc3MgVGhyb3dTY29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAg
VGhyb3dTY29wZShWTSYgdm0pCi0gICAgICAgIDogbV92bSh2bSkKKyAgICBBTFdBWVNfSU5MSU5F
IFRocm93U2NvcGUoVk0mIHZtKQorICAgICAgICA6IEV4Y2VwdGlvblNjb3BlKHZtKQogICAgIHsg
fQorICAgIFRocm93U2NvcGUoY29uc3QgVGhyb3dTY29wZSYpID0gZGVsZXRlOworICAgIFRocm93
U2NvcGUoVGhyb3dTY29wZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBWTSYgdm0oKSBjb25zdCB7IHJl
dHVybiBtX3ZtOyB9Ci0gICAgCi0gICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uKTsgfQotICAgIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsg
fQotICAgIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmopIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsgfQotICAgIAot
ICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgeyByZXR1cm4gbV92bS5leGNlcHRpb24oKTsgfQot
ICAgIHZvaWQgcmVsZWFzZSgpIHsgfQotICAgIAotcHJpdmF0ZToKLSAgICBWTSYgbV92bTsKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZh
bHVlKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBvYmopOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVsZWFzZSgpIHsgfQogfTsK
IAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKICAgICBKU0M6OlRocm93U2Nv
cGUoKHZtX18pKQogCi0jZW5kaWYgLy8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikK
KyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAogQUxXQVlT
X0lOTElORSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYg
c2NvcGUsIEV4Y2VwdGlvbiogZXhjZXB0aW9uKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTQ4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5o
CShub25leGlzdGVudCkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLQot
c3RydWN0IFRocm93U2NvcGVMb2NhdGlvbiB7Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKCkgeyB9
Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZmlsZSwgdW5zaWduZWQgbGluZSkKLSAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rp
b25OYW1lKQotICAgICAgICAsIGZpbGUoZmlsZSkKLSAgICAgICAgLCBsaW5lKGxpbmUpCi0gICAg
eyB9Ci0gICAgCi0gICAgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9OwotICAg
IGNvbnN0IGNoYXIqIGZpbGUgeyBudWxscHRyIH07Ci0gICAgdW5zaWduZWQgbGluZSB7IDAgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNCArODg5LDI2IEBAIGJvb2wgVk06Omlz
U2FmZVRvUmVjdXJzZVNvZnRDTG9vcCgpIGNvbnMKIH0KICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkK
IAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVy
aWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVu
c2lnbmVkIGRlcHRoLCBFeGNlcHRpb25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBp
ZiAoIW1fdmVyaWZ5RXhjZXB0aW9uRXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
VU5MSUtFTFkobV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVu
dCA9IG1fc2ltdWxhdGVkVGhyb3dQb2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGgg
PSBtX3NpbXVsYXRlZFRocm93UG9pbnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlv
biA9IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAiRkFJTEVEIGV4Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAg
ICAgICAgICAiICAgIEV4Y2VwdGlvbiB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwg
dGhyb3dFdmVudCwgIjogIiwgdGhyb3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBp
cyB1bmNoZWNrZWQgYXQgWyIsIGRlcHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJc
biIKKyAgICAgICAgICAgICJcbiIpOworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRF
eGNlcHRpb25DaGVjayk7CisgICAgfQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250
cm9sRmxvd1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25FdmVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24u
aCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgpAQCAtNDcsNyArNDksNiBAQAog
I2luY2x1ZGUgIlNtYWxsU3RyaW5ncy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNs
dWRlICJTdHJvbmcuaCIKLSNpbmNsdWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJUaHVua0dlbmVyYXRvcnMuaCIKICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKQEAgLTg1LDYgKzg2LDcgQEAgY2xhc3MgQ29tbW9u
SWRlbnRpZmllcnM7CiBjbGFzcyBDdXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7
CiBjbGFzcyBFeGNlcHRpb247CitjbGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0
YWNrOwogY2xhc3MgVHlwZVByb2ZpbGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTEy
LDcgKzExNCw2IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xh
c3MgU3ltYm9sOwotY2xhc3MgVGhyb3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRFdmFsQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU7CkBAIC00NDMsMTIgKzQ0NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQ
cmV2aW91c0V4Y2VwdGlvbihFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhj
ZXB0aW9uKTsgfQogCi0gICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBu
dWxscHRyOyB9CiAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlv
biA9IG51bGxwdHI7IH0KIAogICAgIEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNh
dGNoKCkgeyByZXR1cm4gJmNhbGxGcmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4
Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRk
cmVzc09mRXhjZXB0aW9uKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1f
ZXhjZXB0aW9uKTsgfQogCiAgICAgRXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RXhjZXB0aW9uOyB9CkBAIC02NDQsNiArNjQzLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CiAgICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9
IGV4Y2VwdGlvbjsKICAgICB9CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2V4Y2VwdGlvbjsgfQorICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fZXhjZXB0
aW9uID0gbnVsbHB0cjsgfQogCiAjaWYgIUVOQUJMRShKSVQpICAgIAogICAgIGJvb2wgZW5zdXJl
U3RhY2tDYXBhY2l0eUZvckNMb29wKFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKTsKQEAgLTY1NCw2
ICs2NTUsMTAgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRocm93
RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpT
T2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCopOwogCisjaWYgRU5B
QkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgdm9pZCB2ZXJpZnlFeGNlcHRp
b25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRpb25FdmVudCwgdW5zaWduZWQgZGVwdGgsIEV4
Y2VwdGlvbkV2ZW50TG9jYXRpb24mKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
ICAgICBib29sIG1fY2FuVXNlQXNzZW1ibGVyOwogI2VuZGlmCkBAIC02NzgsMTEgKzY4MywyMyBA
QCBwcml2YXRlOgogCiAgICAgRXhjZXB0aW9uKiBtX2V4Y2VwdGlvbiB7IG51bGxwdHIgfTsKICAg
ICBFeGNlcHRpb24qIG1fbGFzdEV4Y2VwdGlvbiB7IG51bGxwdHIgfTsKLSNpZiBFTkFCTEUoVEhS
T1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQotICAgIFRocm93U2NvcGUqIG1fdG9wVGhyb3dTY29wZSB7
IG51bGxwdHIgfTsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24gbV9zaW11bGF0ZWRUaHJvd1BvaW50
TG9jYXRpb247CisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAg
RXhjZXB0aW9uU2NvcGUqIG1fdG9wRXhjZXB0aW9uU2NvcGUgeyBudWxscHRyIH07CisgICAgRXhj
ZXB0aW9uRXZlbnQgbV9zaW11bGF0ZWRUaHJvd1BvaW50RXZlbnQ7CisgICAgRXhjZXB0aW9uRXZl
bnRMb2NhdGlvbiBtX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKICAgICB1bnNpZ25lZCBt
X3NpbXVsYXRlZFRocm93UG9pbnREZXB0aCB7IDAgfTsKICAgICBtdXRhYmxlIGJvb2wgbV9uZWVk
RXhjZXB0aW9uQ2hlY2sgeyBmYWxzZSB9OworCisgICAgLy8gTG9ncyBhbGwgZXhjZXB0aW9uIGFj
dGl2aXR5IHRvIGhlbHAgZGVidWcgdGhlIHNvdXJjZSBvZiBhIHZlcmlmaWNhdGlvbiBmYWlsdXJl
LgorICAgIGJvb2wgbV90cmFjZUV4Y2VwdGlvbkV2ZW50cyB7IGZhbHNlIH07CisKKyAgICAvLyBB
IG1vcmUgdmVyYm9zZSBsb2dnaW5nIG9wdGlvbiB0byBkdW1wIHRoZSBDKysgc3RhY2sgdHJhY2Ug
YXQgc3RyYXRlZ2ljIHBvaW50cyB0byBhaWQgZGVidWdnaW5nLgorICAgIGJvb2wgbV90cmFjZUV4
Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcyB7IGZhbHNlIH07CisKKyAgICAvLyBEaXNhYmxl
ZCB0ZW1wb3JhcmlseSB1bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBm
aXhlZC4KKyAgICBib29sIG1fdmVyaWZ5RXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAg
IHVuc2lnbmVkIG1fZXhjZXB0aW9uRXZlbnRDb3VudCB7IDAgfTsKICNlbmRpZgogCiAgICAgYm9v
bCBtX2ZhaWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKQEAgLTcwOCw2ICs3MjUsMTAgQEAg
cHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93Q2hpY2tlbj4gbV9zaGFkb3dDaGlj
a2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5PiBtX2J5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICAvLyBGcmllbmRzIGZvciBleGNlcHRpb24g
Y2hlY2tpbmcgcHVycG9zZSBvbmx5LgorICAgIGZyaWVuZCBjbGFzcyBIZWFwOworICAgIGZyaWVu
ZCBjbGFzcyBDYXRjaFNjb3BlOworICAgIGZyaWVuZCBjbGFzcyBFeGNlcHRpb25TY29wZTsKICAg
ICBmcmllbmQgY2xhc3MgVGhyb3dTY29wZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1NDg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7
CiAgICAgU3RydWN0dXJlKiB3ZWFrTWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3Jl
YXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVj
dC0+d2Vha01hcFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vha01h
cDo6Y3JlYXRlKGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUg
PSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdl
YWtNYXApOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0gd2Vha01hcC0+SlNPYmplY3Q6
OmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRh
IGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTc2LDE3ICs3NiwxOCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAgIGZvckVhY2hJbkl0ZXJhYmxl
KGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV4
dEl0ZW0pIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgICAgICBpZiAoIW5leHRJdGVtLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIEpTVmFsdWUga2V5ID0gbmV4dEl0ZW0uZ2V0KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPigwKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigx
KSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0
cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtT
ZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQgPSBKU1dlYWtTZXQ6OmNyZWF0
ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+
YXJndW1lbnQoMCk7CkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrU2V0KTsK
IAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHdlYWtTZXQtPkpTT2JqZWN0OjpnZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1
bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNyw5ICszMDcsMTAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBy
aW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgZGF0YUxvZyhhcmdTdHIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0
ODUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlh
IFRocm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTYtMDgtMzEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQg
YmUgYWxsb2NhdGVkIGluIEF1eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNw
YWNlIGFuZCB3ZSBzaG91bGQgcmV3cml0ZSBhcyBtdWNoIG9mIHRoZSBHQyBhcyBuZWVkZWQgdG8g
bWFrZSB0aGlzIG5vdCBhIHJlZ3Jlc3Npb24KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjA1
NDg1KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTE4
LDggKzkxOCw4IEBACiAjZGVmaW5lIEVOQUJMRV9NQVNNX1BST0JFIDAKICNlbmRpZgogCi0jaWZu
ZGVmIEVOQUJMRV9USFJPV19TQ09QRV9WRVJJRklDQVRJT04KLSNkZWZpbmUgRU5BQkxFX1RIUk9X
X1NDT1BFX1ZFUklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKKyNpZm5kZWYgRU5BQkxFX0VY
Q0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04KKyNkZWZpbmUgRU5BQkxFX0VYQ0VQVElPTl9TQ09Q
RV9WRVJJRklDQVRJT04gKCFkZWZpbmVkKE5ERUJVRykpCiAjZW5kaWYKIAogLyogUGljayB3aGlj
aCBhbGxvY2F0b3IgdG8gdXNlOyB3ZSBvbmx5IG5lZWQgYW4gZXhlY3V0YWJsZSBhbGxvY2F0b3Ig
aWYgdGhlIGFzc2VtYmxlciBpcyBjb21waWxlZCBpbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDUxNiBAQAorMjAxNi0wOS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgQWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tz
IHRvIGJlIHZpYSBUaHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdCBiZWNhdXNlIHRoZXJlIGlz
IG5vIGJlaGF2aW9yIGNoYW5nZSBpbiBnZW5lcmFsIGV4Y2VwdCBmb3IgMSBidWcgZml4LgorICAg
ICAgICBUaGF0IGJ1ZyBpcyBhbHJlYWR5IGNhdWdodCBieSBleGlzdGluZyB0ZXN0cyB3aXRoIHRo
ZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIENhdGNoU2NvcGUuCisKKyAgICAgICAgRml4ZXMgYSBidWcg
aW4gSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCgpIHdoZXJlIHRoZSBleGNlcHRpb24gdGhy
b3duIGZyb20KKyAgICAgICAgYSBmYWlsZWQgYXR0ZW1wdCB0byBnZXQgdGhlIGhhbmRsZUV2ZW50
IGNhbGxiYWNrIGlzIG5vdCBoYW5kbGVkLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
cnVudGltZS9DYXRjaFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVk
bWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Np
b25DbGVhcktleTo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJm
b3JtUHV0T3JBZGQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdCk6CisgICAg
ICAgICogTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2Vt
ZW50U2NyaXB0SW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVw
bGFjZW1lbnQ6Omluc3RhbGxSZXBsYWNlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvQXJy
YXlWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcnJheVZhbHVlOjpnZXQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVTaGlwcGluZ01ldGhvZFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVT
aGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNBcHBsZVBheVNl
c3Npb246OmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9U
cmFjazo6c2V0S2luZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvVHJhY2s6OnNldExhbmd1
YWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SlNCbG9iKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU0xp
c3RlbmVyRnVuY3Rpb25zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0
aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEhh
c2hBbGdvcml0aG0pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFlc0tleUdlblBhcmFtcyk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVIbWFjUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNLZXlQYXJh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhS2V5R2VuUGFyYW1zKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZVJzYU9hZXBQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
UnNhU3NhUGFyYW1zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNBcnJheUZyb21KU09OKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFN0cmluZ0Zyb21KU09OKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEJvb2xlYW5Gcm9tSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0s6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uY2lsZVVzYWdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGFPY3RldFNlcXVl
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5
RGF0YVJTQUNvbXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLOjprZXlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSlNPTkZvclJTQUNv
bXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkVXNhZ2VzVG9KU09OKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2VyaWFsaXplKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjb25zdHJ1Y3RFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsZW1lbnQp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OndoZW5EZWZpbmVkUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeTo6d2hlbkRlZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZVRvVVNWU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRD
dXJyZW50RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERPTUV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNJdGVyYXRvck1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjp0
b1NtYWxsZXJJbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVyVUludCk6CisgICAgICAg
IChXZWJDb3JlOjp0b0ludDMyRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUlu
dDMyRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50NjRFbmZvcmNlUmFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50NjRFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6dGhyb3dOb3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0lu
dmFsaWRTdGF0ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93U2VjdXJpdHlFcnJvcik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJD
b3JlOjpqc0Zyb3plbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRz
PFN0cmluZz46Om5hdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJh
aXRzPHVuc2lnbmVkPjo6bmF0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFs
dWVUcmFpdHM8ZmxvYXQ+OjpuYXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVW
YWx1ZVRyYWl0czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b05h
dGl2ZUFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjptYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6Om1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjppdGVyYXRvckZvckVhY2gp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpyZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxQcm9taXNlRnVuY3Rp
b24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93TWljcm90YXNrQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3Blbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKToKKyAgICAgICAgKFdlYkNv
cmU6OmhhbmRsZVBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojpz
ZXRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRJbnRlcnZhbCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnN0cnVjdEpTRGF0YUN1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEZXZp
Y2VNb3Rpb25FdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkQWNjZWxlcmF0
aW9uQXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVhZFJvdGF0aW9uUmF0ZUFyZ3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rp
b25FdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRGljdGlvbmFyeS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojp0cnlHZXRQ
cm9wZXJ0eUFuZFJlc3VsdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNGaWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRmls
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
SlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
R2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRN
TEFsbENvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxD
b2xsZWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldDNEQ29udGV4dEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4dCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpwdXNo
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTGF6
eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVKU0Z1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6fkpTTWFpblRocmVhZEV4ZWNTdGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6aGFuZGxlSW5pdE1lc3NhZ2VFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNz
YWdlUG9ydEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxsTWVzc2FnZVBvcnRBcnJh
eSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oOgorICAgICAg
ICAoV2ViQ29yZTo6aGFuZGxlUG9zdE1lc3NhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnNldERlY2lzaW9uUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6dG9EZWNpc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpKU01vY2tDb250ZW50Rmls
dGVyU2V0dGluZ3M6OnNldERlY2lzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5nczo6c2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbik6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
Tm9kZUZpbHRlcjo6YWNjZXB0Tm9kZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlT3JT
dHJpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9Ob2RlT3JTdHJpbmdWZWN0b3IpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbCk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdMZW5n
dGg6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1N0
b3JhZ2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpnZXRPd25Qcm9w
ZXJ0eU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6cHV0RGVsZWdhdGUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTVGV4dFRyYWNrOjpzZXRMYW5ndWFnZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNWaWRlb1RyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFjazo6
c2V0S2luZCk6CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2s6OnNldExhbmd1YWdlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpnZXRJbmRleGVk
UGFyYW1ldGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0T2JqZWN0UGFyYW1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5z
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpk
YXRhRnVuY3Rpb25mKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbk1hdHJpeCk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3J5
cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0
bGVDcnlwdG86OmVuY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlw
dG86OmRlY3J5cHQpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNp
Z24pOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlmeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGlnZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChX
ZWJDb3JlOjppbXBvcnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlw
dG86OmltcG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpleHBvcnRLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1dvcmtlcik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRTY3JpcHRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnNldFRpbWVvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0SW50ZXJ2YWwpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aW52b2tlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6OmlzQ29udHJv
bGxlZFJlYWRhYmxlU3RyZWFtTG9ja2VkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1ZXVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y2hlZHVsZWRBY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lQmFzZTo6c2hvdWxkVGVybWluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAg
ICAgICAgKEdlbmVyYXRlRGljdGlvbmFyeUltcGxlbWVudGF0aW9uQ29udGVudCk6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1ldGVyc0No
ZWNrKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwpOgorICAg
ICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0QWN0aXZlRE9NT2JqZWN0UHJvdG90eXBlRnVuY3Rpb25Qb3N0TWVzc2FnZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEN1c3RvbU5hbWVkR2V0dGVyUHJvdG90
eXBlRnVuY3Rpb25Bbm90aGVyRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0RXZlbnRUYXJnZXRQcm90b3R5cGVGdW5jdGlvbkl0ZW0pOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25FbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxP
YmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbWVudHNTdGF0
aWNBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNT
dHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIz
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxlbWVu
dGFsU3RhdGljQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBw
bGVtZW50YWxTdHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBs
ZW1lbnRhbFN0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxl
bWVudGFsTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvbkltcGxlbWVudHNNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVy
ZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0dHJpYnV0
ZVJXQ3VzdG9tKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3ROYW1lZENvbnN0cnVj
dG9yTmFtZWRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RO
b2RlTmFtZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRl
dGVybWluaXN0aWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpY05vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljRXhjZXB0aW9uQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaW5pc3Rp
Y0dldHRlckV4Y2VwdGlvbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9uZGV0
ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxkTm90
VG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGljdGlvbmFyeTxUZXN0
T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4pOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydERpY3Rpb25hcnk8QWx0ZXJuYXRlRGljdGlvbmFyeU5hbWU+KToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dGluZ0NvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVudW1BdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakJ5dGVBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iak9jdGV0QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9y
dEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ2xhbXBlZFNob3J0QXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydEF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmlu
Z0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpUZXN0TnVsbGFibGVPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iakxlbmllbnRUZXN0T2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpJbXBsZW1lbnRhdGlvbkVudW1BdHRy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialhNTE9iakF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqQ3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialJlZmxlY3RlZFN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVm
bGVjdGVkVW5zaWduZWRJbnRlZ3JhbEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqUmVmbGVjdGVkQm9vbGVhbkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVJMQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZVUkxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1
c3RvbUludGVncmFsQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRDdXN0b21Cb29sZWFuQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21VUkxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakVuYWJs
ZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVHlw
ZWRBcnJheUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhHZXR0
ZXJFeGNlcHRpb25XaXRoTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpB
dHRyV2l0aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakN1c3RvbUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqT25mb28pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqT253ZWJraXRm
b28pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRl
ckNhbGxXaXRoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyNUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjZDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iaklt
bXV0YWJsZVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmF3YmVycnkp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqSWQpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cmlidXRlV2l0aFJlc2VydmVkRW51bVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJsZWRB
dFJ1bnRpbWVPcGVyYXRpb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Wb2lkTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25CeXRlTWV0aG9kV2l0aEFyZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PY3RldE1ldGhvZFdp
dGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTG9u
Z01ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT2JqTWV0aG9kV2l0aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhYUGF0
aE5TUmVzb2x2ZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25OdWxsYWJsZVN0cmluZ1NwZWNpYWxNZXRob2QpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRW51bUFyZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEVu
dW1BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxFbnVtQXJnQW5kRGVmYXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhVU1ZTdHJpbmdBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblByaXZhdGVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25QdWJsaWNBbmRQcml2YXRlTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2ZW50TGlzdGVu
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2Ny
aXB0U3RhdGVPYmopOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbFVTVlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0Fu
ZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bFN0cmluZ0lzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3Ry
aW5nSXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lz
RW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRG91
YmxlSXNOYU4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25n
TG9uZ0lzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdM
b25nSXNaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlzRW1wdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9u
YWxCb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbklzRmFsc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
Tm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVu
Y3Rpb25BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk92ZXJsb2FkZWRNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDMpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q3KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDkp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVk
TWV0aG9kMTApOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
dmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyMSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2RXaXRo
T3B0aW9uYWxQYXJhbWV0ZXIyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVj
dG9yRnVuY3Rpb25DbGFzc01ldGhvZFdpdGhPcHRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDExKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9iakNvbnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhv
ZFdpdGhDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZSk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblN0cmluZ0FycmF5RnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoQW5kV2l0aG91dE51bGxhYmxlU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25HZXRFbGVtZW50QnlJZCk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbnZlcnQzKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29udmVydDQpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY1N0cmluZ01ldGhvZCk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblZhcmlhZGljRG91YmxlTWV0aG9kKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQW55KToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VGdW5jdGlv
bldpdGhGbG9hdEFyZ3VtZW50UHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoT3B0aW9uYWxJbnRBcmd1bWVu
dFByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25U
ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbjFQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDEpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2Fk
Mik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmdsZUNv
bmRpdGlvbmFsT3ZlcmxvYWQxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZDIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BdHRhY2hTaGFkb3dSb290KToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
MSk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzMik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzNCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzNSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTEpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhT
ZXF1ZW5jZTIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
cmlkZUJ1aWx0aW5zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE92ZXJyaWRlQnVpbHRp
bnNQcm90b3R5cGVGdW5jdGlvbk5hbWVkSXRlbSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VDYWNoZWRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdFR5cGVkZWZzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1Vu
c2lnbmVkTG9uZ0xvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZz
SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
bkZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlv
blNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aFNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5
cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25OdWxsYWJsZVNlcXVlbmNlQXJnKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jV2l0aENsYW1wKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdTZXF1
ZW5jZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBl
RnVuY3Rpb25TdHJpbmdTZXF1ZW5jZUZ1bmN0aW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uQ2FsbFdpdGhTZXF1ZW5jZVRoYXRSZXF1aXJlc0lu
Y2x1ZGUpOgorICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisgICAgICAgIChfTlBO
X0ludm9rZURlZmF1bHQpOgorICAgICAgICAoX05QTl9JbnZva2UpOgorICAgICAgICAoX05QTl9F
dmFsdWF0ZSk6CisgICAgICAgIChfTlBOX0dldFByb3BlcnR5KToKKyAgICAgICAgKF9OUE5fU2V0
UHJvcGVydHkpOgorICAgICAgICAoX05QTl9SZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChfTlBO
X0hhc1Byb3BlcnR5KToKKyAgICAgICAgKF9OUE5fSGFzTWV0aG9kKToKKyAgICAgICAgKF9OUE5f
RW51bWVyYXRlKToKKyAgICAgICAgKF9OUE5fQ29uc3RydWN0KToKKyAgICAgICAgKiBicmlkZ2Uv
Yy9jX2luc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6bW92
ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKToKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW06CisgICAgICAgIChXZWJDb3JlOjphZGRFeGNlcHRpb25Ub0NvbnNvbGUp
OgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgY2FsbFdlYlNjcmlwdE1ldGhvZDp3aXRoQXJn
dW1lbnRzOl0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgZXZhbHVhdGVXZWJTY3JpcHQ6
XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRWYWx1ZTpmb3JLZXk6XSk6CisgICAg
ICAgICgtW1dlYlNjcmlwdE9iamVjdCB2YWx1ZUZvcktleTpdKToKKyAgICAgICAgKC1bV2ViU2Ny
aXB0T2JqZWN0IHJlbW92ZVdlYlNjcmlwdEtleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2Jq
ZWN0IGhhc1dlYlNjcmlwdEtleTpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHdlYlNj
cmlwdFZhbHVlQXRJbmRleDpdKToKKyAgICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFdlYlNj
cmlwdFZhbHVlQXRJbmRleDp2YWx1ZTpdKToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpnZXREb21haW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpnZXRUeXBlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmxvYWRUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2Fk
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkRW5jb2Rl
ZFJ1bGVzKToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udHJvbGxlckpTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnRhaW5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNvbnRyb2xzSW5qZWN0ZWRTY3JpcHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYUNvbnRyb2xz
QWZ0ZXJQcmVzZW50YXRpb25Nb2RlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYUNvbnRyb2xzU3RhdHVzKToKKyAgICAgICAgKiBodG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJ
bkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2hhZG93Um9vdCk6CisKIDIwMTYtMDktMDYg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHAvdGVzdHMv
c2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3dvcmtlci1jc3AtYmxvY2tzLXhoci1yZWRp
cmVjdC1jcm9zcy1vcmlnaW4uaHRtbCBpcyBmbGFreQpJbmRleDogU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNjb3BlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9DYXRjaFNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldE
X0NhdGNoU2NvcGVfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9DYXRjaFNjb3BlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNlc3Npb25D
bGVhcktleS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDEyICsxMTEsMTMgQEAgYm9vbCBDRE1TZXNzaW9uQ2xlYXJLZXk6OnVwZGF0ZShVaW50OEFy
cgogCiAgICAgICAgIFZNJiB2bSA9IGNsZWFyS2V5Vk0oKTsKICAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlKHZtLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSkp
OwogICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAogICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKGNsZWFyS2V5Vk0oKSk7CiAgICAgICAgIEpT
VmFsdWUga2V5c0RhdGFPYmplY3QgPSBKU09OUGFyc2UoZXhlYywgcmF3S2V5c1N0cmluZyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKKyAg
ICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFrZXlzRGF0YU9iamVjdCkgewogICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoJXApIC0gZmFpbGVk
OiBpbnZhbGlkIEpTT04iLCB0aGlzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw2ICsyMzYs
OSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZvCiAKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgUmVmUHRyPElEQktleT4ga2V5LCBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3Zl
cndyaXRlTW9kZSBvdmVyd3JpdGVNb2RlLCBJbmxpbmVLZXlDaGVjayBpbmxpbmVLZXlDaGVjaywg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIExPRyhJ
bmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQiKTsKICAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7
CiAKQEAgLTI3MCw5ICsyNzMsOSBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6
OnB1dE9yCiAgICAgfQogCiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFs
aXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCB2YWx1ZSwg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAvLyBDbGVhciB0aGUg
RE9NIGV4Y2VwdGlvbiBmcm9tIHRoZSBzZXJpYWxpemVyIHNvIHdlIGNhbiBnaXZlIGEgbW9yZSB0
YXJnZXRlZCBleGNlcHRpb24uCi0gICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEYXRhQ2xvbmVFcnJvcjsKICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiRmFpbGVkIHRvIHN0b3JlIHJlY29yZCBpbiBhbiBJREJPYmplY3RTdG9yZTogQW4g
b2JqZWN0IGNvdWxkIG5vdCBiZSBjbG9uZWQuIik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSw3
ICs4NTksOSBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAg
Ly8gdXNpbmcgc3RlcHMgdG8gYXNzaWduIGEga2V5IHRvIGEgdmFsdWUgdXNpbmcgYSBrZXkgcGF0
aC4KICAgICBUaHJlYWRTYWZlRGF0YUJ1ZmZlciBpbmplY3RlZFJlY29yZFZhbHVlOwogICAgIGlm
ICh1c2VkS2V5SXNHZW5lcmF0ZWQgJiYgIW9iamVjdFN0b3JlSW5mby0+a2V5UGF0aCgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZGF0YWJhc2VUaHJlYWRWTSgpKTsK
KyAgICAgICAgVk0mIHZtID0gZGF0YWJhc2VUaHJlYWRWTSgpOworICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9ja2VyKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgICAgIGF1dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVl
KGRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIG9yaWdpbmFsUmVjb3JkVmFsdWUuZGF0YSgpKTsK
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTg3Myw3ICs4NzUsNyBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JBZGQoCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCZkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLCB2YWx1ZSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChkYXRhYmFzZVRocmVhZEV4ZWNTdGF0ZSgpLmhhZEV4Y2VwdGlvbigpKSB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIHBv
c3REYXRhYmFzZVRhc2tSZXBseShjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkUGVyZm9ybVB1dE9yQWRkLCBjYWxsYmFja0lkZW50aWZpZXIsIElEQkVy
cm9yKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJhaW50RXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
VW5hYmxlIHRvIHNlcmlhbGl6ZSByZWNvcmQgdmFsdWUgYWZ0ZXIgaW5qZWN0aW5nIHJlY29yZCBr
ZXkiKSksIHVzZWRLZXkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9TRFBQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsMTUgKzUwMCwxNyBA
QCBib29sIFNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgp
OwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVk
V29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPmdsb2JhbE9iamVjdCgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKICAgICBKU0M6
OkpTVmFsdWUgcHJvYmVGdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnZW5lcmF0ZSIpKTsKICAgICBpZiAoIXBy
b2JlRnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgVVJMIHNjcmlwdFVSTDsK
ICAgICAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29k
ZShTRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZTo6c2NyaXB0U3RyaW5nKCksIHNjcmlwdFVSTCks
ICptX2lzb2xhdGVkV29ybGQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC01Mjcs
OSArNTI5LDkgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQoY29uc3QgU3RyaQogICAg
IGFyZ0xpc3QuYXBwZW5kKEpTQzo6anNTdHJpbmcoZXhlYywgYXJndW1lbnQpKTsKIAogICAgIEpT
Qzo6SlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IExPR19FUlJPUigiU0RQUHJvY2Vzc29yIHNjcmlwdCB0aHJldyBpbiBmdW5jdGlvbiAlcyIsIGZ1
bmN0aW9uTmFtZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1Rp
bWVQbHVnaW5SZXBsYWNlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHJldmlzaW9uIDIwNTQ4
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBs
YWNlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYwLDE3ICsxNjAsMTkgQEAgYm9vbCBRdWlj
a1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZW5zdXJlUgogICAgIERPTVdyYXBwZXJXb3JsZCYgd29y
bGQgPSBpc29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJv
bGxlciA9IG1fcGFyZW50RWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpT
Qzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgCiAgICAgSlNDOjpKU1ZhbHVlIHJlcGxh
Y2VtZW50RnVuY3Rpb24gPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImNyZWF0ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChy
ZXBsYWNlbWVudEZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgCiAgICAgc2NyaXB0Q29udHJvbGxlci5ldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29k
ZShxdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudFNjcmlwdCgpKSwgd29ybGQpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEV4Y2VwdGlvbiB3aGVuIGV2YWx1YXRp
bmcgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQiLCB0aGlzKTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTE4OCwxNSArMTkwLDE4IEBA
IGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBET01XcmFwcGVy
V29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNj
cmlwdENvbnRyb2xsZXIgPSBtX3BhcmVudEVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2Ny
aXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQp
KTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgCiAgICAgLy8gTG9v
a3VwIHRoZSAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiIGZ1bmN0aW9uLgogICAgIEpTQzo6SlNW
YWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIpKTsK
ICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgSlNDOjpKU09iamVjdCogcmVwbGFjZW1lbnRPYmplY3QgPSBy
ZXBsYWNlbWVudEZ1bmN0aW9uLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IHJlcGxhY2Vt
ZW50T2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShyZXBsYWNlbWVudE9iamVjdCwg
Y2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQpAQCAt
MjA5LDMyICsyMTQsMzIgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5zdGFs
bAogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1f
bmFtZXMpKTsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBtX3ZhbHVlcykpOwogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudCA9IGNhbGwoZXhl
YywgcmVwbGFjZW1lbnRPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBh
cmdMaXN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICAvLyBHZXQgdGhlIDx2aWRlbz4gY3JlYXRlZCB0byByZXBsYWNlIHRoZSBw
bHVnLWluLgogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBK
U0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgInZpZGVvIikpOwotICAgIGlmICghZXhl
Yy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgbV9tZWRpYUVsZW1lbnQgPSBKU0hUTUxWaWRlb0VsZW1lbnQ6OnRvV3JhcHBlZCh2YWx1ZSk7
CiAKICAgICBpZiAoIW1fbWVkaWFFbGVtZW50KSB7CiAgICAgICAgIExPRyhQbHVnaW5zLCAiJXAg
LSBGYWlsZWQgdG8gZmluZCA8dmlkZW8+IGVsZW1lbnQgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1
Z2luIHJlcGxhY2VtZW50IHNjcmlwdC4iLCB0aGlzKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgc2NyaXB0aW5nIGludGVyZmFjZS4KICAg
ICB2YWx1ZSA9IHJlcGxhY2VtZW50LmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgInNjcmlwdE9iamVjdCIpKTsKLSAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
ICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRp
b24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBtX3NjcmlwdE9i
amVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQog
CiAgICAgaWYgKCFtX3NjcmlwdE9iamVjdCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0g
RmFpbGVkIHRvIGZpbmQgc2NyaXB0IG9iamVjdCBjcmVhdGVkIGJ5IFF1aWNrVGltZSBwbHVnaW4g
cmVwbGFjZW1lbnQuIiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOSBAQCBib29sIEFycmF5VmFsdWU6Omdl
dChzaXplX3QgaW5kZXgsIERpY3RpCiAKIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBpbmRl
eCwgU3RyaW5nJiB2YWx1ZSkgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKGlzVW5k
ZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTAsNyArOTMsNyBA
QCBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0cmluCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHZhbHVlID0gaW5kZXhlZFZhbHVlLnRvV1RGU3RyaW5nKG1fZXhlYyk7
Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmNwcAkocmV2aXNp
b24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAgYm9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Q
cm9wZXJ0aWVzQXNTdHJpbgogCiAgICAgSlNPYmplY3QqIG9iamVjdCA9ICBtX2RpY3Rpb25hcnku
aW5pdGlhbGl6ZXJPYmplY3QoKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RpY3Rpb25hcnku
ZXhlY1N0YXRlKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0
eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwogICAgIEpTT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlKCkpOwpAQCAtNjksMTAgKzcxLDEwIEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJv
cGVydGllc0FzU3RyaW4KICAgICAgICAgaWYgKHN0cmluZ0tleS5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMs
ICppdCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChMSUtFTFko
IXNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIG1hcC5zZXQoc3RyaW5nS2V5LCBzdHJp
bmdWYWx1ZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDEzICs5MCwxNCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlJiBzdGF0ZSwgSlNH
bG9iYWxPCiAKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIExvY2tlcjxKU0xvY2s+IGxv
Y2tlcih2bS5hcGlMb2NrKCkpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKIAogICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKICAgICBjYXNlIEtleVR5cGU6OkFy
cmF5OiB7CiAgICAgICAgIGF1dG8mIGluQXJyYXkgPSBrZXktPmFycmF5KCk7CiAgICAgICAgIHVu
c2lnbmVkIHNpemUgPSBpbkFycmF5LnNpemUoKTsKICAgICAgICAgYXV0byBvdXRBcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCAwLCAmZ2xvYmFsT2JqZWN0LCBzaXplKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgICAgIG91dEFy
cmF5LT5wdXREaXJlY3RJbmRleCgmc3RhdGUsIGksIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
aW5BcnJheS5hdChpKS5nZXQoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNBcHBsZVBheVNlc3Npb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNlc3Npb25DdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsMTUgQEAgSlNWYWx1ZSBKU0FwcGxlUGF5
U2Vzc2lvbjo6Y29tcGxldGVTaGlwcAogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
dWludDE2X3Qgc3RhdHVzID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRGljdGlvbmFyeSBuZXdUb3RhbCA9IHsgJnN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBcnJheVZhbHVlIG5ld0xpbmVJdGVtcyB7ICZzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMikgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwuY29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVj
dGlvbihzdGF0dXMsIG5ld1RvdGFsLCBuZXdMaW5lSXRlbXMsIGVjKTsKICAgICBzZXRET01FeGNl
cHRpb24oJnN0YXRlLCBlYyk7CkBAIC04OCwxOSArODgsMTkgQEAgSlNWYWx1ZSBKU0FwcGxlUGF5
U2Vzc2lvbjo6Y29tcGxldGVTaGlwcAogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
dWludDE2X3Qgc3RhdHVzID0gY29udmVydDx1aW50MTZfdD4oc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdTaGlwcGluZ01ldGhvZHMg
eyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7
ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMg
eyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDMpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdDb250
YWN0U2VsZWN0aW9uKHN0YXR1cywgbmV3U2hpcHBpbmdNZXRob2RzLCBuZXdUb3RhbCwgbmV3TGlu
ZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpAQCAtMTI1LDEx
ICsxMjUsMTEgQEAgSlNWYWx1ZSBKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVQYXltZQogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgRGljdGlvbmFyeSBuZXdUb3RhbCA9IHsgJnN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBcnJheVZhbHVlIG5ld0xpbmVJdGVtcyB7ICZz
dGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkgfTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGltcGwuY29tcGxldGVQYXltZW50TWV0aG9kU2Vs
ZWN0aW9uKG5ld1RvdGFsLCBuZXdMaW5lSXRlbXMsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJh
Y2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QXVkaW9UcmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDggKzQzLDExIEBAIHZvaWQgSlNBdWRpb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHIKIHZv
aWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICB3cmFwcGVkKCkuc2V0S2luZChzdHJpbmcpOwogI2Vsc2UK
QEAgLTU2LDggKzU5LDExIEBAIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYg
c3QKIHZvaWQgSlNBdWRpb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0
cmluZyk7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Jsb2JD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0Jsb2JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIHVuc2lnbmVkIGJsb2JQ
YXJ0c0xlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIGJsb2JQYXJ0cyA9IHRvSlNTZXF1ZW5jZShl
eGVjLCBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLCBibG9iUGFydHNMZW5ndGgpOwotICAgIGlm
IChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
QVNTRVJUKGJsb2JQYXJ0cyk7CiAKQEAgLTEwMSw3ICsxMDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhl
IGVuZGluZ3MgcHJvcGVydHkgYW5kIHZhbGlkYXRlIGl0LgogICAgICAgICBib29sIGNvbnRhaW5z
RW5kaW5ncyA9IGRpY3Rpb25hcnkuZ2V0KCJlbmRpbmdzIiwgZW5kaW5ncyk7Ci0gICAgICAgIGlm
IChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgICAgICBpZiAoY29udGFpbnNFbmRpbmdzKSB7CkBAIC0xMTEsNyArMTExLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgICAgIC8vIEF0
dGVtcHQgdG8gZ2V0IHRoZSB0eXBlIHByb3BlcnR5LgogICAgICAgICBkaWN0aW9uYXJ5LmdldCgi
dHlwZSIsIHR5cGUpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xMjEsNyArMTIxLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAg
IGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQpAQCAt
MTMyLDcgKzEzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMK
ICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChzdHJp
bmcsIGVuZGluZ3MpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlz
aW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNs
YXJhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NSw3ICszNTUsNyBAQCBKU1Zh
bHVlIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVyCiAgICAgICAgIHJldHVybiB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigm
c3RhdGUpKTsKIAogICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSB3cmFwcGVk
KCkuZ2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDb21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
b21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw5
IEBAIEpTVmFsdWUgSlNDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RlZE8KIHN0YXRpYyBKU0Fy
cmF5KiBnZXRKU0xpc3RlbmVyRnVuY3Rpb25zKEV4ZWNTdGF0ZSYgc3RhdGUsIERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGxpc3RlbmVySW5mbykKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZzdGF0ZSwg
bnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBz
aXplX3QgaGFuZGxlcnNDb3VudCA9IGxpc3RlbmVySW5mby5ldmVudExpc3RlbmVyVmVjdG9yLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgb3V0cHV0SW5kZXggPSAwOyBpIDwgaGFuZGxl
cnNDb3VudDsgKytpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNTQ4
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgYm9vbCBKU0NyeXB0b0Fs
Z29yaXRobURpY3Rpb25hcnk6OmdldEFsZwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghYWxnb3JpdGhtTmFtZS5jb250YWlu
c09ubHlBU0NJSSgpKSB7CkBAIC0xMDYsMTIgKzEwNiwxNCBAQCBzdGF0aWMgYm9vbCBnZXRIYXNo
QWxnb3JpdGhtKEpTRGljdGlvbmFyCiAgICAgLy8gRlhJTUU6IFRlYWNoIEpTRGljdGlvbmFyeSBo
b3cgdG8gcmV0dXJuIEpTVmFsdWVzLCBhbmQgdXNlIHRoYXQgdG8gZ2V0IGhhc2ggZWxlbWVudCB2
YWx1ZS4KIAogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGRpY3Rpb25hcnkuZXhlY1N0YXRlKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGRpY3Rpb25hcnkuaW5pdGlhbGl6ZXJP
YmplY3QoKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgImhhc2giKTsKIAogICAgIEpTVmFsdWUgaGFzaCA9IGdldFByb3BlcnR5KGV4
ZWMsIG9iamVjdCwgImhhc2giKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKGhhc2guaXNVbmRlZmluZWRPck51bGwoKSkgewpAQCAtMTM0LDE2ICsxMzYsMTYg
QEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIH0KIAogICAg
IEpTVmFsdWUgaXYgPSBnZXRQcm9wZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgIml2Iik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUFlc0NiY1BhcmFtcyk7CiAKICAgICBDcnlw
dG9PcGVyYXRpb25EYXRhIGl2RGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZShleGVjLCBpdiwgaXZEYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNW
YWx1ZShleGVjLCBpdiwgaXZEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CiAKICAgICBpZiAoaXZEYXRhLnNlY29uZCAhPSAxNikgewogICAgICAgICB0aHJvd0V4Y2Vw
dGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgIkFFUy1DQkMgaW5pdGlhbGl6YXRp
b24gZGF0YSBtdXN0IGJlIDE2IGJ5dGVzIikpOwpAQCAtMTY4LDcgKzE3MCw3IEBAIHN0YXRpYyBS
ZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0
UmVmKCpuZXcgQ3J5cHRvQWxnb3JpdGhtQWVzS2V5R2VuUGFyYW1zKTsKIAogICAgIEpTVmFsdWUg
bGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAibGVu
Z3RoIik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmVzdWx0
LT5sZW5ndGggPSBjb252ZXJ0PHVpbnQxNl90PihzdGF0ZSwgbGVuZ3RoVmFsdWUsIEVuZm9yY2VS
YW5nZSk7CkBAIC0xODksMTAgKzE5MSwxMCBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRo
bVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeSgmc3RhdGUsIHZhbHVl
LmdldE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxn
b3JpdGhtSG1hY1BhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9u
YXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gZ2V0SGFz
aEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQpAQCAtMjEwLDEzICsyMTIsMTMg
QEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlv
bmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0byBy
ZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMpOwogCi0g
ICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNo
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5
LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAgIEFTU0VSVChz
Y29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJlc3VsdC0+aGFzTGVuZ3RoID0ganNEaWN0
aW9uYXJ5LmdldCgibGVuZ3RoIiwgcmVzdWx0LT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CkBAIC0yMzYs
MTYgKzIzOCwxNiBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAg
ICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBh
cmFtcyk7CiAKICAgICBKU1ZhbHVlIG1vZHVsdXNMZW5ndGhWYWx1ZSA9IGdldFByb3BlcnR5KCZz
dGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCksICJtb2R1bHVzTGVuZ3RoIik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gRklYTUU6IFdoeSBubyBFbmZvcmNlUmFu
Z2U/IEZpbGVkIGFzIDxodHRwczovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dp
P2lkPTIzNzc5Pi4KICAgICByZXN1bHQtPm1vZHVsdXNMZW5ndGggPSBjb252ZXJ0PHVpbnQzMl90
PihzdGF0ZSwgbW9kdWx1c0xlbmd0aFZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVlIHB1YmxpY0V4cG9uZW50
VmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpLCAicHVibGljRXhw
b25lbnQiKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQ
dHI8VWludDhBcnJheT4gcHVibGljRXhwb25lbnRBcnJheSA9IHRvVWludDhBcnJheShwdWJsaWNF
eHBvbmVudFZhbHVlKTsKQEAgLTI3OSwxMyArMjgxLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5KGV4ZWMs
IHZhbHVlLmdldE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5
cHRvQWxnb3JpdGhtUnNhT2FlcFBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0o
anNEaWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7
Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNz
ID0gZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVp
cmVtZW50OjpSZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQog
CiAgICAgSlNWYWx1ZSBsYWJlbFZhbHVlID0gZ2V0UHJvcGVydHkoZXhlYywgdmFsdWUuZ2V0T2Jq
ZWN0KCksICJsYWJlbCIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJlc3VsdC0+aGFzTGFiZWwgPSAhbGFiZWxWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwpA
QCAtMjkzLDEwICsyOTUsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPgogICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogCiAgICAgQ3J5cHRvT3BlcmF0
aW9uRGF0YSBsYWJlbERhdGE7Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoZXhlYywgbGFiZWxWYWx1ZSwgbGFiZWxEYXRhKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpT
VmFsdWUoZXhlYywgbGFiZWxWYWx1ZSwgbGFiZWxEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9CiAKICAgICByZXN1bHQtPmxhYmVsLmFwcGVuZChsYWJlbERhdGEuZmly
c3QsIGxhYmVsRGF0YS5zZWNvbmQpOwogCkBAIC0zMTYsMTAgKzMxOCwxMCBAQCBzdGF0aWMgUmVm
UHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlv
bmFyeSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0
UmVmKCpuZXcgQ3J5cHRvQWxnb3JpdGhtUnNhU3NhUGFyYW1zKTsKIAotICAgIGlmICghZ2V0SGFz
aEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpS
ZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNo
LCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9u
KCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0suY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIHN0YXRpYyBib29sIGdldEpTQXJyYXlGcm9tSlNPTihFeGVjU3RhdGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUo
ZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCFpc0pTQXJyYXkodmFsdWUp
KSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmc6OmZvcm1hdCgi
RXhwZWN0ZWQgYW4gYXJyYXkgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtODUsMTAgKzg1LDEwIEBAIHN0YXRpYyBib29sIGdldFN0cmluZ0Zy
b21KU09OKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAg
ICBpZiAoIWpzVmFsdWUuZ2V0U3RyaW5nKGV4ZWMsIHJlc3VsdCkpIHsKICAgICAgICAgLy8gQ2Fu
IGdldCBhbiBvdXQgb2YgbWVtb3J5IGV4Y2VwdGlvbi4KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEgc3RyaW5nIHZhbHVlIGZvciBcIiVzXCIgSlNP
TiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwOSw3ICsxMDksNyBA
QCBzdGF0aWMgYm9vbCBnZXRCb29sZWFuRnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgaWRl
bnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCFqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmc6OmZvcm1hdCgiRXhwZWN0
ZWQgYSBib29sZWFuIHZhbHVlIGZvciBcIiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBKU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0s6OkpTQ3J5cHRvS2V5CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgSlNWYWx1ZSBqc29uVmFsdWUgPSBKU09OUGFyc2UoZXhlYywganNvblN0cmlu
Zyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghanNvblZhbHVlIHx8
ICFqc29uVmFsdWUuaXNPYmplY3QoKSkgewpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgSlNDcnlw
dG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IGtleU9wcy0+Z2V0SW5kZXgobV9leGVjLCBpKTsKICAgICAgICAgICAgIFN0cmluZyBvcGVy
YXRpb247CiAgICAgICAgICAgICBpZiAoIWpzVmFsdWUuZ2V0U3RyaW5nKG1fZXhlYywgb3BlcmF0
aW9uKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkpXSyBrZXlfb3Bz
IGF0dHJpYnV0ZSBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkIikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgU3RyaW5nIGp3a1VzZVN0cmluZzsKQEAgLTM5MSw3ICszOTEsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAKICAgICBTdHJpbmcga2V5
QmFzZTY0VVJMOwogICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0
KCksICJrIiwga2V5QmFzZTY0VVJMKSkgewotICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNlY3JldCBrZXkgZGF0YSBp
cyBub3QgcHJlc2VudCBpcyBKV0siKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTQyMCw3ICs0MjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlw
dG9LCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHByaXZhdGVFeHBvbmVudDsKIAogICAgIGlmICghZ2V0
QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAibiIsIG1vZHVs
dXMpKSB7Ci0gICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVxdWlyZWQgSldLIFwiblwiIG1lbWJlciBpcyBtaXNzaW5n
IikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00MzEsMTMgKzQzMSwxMyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAgICAgfQogCiAgICAg
aWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJl
IiwgZXhwb25lbnQpKSB7Ci0gICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVxdWlyZWQgSldLIFwiZVwiIG1lbWJlciBp
cyBtaXNzaW5nIikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAo
IWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImQiLCBt
b2R1bHVzKSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHVibGljKG1vZHVs
dXMsIGV4cG9uZW50KTsKICAgICB9CkBAIC00NDYsMzggKzQ0NiwzOCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVu
dHM6OlByaW1lSW5mbyBzZWNvbmRQcmltZUluZm87CiAgICAgVmVjdG9yPENyeXB0b0tleURhdGFS
U0FDb21wb25lbnRzOjpQcmltZUluZm8+IG90aGVyUHJpbWVJbmZvczsKICAgICBpZiAoIWdldEJp
Z0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInAiLCBmaXJzdFBy
aW1lSW5mby5wcmltZUZhY3RvcikpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0
ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAg
ICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCks
ICJkcCIsIGZpcnN0UHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewotICAgICAgICBpZiAo
bV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRh
UlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4
cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTiht
X2V4ZWMsIG1fanNvbi5nZXQoKSwgInEiLCBzZWNvbmRQcmltZUluZm8ucHJpbWVGYWN0b3IpKSB7
Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9u
ZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZl
Y3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHEiLCBzZWNvbmRQcmltZUluZm8u
ZmFjdG9yQ1JURXhwb25lbnQpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQ
cml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAg
IGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
cWkiLCBzZWNvbmRQcmltZUluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKSB7Ci0gICAgICAgIGlm
IChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURh
dGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRl
RXhwb25lbnQpOwogICAgIH0KIAogICAgIEpTQXJyYXkqIG90aGVyUHJpbWVJbmZvSlNBcnJheTsK
ICAgICBpZiAoIWdldEpTQXJyYXlGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm90aCIs
IG90aGVyUHJpbWVJbmZvSlNBcnJheSkpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNy
ZWF0ZVByaXZhdGVXaXRoQWRkaXRpb25hbERhdGEobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVF
eHBvbmVudCwgZmlyc3RQcmltZUluZm8sIHNlY29uZFByaW1lSW5mbywgb3RoZXJQcmltZUluZm9z
KTsKICAgICB9CkBAIC00ODUsMjQgKzQ4NSwyNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5
RGF0YT4gSlNDcnlwdG9LCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlclByaW1lSW5m
b0pTQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQ3J5cHRvS2V5RGF0YVJTQUNvbXBv
bmVudHM6OlByaW1lSW5mbyBpbmZvOwogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBvdGhlclBy
aW1lSW5mb0pTQXJyYXktPmdldEluZGV4KG1fZXhlYywgaSk7Ci0gICAgICAgIGlmIChtX2V4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmICghZWxlbWVudC5pc09i
amVjdCgpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkpXSyBcIm90aFwiIGFycmF5IG1lbWJlciBpcyBub3QgYW4gb2JqZWN0IikpOwog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFnZXRC
aWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09iamVjdChlbGVtZW50KSwgInIiLCBp
bmZvLnByaW1lRmFjdG9yKSkgewotICAgICAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBnZXQg
cHJpbWUgZmFjdG9yIGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50
ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJkIiwgaW5mby5m
YWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0
IGZhY3RvciBDUlQgZXhwb25lbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5Iikp
OwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFn
ZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09iamVjdChlbGVtZW50KSwgInQi
LCBpbmZvLmZhY3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICAgICAgaWYgKCFtX2V4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IkNhbm5vdCBnZXQgZmFjdG9yIENSVCBjb2VmZmljaWVudCBmb3IgYSBwcmltZSBpbiBcIm90aFwi
IGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfQpA
QCAtNTE5LDcgKzUxOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0
b0sKIAogICAgIFN0cmluZyBqd2tLZXlUeXBlOwogICAgIGlmICghZ2V0U3RyaW5nRnJvbUpTT04o
bV9leGVjLCBtX2pzb24uZ2V0KCksICJrdHkiLCBqd2tLZXlUeXBlKSkgewotICAgICAgICBpZiAo
IW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlJlcXVpcmVkIEpXSyBcImt0eVwiIG1lbWJlciBpcyBtaXNzaW5nIikpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC01NDksNiArNTQ5LDkgQEAgc3RhdGljIHZvaWQgYnVpbGRK
U09ORm9yT2N0ZXRTZXF1ZW5jZShFeAogCiBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21w
b25lbnRzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50cyYgZGF0YSwgSlNDOjpKU09iamVjdCogcmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
YWRkVG9KU09OKGV4ZWMsIHJlc3VsdCwgImt0eSIsICJSU0EiKTsKICAgICBhZGRUb0pTT04oZXhl
YywgcmVzdWx0LCAibiIsIGJhc2U2NFVSTEVuY29kZShkYXRhLm1vZHVsdXMoKSkpOwogICAgIGFk
ZFRvSlNPTihleGVjLCByZXN1bHQsICJlIiwgYmFzZTY0VVJMRW5jb2RlKGRhdGEuZXhwb25lbnQo
KSkpOwpAQCAtNTcwLDkgKzU3Myw4IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZvclJTQUNvbXBv
bmVudHMoSlMKICAgICBpZiAoZGF0YS5vdGhlclByaW1lSW5mb3MoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNBcnJheSogb3Ro
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIGRhdGEub3RoZXJQcmltZUluZm9zKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGRhdGEub3RoZXJQcmlt
ZUluZm9zKCkuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBqc1By
aW1lSW5mbyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpAQCAtNjk4LDggKzcwMCw5IEBA
IHN0YXRpYyB2b2lkIGFkZEpXS0FsZ29yaXRobVRvSlNPTihFeGVjU3QKIHN0YXRpYyB2b2lkIGFk
ZFVzYWdlc1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBqc29uLCBDcnlwdG9LZXlV
c2FnZSB1c2FnZXMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSoga2V5T3BzID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDApOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgaW5kZXggPSAw
OwpAQCAtNzM4LDEzICs3NDEsMTMgQEAgU3RyaW5nIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpX
Szo6c2VyaQogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVj
KTsKIAogICAgIGFkZEpXS0FsZ29yaXRobVRvSlNPTihleGVjLCByZXN1bHQsIGtleSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGFkZEJvb2xUb0pTT04oZXhl
YywgcmVzdWx0LCAiZXh0Iiwga2V5LmV4dHJhY3RhYmxlKCkpOwogCiAgICAgYWRkVXNhZ2VzVG9K
U09OKGV4ZWMsIHJlc3VsdCwga2V5LnVzYWdlc0JpdG1hcCgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgaWYgKGlzPENyeXB0b0tleURhdGFPY3RldFNlcXVl
bmNlPigqa2V5RGF0YSkpCkBAIC03NTUsNyArNzU4LDcgQEAgU3RyaW5nIEpTQ3J5cHRvS2V5U2Vy
aWFsaXphdGlvbkpXSzo6c2VyaQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJLZXkgZG9lc24ndCBzdXBwb3J0IGV4cG9ydEtleSIpKTsKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCiAgICAgcmV0dXJuIEpTT05TdHJpbmdpZnkoZXhlYywgcmVzdWx0LCAwKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50
SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NiArNjgsNyBAQCBSZWZQdHI8RWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlCiAKICAg
ICBWTSYgdm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
ICghbV9jb25zdHJ1Y3RvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03OSwxMSArODAs
MTIgQEAgUmVmUHRyPEVsZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgYXV0
byYgc3RhdGUgPSAqY29udGV4dC0+ZXhlY1N0YXRlKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVs
ZW1lbnQgPSBjb25zdHJ1Y3RDdXN0b21FbGVtZW50U3luY2hyb25vdXNseShkb3duY2FzdDxEb2N1
bWVudD4oKmNvbnRleHQpLCB2bSwgc3RhdGUsIG1fY29uc3RydWN0b3IuZ2V0KCksIGxvY2FsTmFt
ZSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgZWxlbWVu
dCk7CiAgICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IHZtLmV4
Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgaWYgKHNob3Vs
ZENsZWFyRXhjZXB0aW9uID09IFNob3VsZENsZWFyRXhjZXB0aW9uOjpDbGVhcikgewotICAgICAg
ICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGF1dG8gY2F0Y2hTY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgICAgICAgICAgYXV0byogZXhjZXB0aW9u
ID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlv
bik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTAsNyArMTEyLDcg
QEAgc3RhdGljIFJlZlB0cjxFbGVtZW50PiBjb25zdHJ1Y3RDdXN0b21FbAogICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omlu
c3RydW1lbnRGdW5jdGlvbkNvbnN0cnVjdCgmZG9jdW1lbnQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0
cnVjdERhdGEpOwogICAgIEpTVmFsdWUgbmV3RWxlbWVudCA9IGNvbnN0cnVjdCgmc3RhdGUsIGNv
bnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsICZkb2N1bWVudCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQVNTRVJUKCFuZXdFbGVtZW50
LmlzRW1wdHkoKSk7CkBAIC0xNjYsNyArMTY4LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRl
cmZhY2U6OnVwZ3JhZGVFbAogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwogICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNv
bnRleHQsICptX2lzb2xhdGVkV29ybGQpOwogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKQEAgLTE4NSw3ICsxODcsNyBAQCB2b2lkIEpT
Q3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsCiAKICAgICBtX2NvbnN0cnVjdGlvblN0
YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGVsZW1lbnQuc2V0
SXNGYWlsZWRDdXN0b21FbGVtZW50KCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3Rv
bUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGdldEN1c3RvbUVs
ZW1lbnRDYWxsYmFjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgSlNWYWx1ZSBjYWxsYmFjayA9IHByb3RvdHlwZS5nZXQoJnN0YXRlLCBpZCk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChjYWxsYmFjay5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg4LDcgKzg4LDcgQEAgSlNWYWx1
ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgICAgICByZXR1cm4gdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0
YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAgLTEx
OCw3ICsxMTgsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoCiAg
ICAgfQogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJnN0
YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIXByb3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIG11c3QgYmUgYW4gb2Jq
ZWN0IikpOwpAQCAtMTI5LDI1ICsxMjksMjUgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6ZGVmaW5lKAogCiAgICAgaWYgKGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3Vz
dG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJbnRl
cmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXV0byogZGlzY29u
bmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlw
ZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxsYmFj
ayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0RGlzY29ubmVjdGVkQ2FsbGJhY2so
ZGlzY29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIGlmIChhdXRvKiBhZG9wdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVt
ZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNl
dEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFj
ayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKGF0dHJpYnV0
ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICBhdXRvIHZhbHVlID0gY29udmVydE9wdGlvbmFs
PFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgY29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib2JzZXJ2ZWRBdHRyaWJ1dGVzIikpKTsKLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGlm
ICh2YWx1ZSkKICAgICAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldEF0dHJpYnV0ZUNoYW5n
ZWRDYWxsYmFjayhhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2ssICp2YWx1ZSk7CkBAIC0xNzAsNyAr
MTcwLDcgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAogICAgICAg
ICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZz
dGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWVBbmRUaHJvd0lmTmVlZGVk
KHN0YXRlLCBsb2NhbE5hbWUpKQpAQCAtMTkxLDEzICsxOTEsMTUgQEAgc3RhdGljIEpTVmFsdWUg
d2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAogCiBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5Ojp3aGVuRGVmaW5lZChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLnZtKCkpOworCiAgICAgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8mIHByb21pc2VEZWZlcnJlZCA9ICpKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7CiAgICAgSlNWYWx1ZSBwcm9t
aXNlID0gd2hlbkRlZmluZWRQcm9taXNlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHdyYXBwZWQoKSk7
CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZB
bnkoc3RhdGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVycmVkKTsKLSAgICAgICAgQVNTRVJU
KCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLnByb21pc2UoKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDggKzExOSwxMSBAQCBTdHJpbmcgdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDCiAKIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyBz
dHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKIApAQCAtMTg3LDEwICsx
OTAsMTEgQEAgZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUs
IENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMt
PnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhjZXB0
aW9uKj4oZXhjZXB0aW9uVmFsdWUpOwogICAgIGlmICghZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4
Y2VwdGlvbiA9IGV4ZWMtPmxhc3RFeGNlcHRpb24oKTsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0u
bGFzdEV4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWV4Y2VwdGlvbikKICAgICAgICAgICAgIGV4
Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBF
eGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKICAgICB9CkBAIC0yMDAsMTUgKzIwNCwxOCBA
QCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNj
cmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhy
ZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhj
ZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAgIEVycm9ySGFuZGxpbmdT
Y29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9u
KCk7CiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAoSlNE
T01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Nhc3Q8SlNET01XaW5kb3cqPihnbG9iYWxPYmpl
Y3QpKSB7CkBAIC0yMzksOCArMjQ2LDggQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBFeAogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRp
b24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCiAgICAg
ICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3
IGV4Y2VwdGlvbnMuCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4
ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0yNTYsOCArMjYzLDEwIEBAIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKIAogdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4ZWMt
PmV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Cisg
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwog
fQogCkBAIC0zNDEsNyArMzUwLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBFeAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFlYyB8fCBleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoIWVjIHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKSk7CkBAIC0zNTIsNyArMzYxLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqIGV4ZQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFlYy5jb2RlIHx8IGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmICghZWMuY29kZSB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbihleGVjLCBlYy5jb2RlLCBlYy5tZXNzYWdlKSk7CkBAIC0zNjIsMTUgKzM3MSwxNyBA
QCB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlCiAKIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7
CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5n
ZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKQEAgLTUwOSw3ICs1MjAsNyBAQCBzdGF0
aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgCiAgICAgfQogCiAgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKQEAgLTU1Niw3ICs1
NjcsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmCiAgICAgfQog
CiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
QEAgLTY0MiwxMSArNjUzLDE0IEBAIHVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmEKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZwogaW50MzJfdCB0
b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9y
Y2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwogfQpAQCAtNjcyLDI3ICs2
ODYsMzYgQEAgdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLAogLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCiB1aW50MzJfdCB0b1VJ
bnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCiAgICAgICAgIHJldHVybiB2YWx1
ZS5hc1VJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9y
Y2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7CiB9CiAKIGludDY0X3QgdG9JbnQ2NEVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7CiB9CiAKIHVpbnQ2NF90
IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBl
bmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwogfQpAQCAtODU2LDIxICs4
NzksMjEgQEAgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeAogCiB2b2lk
IHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIEFTU0VSVCghc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFN0
cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAmbWVz
c2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdl
KQogewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUs
IElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93U2Vj
dXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIs
IG1lc3NhZ2UpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmgJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTQsNyArNTE0LDcgQEAgaW5saW5l
IEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIEpTQzo6SlNW
YWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYg
KGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTUyMyw3ICs1MjMsNyBAQCBp
bmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6CiAgICAgfQogCiAgICAgbGVu
Z3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTU2Niw4ICs1NjYsMTEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQog
eworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0pKTsKQEAgLTU3Niw4ICs1NzksMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwpAQCAtNjYxLDE0
ICs2NjcsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IEpTQzo6SlNWYWx1ZSBq
c0Zyb3plbkFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7Cisg
ICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikgewogICAgICAgICBsaXN0LmFw
cGVuZChKU1ZhbHVlVHJhaXRzPFQ+OjphcnJheUpTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCBl
bGVtZW50KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29u
c3RydWN0QXJyYXkoZXhlYywgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgcmV0
dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXJyYXkpOwogfQpAQCAtNzA5
LDMyICs3MTgsNDAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE5hdGl2ZVZhbHVlVAog
dGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8U3RyaW5nPiB7CiAgICAgc3RhdGlj
IGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFs
dWUganNWYWx1ZSwgU3RyaW5nJiBpbmRleGVkVmFsdWUpCiAgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvV1RGU3RyaW5nKCZleGVj
KTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4g
IXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2
ZVZhbHVlVHJhaXRzPHVuc2lnbmVkPiB7CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2ZVZh
bHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgdW5zaWduZWQm
IGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlu
ZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4
ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAg
ICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+IHsK
ICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b0Zsb2F0
KCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAgICBy
ZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0
IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRp
dmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGRvdWJs
ZSYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAg
aW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b051bWJlcigmZXhlYyk7Ci0gICAgICAgIHJldHVybiAh
ZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsK
ICAgICB9CiB9OwogCkBAIC03NzEsMTEgKzc4OCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBW
ZWN0b3I8VD4gdG9OYXRpdmVBCiAgICAgfQogCiAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKLSAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFsdWUsIFsmcmVzdWx0XShKU0M6OlZNJiwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgIGZvckVhY2hJbkl0
ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgVCBjb252ZXJ0ZWRWYWx1ZTsKLSAgICAg
ICAgaWYgKCFOYXRpdmVWYWx1ZVRyYWl0czxUPjo6bmF0aXZlVmFsdWUoKnN0YXRlLCBqc1ZhbHVl
LCBjb252ZXJ0ZWRWYWx1ZSkpCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IE5hdGl2ZVZhbHVlVHJh
aXRzPFQ+OjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUsIGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7
CisgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNT
RVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYWtlVGhpc1R5cAogewogICAgIEFTU0VSVChleGVjU3RhdGUpOwogICAgIEFT
U0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKKyAgICBWTSYgdm0gPSBleGVj
U3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
CiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgYXV0byBmdW5jdGlvbk5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdl
dFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBmdW5jdGlvbk5hbWUudXRmOCgpLmRhdGEo
KSkpKTsKIH0KIApAQCAtODcsMTEgKzg5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFrZUdldHRlclQKIHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhl
Y1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRlLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1
dG8gaW50ZXJmYWNlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3Ry
aW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1dG8g
YXR0cmlidXRlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3RyaW5n
KGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpKSkp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVj
dFRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0VGFzay5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDcgKzQ5LDkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFJl
ZjxKU0dsb2JhbE9iamVjdENhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBWTSYgdm0g
PSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAtNjQs
NyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnJ1
blRhc2soZXhlYywgbV90YXNrKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV90YXNrLT5y
dW4oZXhlYyk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJ
KHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgaXRlcmF0b3JGb3JFYWNoKEpTQzoKICAgICAgICAgYXBwZW5kRm9yRWFjaEFyZ3VtZW50
cyhzdGF0ZSwgd3JhcHBlci0+Z2xvYmFsT2JqZWN0KCksIGFyZ3VtZW50cywgdmFsdWUpOwogICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKHdyYXBwZXIpOwogICAgICAgICBKU0M6OmNhbGwoJnN0YXRl
LCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7Ci0g
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkocmV2aXNpb24gMjA1NDg1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAwLDExICsxMDAsMTQgQEAgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVjdChF
eGNlcHRpb25DbwogCiB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU1Byb21p
c2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQogewotICAgIGlmICghc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBKU1ZhbHVlIGVycm9yID0gc3RhdGUuZXhjZXB0aW9uKCktPnZhbHVl
KCk7Ci0gICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIGVycm9yID0gc2Nv
cGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgJnByb21p
c2VEZWZlcnJlZCktPnJlamVjdChlcnJvcik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwxMiAr
MTU4LDE1IEBAIHZvaWQgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShKU0MKIAogaW5s
aW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTUHJvbWlzZURlZmVycmVkKikpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIEpTQzo6SlNQcm9taXNlRGVm
ZXJyZWQmIHByb21pc2VEZWZlcnJlZCA9ICpKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0KTsKICAgICBwcm9taXNlRnVuY3Rpb24oJnN0YXRlLCAmcHJv
bWlzZURlZmVycmVkKTsKIAogICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQucHJvbWlzZSgpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDExICs3NSwxNCBAQCBi
b29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kCiAKIGJvb2wgSlNET01TdHJp
bmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsMTMgKzE5NywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsKCkKICAgICB7CiAg
ICAgICAgIFJlZjxKU0RPTVdpbmRvd01pY3JvdGFza0NhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0
aGlzKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QtPnZtKCkpOwor
ICAgICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKIAogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnJ1blRhc2soZXhlYywgbV90
YXNrKTsKIAotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksOSBA
QCBib29sIEpTRE9NV2luZG93OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09iCiAKIHZvaWQgSlNET01X
aW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgLy8gVG8gYXZv
aWQgYnJlYWtpbmcgb2xkIHdpZGdldHMsIG1ha2UgInZhciBsb2NhdGlvbiA9IiBpbiBhIHRvcC1s
ZXZlbCBmcmFtZSBjcmVhdGUKICAgICAvLyBhIHByb3BlcnR5IG5hbWVkICJsb2NhdGlvbiIgaW5z
dGVhZCBvZiBwZXJmb3JtaW5nIGEgbmF2aWdhdGlvbiAoPHJkYXI6Ly9wcm9ibGVtLzU2ODgwMzk+
KS4KQEAgLTM4Miw3ICszODUsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVj
U3RhdGUmCiAjZW5kaWYKIAogICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChMb2NhdGlvbiogbG9jYXRpb24gPSB3cmFwcGVkKCkubG9jYXRpb24oKSkKQEAg
LTQwNiwxNSArNDA5LDE4IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0ZSYg
c3QKIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUgdGFyZ2V0VmFsdWUg
PSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0ID0gdGFyZ2V0VmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSA/IEF0b21pY1N0cmluZygiX2JsYW5rIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiB0YXJnZXRWYWx1ZS50b1N0cmluZygmc3RhdGUp
LT50b0F0b21pY1N0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxE
T01XaW5kb3c+IG9wZW5lZFdpbmRvdyA9IHdyYXBwZWQoKS5vcGVuKHVybFN0cmluZywgdGFyZ2V0
LCB3aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0RE9N
V2luZG93KCZzdGF0ZSkpOwpAQCAtNDcwLDEwICs0NzYsMTAgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAg
ICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
aygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIp
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWFs
b2dIYW5kbGVyIGhhbmRsZXIoc3RhdGUpOwpAQCAtNTExLDE2ICs1MTcsMTYgQEAgc3RhdGljIEpT
VmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZAogICAgICAgICB9CiAgICAgICAgIGZpbGxN
ZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0cmFuc2ZlcmFibGVzQXJnSW5k
ZXgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycyk7CiAgICAgfQotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCks
ICZtZXNzYWdlUG9ydHMsICZhcnJheUJ1ZmZlcnMpOwogCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVlVG9V
U1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRleCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTQ1LDcg
KzU1MSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXQKIAogICAg
IENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gd3JhcHBlZCgp
LmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5
KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlv
biA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxk
KCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rpb24pCkBAIC01NzAsNyArNTc2LDcgQEAgSlNW
YWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YQogCiAgICAgQ29udGVudFNlY3Vy
aXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQoKSA/
IHdyYXBwZWQoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IG51bGxwdHI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVk
QWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgY29udGVudFNl
Y3VyaXR5UG9saWN5KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5jcHAJ
KHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCwxMSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoJmV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmZXhlYykpOwog
CiAgICAgZG91YmxlIHN0YXJ0VGltZShleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVy
KCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZW5kVGltZShleGVjLnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLnRvTnVtYmVyKCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwpAQCAtODcsNyArODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTCiAgICAgaWYgKHZhbHVlQXJndW1lbnQuaXNDZWxsKCkgJiYgdmFsdWVBcmd1bWVu
dC5hc0NlbGwoKS0+aW5oZXJpdHMoc3RkOjpyZW1vdmVfcG9pbnRlcjxKU0FycmF5QnVmZmVyKj46
OnR5cGU6OmluZm8oKSkpIHsKIAogICAgICAgICBBcnJheUJ1ZmZlciogZGF0YSA9IHRvQXJyYXlC
dWZmZXIodmFsdWVBcmd1bWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAg
aWYgKFVOTElLRUxZKCFkYXRhKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywzMiArNDcsMzUgQEAgc3RhdGljIFJlZlB0
cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYQogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8g
R2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0Lgog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VS
VCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwogCiAgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWCA9ICF4VmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KTsKICAgICBkb3VibGUgeCA9IHhWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInkiKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVkgPSAheVZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHkgPSB5VmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1Zh
bHVlIHpWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJ6IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBi
b29sIGNhblByb3ZpZGVaID0gIXpWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJs
ZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKCFjYW5Qcm92aWRlWCAmJiAhY2FuUHJvdmlkZVkgJiYgIWNh
blByb3ZpZGVaKQpAQCAtODYsMzIgKzg5LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9u
RGF0YTo6Um90YXRpb24KICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92
ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCog
b2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFs
dWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJhbHBoYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgYm9vbCBjYW5Qcm92aWRlQWxwaGEgPSAhYWxwaGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpOwogICAgIGRvdWJsZSBhbHBoYSA9IGFscGhhVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVlIGJldGFWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJi
ZXRhIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNh
blByb3ZpZGVCZXRhID0gIWJldGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRvdWJs
ZSBiZXRhID0gYmV0YVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBnYW1tYVZhbHVlID0gb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImdhbW1hIikpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVHYW1tYSA9
ICFnYW1tYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIGdhbW1hID0gZ2Ft
bWFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGlmICghY2FuUHJvdmlkZUFscGhhICYmICFjYW5Qcm92aWRlQmV0YSAmJiAh
Y2FuUHJvdmlkZUdhbW1hKQpAQCAtMTcyLDYgKzE3OCw5IEBAIEpTVmFsdWUgSlNEZXZpY2VNb3Rp
b25FdmVudDo6aW50ZXJ2YWwoRXgKIAogSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojppbml0
RGV2aWNlTW90aW9uRXZlbnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IGNvbnN0IFN0cmluZyB0eXBlID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKTsKICAgICBib29sIGJ1YmJsZXMgPSBzdGF0ZS5hcmd1bWVudCgxKS50b0Jv
b2xlYW4oJnN0YXRlKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBzdGF0ZS5hcmd1bWVudCgyKS50
b0Jvb2xlYW4oJnN0YXRlKTsKQEAgLTE3OSwxNSArMTg4LDE1IEBAIEpTVmFsdWUgSlNEZXZpY2VN
b3Rpb25FdmVudDo6aW5pdERldmljZU0KICAgICAvLyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMg
YXJlIG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgogICAgIC8v
IE90aGVyd2lzZSwgdXNlIHRoZSBzdGFuZGFyZCBKYXZhU2NyaXB0IGNvbnZlcnNpb24uCiAgICAg
UmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0gcmVh
ZEFjY2VsZXJhdGlvbkFyZ3VtZW50KHN0YXRlLmFyZ3VtZW50KDMpLCBzdGF0ZSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPERldmljZU1v
dGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9IHJl
YWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVudCg0KSwgc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VN
b3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IHJlYWRSb3RhdGlvblJhdGVB
cmd1bWVudChzdGF0ZS5hcmd1bWVudCg1KSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGJvb2wgaW50ZXJ2YWxQcm92aWRlZCA9ICFzdGF0
ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9yTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw2ICs3OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNEaWN0aW9uYXJ5OjpHZXRQ
cm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5KGNvbnN0IGNoYXIqIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSYgZmluYWxSZXN1bHQpIGNvbnN0CiB7CisgICAgVk0mIHZtID0g
bV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBib29sIHByb3Bl
cnR5Rm91bmQgPSBtX2luaXRpYWxpemVyT2JqZWN0LmdldCgpLT5nZXRQcm9wZXJ0eVNsb3QobV9l
eGVjLCBpZGVudGlmaWVyLCBbJl0gKGJvb2wgcHJvcGVydHlGb3VuZCwgUHJvcGVydHlTbG90JiBz
bG90KSAtPiBib29sIHsKQEAgLTg2LDcgKzg4LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0
eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBmaW5hbFJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUobV9l
eGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgaWYg
KG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblRocm93bjsKICAgICByZXR1cm4gcHJvcGVy
dHlGb3VuZCA/IFByb3BlcnR5Rm91bmQgOiBOb1Byb3BlcnR5Rm91bmQ7CiB9CkBAIC0xNTEsMTcg
KzE1MywyMCBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lk
IEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9K
U1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRl
bVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQpAQCAtMjIxLDYgKzIy
Niw5IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIHZvaWQgSlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBI
YXNoU2V0PEF0b21pY1N0cmluZz4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICByZXN1bHQuY2xlYXIoKTsKIAogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQpAQCAtMjI4LDEyICsyMzYsMTIgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZl
cnRWYWx1ZShFeGVjU3RhdAogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5n
dGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJl
c3VsdC5hZGQoaXRlbVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQpA
QCAtMjk3LDE3ICszMDUsMjAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShKU0M6
OkV4ZQogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiYgcmVzdWx0KQogewogICAg
IEFTU0VSVChleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoKmV4ZWMsIHZhbHVlLCBsZW5ndGgpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsg
aSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvIHN0cmVhbSA9IEpTTWVkaWFTdHJlYW06OnRvV3JhcHBlZChpdGVtVmFsdWUp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJldmlz
aW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDkgQEAgaW5saW5lIGJvb2wgSlNEaWN0aW9u
YXJ5OjpnZXQoY29uc3QgY2hhcgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJlc3Vs
dD4KIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlHZXRQ
cm9wZXJ0eUFuZFJlc3VsdChjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFQqIGNvbnRleHQsIHZv
aWQgKCpzZXR0ZXIpKFQqIGNvbnRleHQsIGNvbnN0IFJlc3VsdCYpKSBjb25zdAogeworICAgIEpT
Qzo6Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZTsKICAgICBHZXRQcm9wZXJ0eVJl
c3VsdCBnZXRQcm9wZXJ0eVJlc3VsdCA9IHRyeUdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFs
dWUpOwogICAgIHN3aXRjaCAoZ2V0UHJvcGVydHlSZXN1bHQpIHsKQEAgLTIxMiw3ICsyMTUsNyBA
QCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvCiAgICAgICAgIFJlc3Vs
dCByZXN1bHQ7CiAgICAgICAgIGNvbnZlcnRWYWx1ZShtX2V4ZWMsIHZhbHVlLCByZXN1bHQpOwog
Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblRocm93
bjsKIAogICAgICAgICBzZXR0ZXIoY29udGV4dCwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0
ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUzLDE2ICsxNTMsMTYgQEAgSlNWYWx1ZSBKU0RvY3VtZW50Ojpn
ZXRDU1NDYW52YXNDb250ZXh0KAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENvdW50
KCkgPCA0KSkKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIGF1dG8gY29udGV4dElk
ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8g
bmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBh
dXRvIHdpZHRoID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PGludDMyX3Q+
KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IGF1dG8qIGNvbnRleHQgPSB3cmFwcGVkKCkuZ2V0Q1NTQ2FudmFzQ29udGV4dChXVEZNb3ZlKGNv
bnRleHRJZCksIFdURk1vdmUobmFtZSksIFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMiBAQCB2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRFeGVjdXRp
b25Db250ZXh0IHx8IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3JiaWRk
ZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+dm0oKSk7CisgICAgVk0mIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIC8vIFNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3
Zy5vcmcvI2Rpc3BhdGNoaW5nLWV2ZW50cyBzcGVjIG9uIGNhbGxpbmcgaGFuZGxlRXZlbnQuCisg
ICAgLy8gIklmIHRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgcmVwb3J0IHRoZSBleGNlcHRpb24u
IiBJdCBzaG91bGQgbm90IHByb3BhZ2F0ZSB0aGUKKyAgICAvLyBleGNlcHRpb24uCiAKICAgICBK
U09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpAQCAtMTA5LDYgKzExNCwxNCBAQCB2b2lkIEpT
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgLy8gSWYganNGdW5jdGlvbiBp
cyBub3QgYWN0dWFsbHkgYSBmdW5jdGlvbiwgc2VlIGlmIGl0IGltcGxlbWVudHMgdGhlIEV2ZW50
TGlzdGVuZXIgaW50ZXJmYWNlIGFuZCB1c2UgdGhhdAogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxs
VHlwZTo6Tm9uZSkgewogICAgICAgICBoYW5kbGVFdmVudEZ1bmN0aW9uID0ganNGdW5jdGlvbi0+
Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImhhbmRsZUV2ZW50IikpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBF
eGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgICAgICAgICAgZXZlbnQtPnRhcmdldCgpLT51bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICByZXBvcnRFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
ICAgICBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxEYXRh
KTsKICAgICB9CiAKQEAgLTEyMSw3ICsxMzQsNiBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFu
ZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgIEV2ZW50KiBzYXZlZEV2ZW50ID0gZ2xvYmFsT2JqZWN0
LT5jdXJyZW50RXZlbnQoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZlbnQo
ZXZlbnQpOwogCi0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAg
Vk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHZtLmVudHJ5U2NvcGUgPyB2bS5lbnRyeVNjb3Bl
LT5nbG9iYWxPYmplY3QoKSA6IGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5zdHJ1
bWVudEZ1bmN0aW9uQ2FsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2FsbERh
dGEpOwpAQCAtMTM4LDcgKzE1MCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChTY3JpcHQKIAogICAgICAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KSkgewogICAgICAgICAgICAgYXV0byBzY3JpcHRDb250cm9sbGVyID0gZG93
bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zY3JpcHQo
KTsKLSAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVjLT5o
YWRFeGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhlYy0+ZXhj
ZXB0aW9uKCkpKTsKKyAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9
IChzY29wZS5leGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oc2Nv
cGUuZXhjZXB0aW9uKCkpKTsKICAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0
aW9uIHx8IHNjcmlwdENvbnRyb2xsZXItPmlzVGVybWluYXRpbmdFeGVjdXRpb24oKSkKICAgICAg
ICAgICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0b20uY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIHVuc2lnbmVkIGJsb2JQYXJ0c0xlbmd0aCA9
IDA7CiAgICAgSlNPYmplY3QqIGJsb2JQYXJ0cyA9IHRvSlNTZXF1ZW5jZShleGVjLCBhcmcsIGJs
b2JQYXJ0c0xlbmd0aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoYmxvYlBhcnRzKTsKIApAQCAtNjksNyArNjks
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAxLCAiZmlsZW5hbWUiLCAi
RmlsZSIsIG51bGxwdHIsICJET01TdHJpbmciKTsKIAogICAgIFN0cmluZyBmaWxlbmFtZSA9IGFy
Zy50b1dURlN0cmluZygmZXhlYykucmVwbGFjZSgnLycsICc6Jyk7Ci0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZyBu
b3JtYWxpemVkVHlwZTsKQEAgLTg3LDcgKzg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgdHlwZSBwcm9w
ZXJ0eS4KICAgICAgICAgU3RyaW5nIHR5cGU7CiAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0eXBl
IiwgdHlwZSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBub3JtYWxpemVkVHlwZSA9IEJsb2I6
Om5vcm1hbGl6ZWRDb250ZW50VHlwZSh0eXBlKTsKQEAgLTk1LDcgKzk1LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAvLyBPbmx5IHRyeSB0byBw
YXJzZSB0aGUgbGFzdE1vZGlmaWVkIGRhdGUgaWYgdGhlcmUgd2FzIG5vdCBhbiBpbnZhbGlkIHR5
cGUgYXJndW1lbnQuCiAgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCAgIW5vcm1hbGl6ZWRU
eXBlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGljdGlvbmFyeS5nZXQoImxhc3RNb2RpZmll
ZCIsIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnN0cnVjdEpTCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvYlBhcnRzTGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYmxvYlBhcnRzLT5nZXQoJmV4ZWMsIGkp
OwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9
IHRvQXJyYXlCdWZmZXIoaXRlbSkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5k
KGJsb2IpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBpdGVt
LnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgYmxvYkJ1aWxkZXIuYXBwZW5kKHN0cmluZywgQVNDSUlMaXRlcmFsKCJ0cmFuc3BhcmVudCIp
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2Nh
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MSw2ICs3MSw5IEBAIHN0YXRpYyB2b2lkIHNldE1heGltdW1BZ2UoUG9zaXRpb25PcHRpb24K
IAogc3RhdGljIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBD
cmVhdGUgZGVmYXVsdCBvcHRpb25zLgogICAgIGF1dG8gb3B0aW9ucyA9IFBvc2l0aW9uT3B0aW9u
czo6Y3JlYXRlKCk7CiAKQEAgLTgyLDcgKzg1LDcgQEAgc3RhdGljIFJlZlB0cjxQb3NpdGlvbk9w
dGlvbnM+IGNyZWF0ZVBvcwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2ls
bCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50
b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ3JlYXRl
IHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgb2JqZWN0LgogICAg
IEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIG9iamVjdCk7CkBAIC05OSwxOSArMTAyLDIy
IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MKIAogSlNWYWx1ZSBK
U0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlvbmFs
KVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCiAgICAg
YXV0byBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3Np
dGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VSVChw
b3NpdGlvbkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25FcnJvckNhbGxiYWNrID0gY3Jl
YXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZpbmVk
IHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIGF1dG8gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25PcHRp
b25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKIApAQCAtMTIx
LDE5ICsxMjcsMjIgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpbwog
CiBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9w
dGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwog
CiAgICAgYXV0byBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8
SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFT
U0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25FcnJvckNhbGxiYWNr
ID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5k
ZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRp
b25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxs
Q29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw2ICs1Myw5IEBAIHN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRlJiBz
dGEKIC8vIEhUTUxBbGxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1cHBv
cnQgYm90aCBnZXQgYW5kIGNhbGwuCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY1LDcgKzY4LDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGluZGV4
PikgZXRjLgogICAgICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoT3B0aW9u
YWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqc3RyaW5nLmltcGwoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5nbG9i
YWxPYmplY3QoKSwgY29sbGVjdGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKSk7CkBAIC03Niw3ICs3
OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8v
IFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3YW50
CiAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJ
bmRleCgqZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYykuaW1wbCgpKSkgewogICAg
ICAgICBpZiAoYXV0byogaXRlbSA9IGNvbGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0cmlu
ZywgaW5kZXgudmFsdWUoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgRU5BQkxFKFdFQkdMKQogc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmlidXRl
cyhFeGVjU3RhdGUmIHN0YXRlLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+JiBhdHRy
cykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1ZSA9IHN0YXRl
LmFyZ3VtZW50KDEpOwogICAgIGlmIChpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmpl
Y3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeSgmc3RhdGUsIGluaXRpYWxpemVy
T2JqZWN0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBncmFwaGlj
c0F0dHJzOwpAQCAtODMsNyArODYsNyBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQoCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudDo6
aXMzZFR5cGUoY29udGV4dElkKSkgewogICAgICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVzKHN0
YXRlLCBhdHRycyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KICNlbmRpZgpAQCAtMTEwLDE0ICsxMTMsMTQgQEAgSlNWYWx1ZSBK
U0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cAogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQm
IGNhbnZhcyA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIFJlZlB0cjxDYW52YXNDb250
ZXh0QXR0cmlidXRlcz4gYXR0cnM7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChIVE1MQ2Fu
dmFzRWxlbWVudDo6aXMzZFR5cGUoY29udGV4dElkKSkgewogICAgICAgICBnZXQzRENvbnRleHRB
dHRyaWJ1dGVzKHN0YXRlLCBhdHRycyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UtPmlzVXBn
cmFkaW5nRWxlbWVudCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IGdl
dERPTVN0cnVjdHVyZTxKU0hUTUxFbGVtZW50Pih2bSwgKmdsb2JhbE9iamVjdCk7CiAgICAgICAg
IGF1dG8qIG5ld0VsZW1lbnRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZSgmZXhlYywgbmV3VGFyZ2V0VmFsdWUsIGJhc2VTdHJ1Y3R1cmUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIFJlZjxIVE1MRWxlbWVudD4gZWxlbWVudCA9
IEhUTUxFbGVtZW50OjpjcmVhdGUoZWxlbWVudEludGVyZmFjZS0+bmFtZSgpLCBkb2N1bWVudCk7
CkBAIC05OCwxMiArOTgsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RKUwogICAgIEFTU0VSVChlbGVtZW50V3JhcHBlclZhbHVlLmlzT2JqZWN0KCkpOwogCiAgICAg
SlNWYWx1ZSBuZXdQcm90b3R5cGUgPSBuZXdUYXJnZXQtPmdldCgmZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+cHJvdG90eXBlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNPYmplY3QqIGVsZW1lbnRXcmFwcGVyT2JqZWN0
ID0gYXNPYmplY3QoZWxlbWVudFdyYXBwZXJWYWx1ZSk7CiAgICAgSlNPYmplY3Q6OnNldFByb3Rv
dHlwZShlbGVtZW50V3JhcHBlck9iamVjdCwgJmV4ZWMsIG5ld1Byb3RvdHlwZSwgdHJ1ZSAvKiBz
aG91bGRUaHJvd0lmQ2FudFNldCAqLyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGVsZW1lbnRJbnRlcmZhY2UtPmRpZFVw
Z3JhZGVMYXN0RWxlbWVudEluQ29uc3RydWN0aW9uU3RhY2soKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsMTggKzYzLDE4IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3Rh
dGUoRXhlY1N0YXRlJiAKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBo
aXN0b3J5U3RhdGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyBGSVhNRTogdGl0bGUgc2hvdWxkIG5vdCBiZSBudWxs
YWJsZS4KICAgICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyB1cmw7CiAgICAgaWYg
KGFyZ0NvdW50ID4gMikgewogICAgICAgICB1cmwgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKQEAgLTk3LDE4ICs5NywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4
ZWNTdGF0CiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0
YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAg
ICAgU3RyaW5nIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3Vu
dCA+IDIpIHsKICAgICAgICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51
bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgSlNW
YWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAKICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5n
KCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgx
KTsKQEAgLTY2LDE3ICs2NiwxNyBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlCiAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CiAgICAgaWYgKCFvcHRpb25z
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBKU1ZhbHVlIGtleVBhdGhWYWx1
ZSA9IG9wdGlvbnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgImtleVBhdGgiKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgICAgIGlmICgha2V5UGF0aFZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKICAgICAgICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKHN0YXRl
LCBrZXlQYXRoVmFsdWUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG9JbmNy
ZW1lbnQgPSBvcHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
c3RhdGUsICJhdXRvSW5jcmVtZW50IikpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckZyb250ZW5kSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNs
dWRlIDxydW50aW1lL0pTQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBAQCBKU09iamVjdCogSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6aW5pdGlhbGl6CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTEyLDkgKzExNSw5IEBAIEpTT2JqZWN0KiBK
U0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICAgICAgZXhlYywgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIG1fZnVu
Y3Rpb25OYW1lKSwKICAgICAgICAgbV9zb3VyY2VVUkwsIG1fc291cmNlUG9zaXRpb24sIG92ZXJy
aWRlTGluZU51bWJlcik7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHJlcG9ydEN1cnJlbnRF
eGNlcHRpb24oZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
IApAQCAtMTIzLDE0ICsxMjYsMTMgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6Omlu
aXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAgICBpZiAoIXdyYXBwZXIo
KSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhhcyBhIEphdmFTY3JpcHQg
d3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBjcmVhdGluZy4KLSAgICAg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCBwYXNzIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQotICAg
ICAgICAgICAgc2V0V3JhcHBlcihleGVjLT52bSgpLCBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgKm1fb3JpZ2luYWxOb2RlKSkpOworICAgICAgICAgICAgc2V0V3JhcHBlcih2bSwg
YXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdpbmFsTm9kZSkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21lIGVsZW1lbnQgdG8gdGhl
IHNjb3BlCiAgICAgICAgIC8vIChhbmQgdGhlIGRvY3VtZW50LCBhbmQgdGhlIGZvcm0gLSBzZWUg
SlNIVE1MRWxlbWVudDo6ZXZlbnRIYW5kbGVyU2NvcGUpCi0gICAgICAgIGxpc3RlbmVyQXNGdW5j
dGlvbi0+c2V0U2NvcGUoZXhlYy0+dm0oKSwganNDYXN0PEpTTm9kZSo+KHdyYXBwZXIoKSktPnB1
c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBsaXN0ZW5lckFzRnVuY3Rpb24tPnNjb3BlKCkpKTsK
KyAgICAgICAgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zZXRTY29wZSh2bSwganNDYXN0PEpTTm9kZSo+
KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBsaXN0ZW5lckFzRnVuY3Rp
b24tPnNjb3BlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGpzRnVuY3Rpb247CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUu
aAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMSArMTA3LDE0IEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbGlua0FuZEV2YWx1YXRlTW9kdWxlKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OklkZW50aWZpZXImIG1vZHVsZUtleSwgSlND
OjpKU1ZhbHVlIGluaXRpYXRvciwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+JiByZXR1cm5lZEV4
Y2VwdGlvbikKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIAogICAgICAgICBK
U01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwogICAgICAgICBKU0M6OkpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBtb2R1
bGVLZXksIGluaXRpYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT52bSgpLmV4Y2VwdGlvbigpOwot
ICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZTsKQEAgLTEzMSw4ICsxMzQsMTAgQEAgcHJpdmF0ZToKIAogICAg
IH5KU01haW5UaHJlYWRFeGVjU3RhdGUoKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
X21haW5UaHJlYWRTdGF0ZS0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBB
U1NFUlQoIXNfbWFpblRocmVhZFN0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgYm9vbCBkaWRF
eGl0SmF2YVNjcmlwdCA9IHNfbWFpblRocmVhZFN0YXRlICYmICFtX3ByZXZpb3VzU3RhdGU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCw5IEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0YXRlJiAKIAogc3RhdGlj
IEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KEpTTWVzc2FnZUV2ZW50KiBqc0V2
ZW50LCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBT
dHJpbmcmIHR5cGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1
ZSgmc3RhdGUpOwogICAgIGJvb2wgY2FuQnViYmxlQXJnID0gc3RhdGUuYXJndW1lbnQoMSkudG9C
b29sZWFuKCZzdGF0ZSk7CiAgICAgYm9vbCBjYW5jZWxhYmxlQXJnID0gc3RhdGUuYXJndW1lbnQo
MikudG9Cb29sZWFuKCZzdGF0ZSk7CkBAIC0xMTYsMTYgKzExOSwxNiBAQCBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlCiAgICAgICAgIG1lc3NhZ2VQb3J0cyA9IHN0ZDo6
bWFrZV91bmlxdWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAgICAgYXJyYXlCdWZmZXJzID0g
c3RkOjptYWtlX3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwogICAgICAgICBmaWxsTWVzc2Fn
ZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNyksICptZXNzYWdlUG9ydHMsICphcnJh
eUJ1ZmZlcnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZGF0YUFyZyhzdGF0
ZS52bSgpLCBzdGF0ZS5hcmd1bWVudCgzKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcodm0sIHN0YXRlLmFyZ3VtZW50
KDMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1lc3NhZ2VFdmVudCYgZXZlbnQgPSBqc0V2ZW50LT53
cmFwcGVkKCk7CiAgICAgZXZlbnQuaW5pdE1lc3NhZ2VFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVB
cmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywgbGFzdEV2ZW50SWRBcmcsIHNv
dXJjZUFyZywgV1RGTW92ZShtZXNzYWdlUG9ydHMpKTsKLSAgICBqc0V2ZW50LT5tX2RhdGEuc2V0
KHN0YXRlLnZtKCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsKKyAgICBqc0V2ZW50LT5t
X2RhdGEuc2V0KHZtLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVz
c2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzMsMTIgKzczLDEyIEBAIHZvaWQgZmlsbE1lc3NhZ2VQb3J0QXJyYXkoSlNDOjpFeGVj
U3RhdGUKICAgICAvLyBWYWxpZGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVzLCBwZXIgV2ViSURMIHNw
ZWMgNC4xLjEzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVj
dCA9IHRvSlNTZXF1ZW5jZShzdGF0ZSwgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gVmFsaWRhdGlv
biBvZiBub24tbnVsbCBvYmplY3RzLCBwZXIgSFRNTDUgc3BlYyAxMC4zLjMuCiAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBB
cnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXk7CiAgICAgICAgIGZpbGxNZXNzYWdlUG9y
dEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSwgcG9ydEFycmF5LCBhcnJheUJ1ZmZlckFy
cmF5KTsKICAgICAgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgJnBvcnRBcnJheSwgJmFycmF5
QnVmZmVyQXJyYXkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlND
Ojpqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tD
b250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzOjpzZXREZWMKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29udmVydDx1aW50OF90PihzdGF0
ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgRGVjaXNpb25Qb2ludCBkZWNpc2lvblBvaW50IHsgc3RhdGljX2Nhc3Q8RGVjaXNpb25Q
b2ludD4obmF0aXZlVmFsdWUpIH07CkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyBpbmxpbmUgRGVj
aXNpb24gdG9EZWNpc2lvbihFeGVjU3QKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29udmVydDx1aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IERlY2lzaW9uOjpBbGxvdzsKIAogICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgc3RhdGljX2Nhc3Q8
RGVjaXNpb24+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtMTE5LDggKzExOSwxMSBAQCBKU1ZhbHVlIEpT
TW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6ZGVjCiAKIHZvaWQgSlNNb2NrQ29udGVudEZpbHRl
clNldHRpbmdzOjpzZXREZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgRGVjaXNpb24gZGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRl
LCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgd3JhcHBlZCgp
LnNldERlY2lzaW9uKGRlY2lzaW9uKTsKQEAgLTEzMyw4ICsxMzYsMTEgQEAgSlNWYWx1ZSBKU01v
Y2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnVuYgogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0ZXJT
ZXR0aW5nczo6c2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgRGVjaXNpb24gdW5ibG9ja1JlcXVlc3RE
ZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICB3cmFwcGVkKCkuc2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbih1bmJs
b2NrUmVxdWVzdERlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTEgKzQ5LDEyIEBAIHVpbnQxNl90IEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShO
b2RlKiAKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBl
bmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgbm9kZSkpOwotICAgIGlmIChz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7CiAKICAgICBOYWtl
ZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAgIEpTVmFsdWUgdmFsdWUgPSBt
X2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRhOjpDYWxsYmFja1R5cGU6
OkZ1bmN0aW9uT3JPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoc3RhdGUsICJhY2NlcHRO
b2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
IHx8IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pIHsKICAg
ICAgICAgLy8gUmV0aHJvdyBleGNlcHRpb24uCiAgICAgICAgIHRocm93RXhjZXB0aW9uKHN0YXRl
LCBzY29wZSwgcmV0dXJuZWRFeGNlcHRpb24pOwpAQCAtNjIsNyArNjMsNyBAQCB1aW50MTZfdCBK
U05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgfQogCiAgICAgdWludDE2X3QgcmVz
dWx0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsK
IAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlT3JTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGhyb3dTY29wZS5oPgogCiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0zNSw2ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5n
Pj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwogCiAg
ICAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxOb2RlPiwgU3RyaW5nPj4g
cmVzdWx0OwpAQCAtNDYsNyArNTAsNyBAQCBWZWN0b3I8c3RkOjpleHBlcmltZW50YWw6OnZhcmlh
bnQ8UmVmPE5vCiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKG5vZGUtPndyYXBw
ZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVl
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KHN0cmluZyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
SlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291bnQoKSkgewogICAgICAg
ICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHNxbFN0YXRlbWVudCA9IHN0YXRlLmFy
Z3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gTm93IGFzc2VtYmxlIHRoZSBs
aXN0IG9mIFNRTCBhcmd1bWVudHMKQEAgLTYzLDE1ICs2NiwxNSBAQCBKU1ZhbHVlIEpTU1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgIH0KIAogICAgICAgICBKU1ZhbHVlIGxl
bmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBzdGF0ZS5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAgICAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCkBAIC04MSw3
ICs4NCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGFyZ3VtZW50IHRv
IGEgc3RyaW5nIGFuZCBhcHBlbmQgaXQKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5k
KHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwotICAgICAgICAgICAgICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDg1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIEpTVmFsdWUgSlNTVkdMZW5ndGg6OmNvbnZlcnRU
b1NwZWNpZmllZFUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgdW5zaWduZWQg
c2hvcnQgdW5pdFR5cGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMigmc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNT
dG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwx
NiArNzksMTkgQEAgYm9vbCBKU1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKUwogCiB2
b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RvcmFnZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1N0b3JhZ2UqPihvYmplY3QpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5sZW5ndGgoZWMpOwog
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB0aGlzT2JqZWN0
LT53cmFwcGVkKCkua2V5KGksIGVjKSkpOwogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKQEAgLTk3LDYgKzEwMCw5IEBAIHZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5h
bWVzKEpTT2IKIAogYm9vbCBKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiwgYm9vbCYgcHV0UmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gT25seSBwZXJmb3Jt
IHRoZSBjdXN0b20gcHV0IGlmIHRoZSBvYmplY3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIHByb3Bl
cnR5IGJ5IHRoaXMgbmFtZS4KICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0eSgpIHdvdWxkIGVuZCB1
cCBjYWxsaW5nIGNhbkdldEl0ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29sZWQsIHdlIG5lZWQgdG8g
Y2hlY2sKICAgICAvLyB0aGUgbmF0aXZlIHByb3BlcnR5IHNsb3RzIG1hbnVhbGx5LgpAQCAtMTEw
LDcgKzExNiw3IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
eworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgLy8gVGhl
IHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBwdXREZWxlZ2F0ZSgpIHNob3VsZCBoYW5k
bGUgdGhlIHB1dCBvcGVyYXRpb24gKHdoaWNoCiAgICAgICAgIC8vIGlmIHRydWUsIHRlbGxzIHRo
ZSBjYWxsZXIgbm90IHRvIGV4ZWN1dGUgdGhlIGdlbmVyaWMgcHV0KS4gSXQgZG9lcyBub3QgaW5k
aWNhdGUgd2hldGhlcgogICAgICAgICAvLyBwdXREZWxlZ2F0ZSgpIGRpZCBzdWNjZXNzZnVsbHkg
Y29tcGxldGUgdGhlIG9wZXJhdGlvbiBvciBub3QgKHdoaWNoIGl0IGRpZG4ndCBpbiB0aGlzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1Rl
eHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDExIEBAIHZvaWQg
SlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKIHZvaWQgSlNUZXh0VHJhY2s6OnNl
dExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxF
KE1FRElBX1NPVVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICB3cmFwcGVkKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDExIEBAIHZvaWQgSlNWaWRl
b1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHIKIHZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5k
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICB3
cmFwcGVkKCkuc2V0S2luZChzdHJpbmcpOwogI2Vsc2UKQEAgLTU2LDggKzU5LDExIEBAIHZvaWQg
SlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3QKIHZvaWQgSlNWaWRlb1RyYWNrOjpz
ZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBKU1ZhbHVlIEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0SW5kCiAKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gd3Jh
cHBlZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigm
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2Vi
R0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEluZGV4ZWRQYXJhbWV0ZXIocG5hbWUsIGluZGV4
KTsKICAgICByZXR1cm4gdG9KUygmZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTAgKzE5OSwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBn
ZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IG9iai0+d3JhcHBlZCgpOwogICAg
IHVuc2lnbmVkIHRhcmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvOwogICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewpAQCAtMzM1LDcgKzMzNSw3IEBA
IEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICAKICAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gd3JhcHBlZCgpOwogICAgIGNvbnN0IFN0
cmluZyBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+
dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5h
bWUpOwogICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIGV4dGVuc2lvbik7
CkBAIC0zNTcsMTMgKzM1NywxMyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoMikudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUs
IGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTM4NCw3ICszODQsNyBAQCBKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNp
Z25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJ
bmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOwogICAgIGlmIChlYykg
ewpAQCAtNDA4LDcgKzQwOCw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXQKICAgICBpZiAoIXByb2dyYW0gJiYgIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTQzNyw3ICs0MzcsNyBAQCBK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0g
SlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAg
ICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2Vi
R0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1l
LCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00OTYsNiArNDk2LDkgQEAgSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgogYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC01MDgsNyArNTExLDcgQEAgYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQwogICAgIAogICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsK
LSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2
ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKCZzdGF0ZSkpOwogICAgIH0KQEAg
LTU1NiwxMSArNTU5LDExIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRh
RnUKICAgICB9IGVsc2UKICAgICAgICAgaW5kZXggPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b0ludDMyKCZzdGF0ZSk7CiAgICAgCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwpAQCAtNzA3LDcgKzcxMCw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9u
TWF0cml4KEQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwog
ICAgIAogICAgIGJvb2wgdHJhbnNwb3NlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9C
b29sZWFuKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJB
cnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3Bw
CShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktp
dFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDExICs2MywxNCBA
QCBlbnVtIGNsYXNzIENyeXB0b0tleUZvcm1hdCB7CiAKIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxn
b3JpdGhtPiBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBhbGdvcml0aG1JZGVudGlmaWVyOwotICAgIGlmICghSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKCZzdGF0ZSwgdmFsdWUsIGFsZ29yaXRobUlkZW50
aWZpZXIpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0
byBzdWNjZXNzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVu
dGlmaWVyKCZzdGF0ZSwgdmFsdWUsIGFsZ29yaXRobUlkZW50aWZpZXIpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgYXV0byByZXN1bHQg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKGFsZ29yaXRobUlk
ZW50aWZpZXIpOwogICAgIGlmICghcmVzdWx0KQpAQCAtODEsNyArODQsNyBAQCBzdGF0aWMgYm9v
bCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGtleUZvcm1hdFN0cmluZyA9IHZhbHVlLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJyYXciKQogICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzsKQEAgLTExNCw3ICsxMTcsNyBAQCBzdGF0aWMgYm9v
bCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShFCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSBhcnJh
eS0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKICAgICAgICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gZWxl
bWVudC50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICh1c2FnZVN0cmluZyA9PSAi
ZW5jcnlwdCIpCiAgICAgICAgICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0OwpA
QCAtMTQ1LDE2ICsxNDgsMTQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZW5jcnlw
dChFeAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9
IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsK
KyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpj
cmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigp
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5
ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAg
ICAgaWYgKCFrZXkpCkBAIC0xNjcsMTAgKzE2OCwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxl
Q3J5cHRvOjplbmNyeXB0KEV4CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRh
OwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21K
U1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpOworICAgIEFT
U0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIAogICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtMjAxLDE2ICsyMDIsMTQgQEAgSlNWYWx1ZSBKU1dl
YktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7
CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUs
IGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlm
ICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAg
ICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0yMjMsMTAgKzIyMiwxMCBA
QCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4CiAgICAgfQogCiAgICAg
Q3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0g
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMiksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNz
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0cjxEZWZl
cnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGds
b2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtMjU2LDE2ICsyNTUsMTQgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1Zh
bHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhbGdvcml0
aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
c2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yU2lnbigm
c3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOwor
ICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0yNzgsMTAgKzI3
NSwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpzaWduKEV4ZWNTCiAgICAgfQog
CiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9u
RGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEp
KSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNj
ZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMiksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBz
dWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1By
b21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0
cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtMzExLDE2ICszMDgsMTQg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4ZQogICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFh
bGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRo
bSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
VmVyaWZ5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1l
dGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9X
cmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTMz
MywxNiArMzI4LDE2IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGUK
ICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVyZTsKLSAgICBpZiAoIWNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDIpLCBzaWduYXR1cmUpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIHNpZ25hdHVyZSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0
YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMyksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKTsKKyAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZl
cnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0g
RGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURl
ZmVycmVkKTsKQEAgLTM3MiwyMiArMzY3LDIwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlw
dG86OmRpZ2VzdChFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBh
bGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFs
Z29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGlj
dGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRl
bnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0
ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0
aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0
aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRh
dGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIEpT
UHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3Jl
YXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+
IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgp
LCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtNDE3LDMwICs0MTAsMjggQEAgSlNWYWx1ZSBKU1dlYktp
dFN1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yR2VuZXJhdGVLZXkoJnN0YXRl
LCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3Vu
dCgpID49IDIpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNh
Z2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDMpIHsKLSAgICAgICAg
aWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMiks
IGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRl
LCBzdGF0ZS5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlz
ZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtNDg0LDcgKzQ3NSw3IEBAIHN0YXRpYyB2b2lkIGlt
cG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBrZXlTZXJpYWxpemF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxKU0NyeXB0b0tl
eVNlcmlhbGl6YXRpb25KV0s+KCZzdGF0ZSwgandrU3RyaW5nKTsKLSAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00OTcsMTEg
KzQ4OCwxMSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAKICAg
ICBPcHRpb25hbDxDcnlwdG9BbGdvcml0aG1QYWlyPiByZWNvbmNpbGVkUmVzdWx0ID0ga2V5U2Vy
aWFsaXphdGlvbi0+cmVjb25jaWxlQWxnb3JpdGhtKGFsZ29yaXRobS5nZXQoKSwgcGFyYW1ldGVy
cy5nZXQoKSk7CiAgICAgaWYgKCFyZWNvbmNpbGVkUmVzdWx0KSB7Ci0gICAgICAgIGlmICghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkFsZ29y
aXRobSBzcGVjaWZpZWQgaW4ga2V5IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb25lIHBhc3NlZCB0
byBpbXBvcnRLZXkgYXMgYXJndW1lbnQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFsZ29yaXRobSA9IHJlY29uY2lsZWRSZXN1
bHQtPmFsZ29yaXRobTsKQEAgLTUxMywxNSArNTA0LDE1IEBAIHN0YXRpYyB2b2lkIGltcG9ydEtl
eShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICBBU1NFUlQocGFyYW1ldGVycyk7CiAKICAgICBrZXlT
ZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVFeHRyYWN0YWJsZShleHRyYWN0YWJsZSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGtleVNlcmlhbGl6YXRpb24tPnJlY29uY2lsZVVz
YWdlcyhrZXlVc2FnZXMpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IGtleURhdGEgPSBrZXlTZXJpYWxpemF0aW9uLT5rZXlEYXRhKCk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTM5LDQ1ICs1MzAs
NDQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0S2V5KAogICAgICAgICBy
ZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAg
IGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDAp
LCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8
fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGht
OwogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOwogICAg
IGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikuaXNOdWxsKCkpIHsKICAgICAgICAgYWxn
b3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBhbGdvcml0aG0pOworICAgICAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAgICAgcGFyYW1ldGVycyA9
IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckltcG9ydEtl
eSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgyKSk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHBhcmFtZXRlcnMpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFi
bGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDQpIHsKICAgICAg
ICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKS50b0Jvb2xlYW4oJnN0
YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2Fn
ZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtleVVzYWdlcykpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIGF1dG8gc3Vj
Y2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg0
KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nl
c3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNl
RGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCkpOwpAQCAtNTkwLDcgKzU4MCw3IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86Omlt
cG9ydEtleSgKICAgICB9OwogCiAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3Jt
YXQsIGRhdGEsIFdURk1vdmUoYWxnb3JpdGhtKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgZXh0cmFj
dGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1
cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsKQEAgLTYxNyw3ICs2MDcs
NyBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgfQogICAg
IGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKV0s6IHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IEpT
Q3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2VyaWFsaXplKCZzdGF0ZSwga2V5KTsKLSAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBDU3RyaW5nIHV0ZjhT
dHJpbmcgPSByZXN1bHQudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3VsdEJ1ZmZlcjsKQEAgLTY0MCwxMCArNjMwLDEwIEBAIEpTVmFsdWUgSlNXZWJL
aXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1h
dEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAg
ICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNy
eXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9y
bWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBS
ZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTY1OSw3ICs2NDksNyBAQCBKU1Zh
bHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAgICAgfTsKIAogICAgIFdlYkNv
cmU6OmV4cG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCAqa2V5LCBXVEZNb3ZlKHN1Y2Nlc3NDYWxs
YmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIHByb21pc2VEZWZlcnJlZC0+cHJvbWlz
ZSgpOwpAQCAtNjc0LDEwICs2NjQsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6
d3JhcEtleShFeAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlG
b3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3Rh
dGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5Rm9ybWF0RnJv
bUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpOworICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+
IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkp
OwogICAgIGlmICgha2V5KQpAQCAtNjk0LDE2ICs2ODQsMTQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1
YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgIH0KIAogICAgIGF1dG8gYWxnb3JpdGhtID0gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMp
KTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAg
IGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0
ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFw
cGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAg
LTc0NiwxNiArNzM0LDE2IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnVud3JhcEtl
eSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtl
eUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVl
KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHdyYXBw
ZWRLZXlEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlEYXRhKSkgewotICAgICAg
ICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVy
YXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwg
d3JhcHBlZEtleURhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNz
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkgPSBKU0NyeXB0b0tleTo6
dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAgICBpZiAoIXVud3JhcHBp
bmdLZXkpCkBAIC03NjgsNDQgKzc1Niw0MSBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRv
Ojp1bndyYXBLZXkoCiAgICAgfQogCiAgICAgYXV0byB1bndyYXBBbGdvcml0aG0gPSBjcmVhdGVB
bGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykpOwot
ICAgIGlmICghdW53cmFwQWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcEFsZ29yaXRo
bSk7CisgICAgaWYgKCF1bndyYXBBbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KICAgICBhdXRvIHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMgPSBKU0NyeXB0
b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEZWNyeXB0KCZzdGF0ZSwg
dW53cmFwQWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMp
KTsKLSAgICBpZiAoIXVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
dW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycyk7CisgICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJh
bWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQ
dHI8Q3J5cHRvQWxnb3JpdGhtPiB1bndyYXBwZWRLZXlBbGdvcml0aG07CiAgICAgUmVmUHRyPENy
eXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnM7
CiAgICAgaWYgKCFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KS5pc051bGwoKSkgewogICAgICAg
ICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwotICAgICAgICBpZiAoIXVud3JhcHBlZEtl
eUFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3JhcHBlZEtleUFsZ29yaXRo
bSk7CisgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KKwogICAgICAgICB1bndyYXBwZWRLZXlBbGdv
cml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0ZSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLT5pZGVudGlm
aWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAgICAgaWYgKCF1bndyYXBw
ZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgdW53cmFw
cGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyk7CisgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
ICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJsZSA9IGZhbHNlOwogICAgIGlmIChz
dGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNikgewogICAgICAgICBleHRyYWN0YWJsZSA9IHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDUpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBDcnlw
dG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkg
Pj0gNykgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKSkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5VXNhZ2Vz
RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDYpLCBrZXlVc2FnZXMpOworICAgICAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CiAgICAg
fQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CkBAIC04MTksMTEgKzgwNCwx
NSBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgICAgIGF1
dG8gaW1wb3J0RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH07CisKKyAgICAgICAgVk0m
IHZtID0gZG9tR2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAgICAgRXhlY1N0YXRlJiBzdGF0ZSA9ICpkb21HbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgV2ViQ29yZTo6aW1wb3J0S2V5KHN0YXRl
LCBrZXlGb3JtYXQsIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCksIHJlc3VsdC5zaXplKCkp
LCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIHVud3JhcHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMs
IGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoaW1wb3J0U3VjY2Vzc0NhbGxiYWNrKSwg
V1RGTW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJhY2spKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRldGFpbHMgdG8gY29uc29s
ZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhlcmUgaXMgYSBzdGFuZGFy
ZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9taXNlIHJlamVjdCBmdW5j
dGlvbnMuCi0gICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHdyYXBwZXItPnJlamVjdChudWxs
cHRyKTsKICAgICAgICAgfQogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIFN0cmluZyBzY3JpcHRVUkwgPSBleGVjLnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAvLyBTZWUgc2VjdGlvbiA0
LjguMiBzdGVwIDE0IG9mIFdlYldvcmtlcnMgZm9yIHdoeSB0aGlzIGlzIHRoZSBsZXhpY2FsR2xv
YmFsT2JqZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9i
YWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSwxMyArNjEsMTYgQEAgdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
Ojp2aXNpdEFkZGl0aW9uYQogCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNj
cmlwdHMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghc3RhdGUu
YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IHVybHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFy
Z3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIHVybHMuYXBwZW5kKHZhbHVlVG9VU1ZTdHJp
bmcoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSkpOwotICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkBAIC04Niw3ICs4OSw3IEBAIEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxT
Y29wZTo6c2V0VGltZW91dCgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1bGVkQWN0aW9uOjpj
cmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgd3JhcHBlZCgpLmNvbnRlbnRT
ZWN1cml0eVBvbGljeSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051bWJlcigwKTsKQEAgLTEw
Myw3ICsxMDYsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6OnNldEludGVydmFsCiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVs
ZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFs
T2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmICghYWN0aW9u
KQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9s
bGVyLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDcgKzUzLDcgQEAgSlNDOjpKU1ZhbHVlIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRybwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gZnVuY3Rp
b24gPSBvYmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0
ZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5k
ZWZpbmVkKCk7CiAKICAgICBpZiAoIWZ1bmN0aW9uLmlzRnVuY3Rpb24oKSkgewpAQCAtNzAsMTkg
KzcwLDIzIEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm8KIAogYm9v
bCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppc0NvbnRyb2xsZWRSZWFkYWJsZVN0
cmVhbUxvY2tlZCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKCZzdGF0ZSk7CisgICAg
YXV0byBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0M6OlZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CiAKLSAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGll
bnREYXRhKj4oc3RhdGUudm0oKS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzdGF0ZSA9ICpnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKICAgICBhdXRvIHJlYWRhYmxlU3RyZWFtID0gbV9qc0NvbnRyb2xsZXIt
PmdldCgmc3RhdGUsIGNsaWVudERhdGEuYnVpbHRpbk5hbWVzKCkuY29udHJvbGxlZFJlYWRhYmxl
U3RyZWFtUHJpdmF0ZU5hbWUoKSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAotICAgIGF1
dG8gaXNMb2NrZWQgPSBnbG9iYWxPYmplY3QoKS0+YnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCku
cmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tX2lzUmVhZGFibGVTdHJlYW1Mb2NrZWRGdW5jdGlv
bi5nZXQoKTsKKyAgICBhdXRvIGlzTG9ja2VkID0gZ2xvYmFsT2JqZWN0LT5idWlsdGluSW50ZXJu
YWxGdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFscygpLm1faXNSZWFkYWJsZVN0cmVh
bUxvY2tlZEZ1bmN0aW9uLmdldCgpOwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBh
cmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZChyZWFkYWJsZVN0cmVhbSk7CiAgICAgYXV0
byByZXN1bHQgPSBjYWxsRnVuY3Rpb24oc3RhdGUsIGlzTG9ja2VkLCBKU0M6OmpzVW5kZWZpbmVk
KCksIGFyZ3VtZW50cyk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LmlzVHJ1ZSgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjA1NDg1KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw4ICs3NCwxMiBAQCBpbmxpbmUgSlNET01HbG9iYWxP
YmplY3QqIFJlYWRhYmxlU3RyZWFtCiAKIGlubGluZSBib29sIFJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXI6OmVucXVldWUoUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiYgYnVmZmVyKQog
ewotICAgIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcigmc3RhdGUpOworICAgIGF1dG8gZ2xv
YmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNDOjpFeGVjU3RhdGUmIHN0YXRlID0gKmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAKICAgICBpZiAoIWJ1ZmZl
cikgewogICAgICAgICBlcnJvcihzdGF0ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUp
KTsKQEAgLTg0LDggKzg4LDggQEAgaW5saW5lIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbAogICAgIGF1dG8gbGVuZ3RoID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgYXV0byBj
aHVuayA9IEpTQzo6VWludDhBcnJheTo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgMCwgbGVuZ3Ro
KTsKICAgICBBU1NFUlQoY2h1bmspOwotICAgIGVucXVldWUoc3RhdGUsIHRvSlMoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgY2h1bmsuZ2V0KCkpKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBlbnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBj
aHVuay5nZXQoKSkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsMTMgKzQ4LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRy
PFNjaGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVj
LCBET01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQsIENvbnRlbnRTZWN1cml0eVBvbGljeSog
cG9saWN5KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRhKHYsIGNhbGxE
YXRhKSA9PSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICBpZiAocG9saWN5ICYmICFwb2xpY3kt
PmFsbG93RXZhbChleGVjKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBT
dHJpbmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4obmV3IFNjaGVkdWxlZEFjdGlvbihzdHJpbmcs
IGlzb2xhdGVkV29ybGQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDExICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBib29sIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KEV4ZWNTdGF0ZSYgc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5h
bWUsIEluc3BlY3RvckZyb250ZW5kSG9zdCYgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBzY3Jp
cHRTdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKmpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7CiAgICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIG5hbWUpLCB0b0pTKCZzY3JpcHRTdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpKTsK
LSAgICBpZiAoc2NyaXB0U3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmVwb3J0RXhj
ZXB0aW9uKCZzY3JpcHRTdGF0ZSwgc2NyaXB0U3RhdGUuZXhjZXB0aW9uKCkpOworICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZz
Y3JpcHRTdGF0ZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBz
aG91bGRUZXJtaW5hdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCk7CisgICAgICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCk7CiAgICAgfQogCiAgICAgdm9pZCB0aHJvd1N0YWNrT3ZlcmZsb3coKQpAQCAtMjQ0OCw2
ICsyNDUwLDkgQEAgcHJpdmF0ZToKIAogRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZSgpCiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFZlY3Rvcjx1aW50
MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAgVmVjdG9yPElkZW50aWZpZXIsIDE2PiBwcm9wZXJ0
eU5hbWVTdGFjazsKICAgICBWZWN0b3I8SlNPYmplY3QqLCAzMj4gb3V0cHV0T2JqZWN0U3RhY2s7
CkBAIC0yNDY4LDcgKzI0NzMsNyBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlh
bGl6ZXI6CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDAs
IG1fZ2xvYmFsT2JqZWN0LCBsZW5ndGgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmQob3V0QXJyYXkpOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBw
ZW5kKG91dEFycmF5KTsKQEAgLTI3MDYsMTMgKzI3MTEsMTYgQEAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpT
VmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSB0b0pTKG9yaWdpbkNvbnRleHQpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
ZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBK
U1ZhbHVlIHZhbHVlID0gdG9KUyhleGVjLCBhcGlWYWx1ZSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVj
LCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgc2NvcGUuZXhjZXB0
aW9uKCktPnZhbHVlKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgQVNTRVJUKHNlcmlhbGl6ZWRWYWx1ZSk7CkBA
IC0yNzQxLDEyICsyNzQ5LDE1IEBAIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNl
cmlhbGkKIEpTVmFsdWVSZWYgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0Nv
bnRleHRSZWYgZGVzdGluYXRpb25Db250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhkZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBKU0xvY2tIb2xkZXIgbG9j
a2VyKHZtKTsKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+
ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52
YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VSVCh2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdv
cmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0g
bV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbEV4ZWMoKTsKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCiAgICAgSlNDOjpldmFsdWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNl
Q29kZSgpLCBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xvYmFsVGhpcygpLCByZXR1cm5l
ZEV4Y2VwdGlvbik7CiAKQEAgLTE0Myw5ICsxNDMsMTIgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250
cm9sbGVyOjpldmFsdWF0ZShjbwogICAgICAgICBTdHJpbmcgc291cmNlVVJMID0gc291cmNlQ29k
ZS51cmwoKS5zdHJpbmcoKTsKICAgICAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZXJyb3I7
CiAgICAgICAgIGlmIChtX3dvcmtlckdsb2JhbFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVy
cm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwsIGVycm9yLCBz
b3VyY2VDb2RlLmNhY2hlZFNjcmlwdCgpKSkgewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKTsKLSAg
ICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAgICAg
ICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICAgICAg
ICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIGVy
cm9yTWVzc2FnZS5pbXBsKCkpKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGZhbHNlKTsKKyAgICAg
ICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0J
KHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBzdWIg
R2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250CiAgICAgICAgIG15ICRuZWVkRXhj
ZXB0aW9uQ2hlY2sgPSAwOwogICAgICAgICBmb3JlYWNoIG15ICRtZW1iZXIgKEB7JGRpY3Rpb25h
cnktPm1lbWJlcnN9KSB7CiAgICAgICAgICAgICBpZiAoJG5lZWRFeGNlcHRpb25DaGVjaykgewot
ICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKVxuIjsKKyAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIjsKICAgICAgICAgICAgICAgICAkcmVzdWx0
IC49ICIgICAgICAgIHJldHVybiBOdWxsb3B0O1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50IHRoaXMgdG8gc2hhcmUgYSBsb3Qg
bW9yZSBjb2RlIHdpdGggSlNWYWx1ZVRvTmF0aXZlLgpAQCAtMzEzMyw3ICszMTMzLDcgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7XG4iKTsKLSAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsiKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtc
biIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTtcbiIpIGlmICEkYXR0cmli
dXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAgIGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMpIHsK
QEAgLTMyMzEsNyArMzIzMSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBuYXRpdmVWYWx1ZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0
dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUp
KSB7XG4iKTsKQEAgLTMyNDIsNyArMzI0Miw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byBuYXRpdmVWYWx1ZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBA
IC0zOTg4LDcgKzM5ODgsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxuIikKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIFZlY3RvcjwkbmF0
aXZlRWxlbWVudFR5cGU+ICRuYW1lID0gdG9OYXRpdmVBcmd1bWVudHM8JG5hdGl2ZUVsZW1lbnRU
eXBlPigqc3RhdGUsICRhcmd1bWVudEluZGV4KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlc
biIpOworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAk
b3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRu
YW1lKSI7CkBAIC00MDIzLDcgKzQwMjMsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVu
dCAgICAkZGVmaW5lT3B0aW9uYWxWYWx1ZSA9IHBhcnNlPCRjbGFzc05hbWU+KCpzdGF0ZSwgJHtu
YW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVu
dCAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRp
bmRlbnQgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
ICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZ
KCEkb3B0aW9uYWxWYWx1ZSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiRpbmRlbnQgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgJGFyZ3VtZW50SW5kZXgsIFwiJG5hbWVcIiwgXCIkdmlzaWJsZUludGVy
ZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9uTmFtZSwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czwkY2xhc3NOYW1lPigpKTtcbiIpOwpAQCAtNDA0Niw3ICs0MDQ2LDcgQEAgc3ViIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
IGlmICghJGNoZWNrZWRBcmd1bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKICAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgICRuYW1lID0gJG5hdGl2ZVZh
bHVlO1xuIik7CiAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAg
ICBpZiAoVU5MSUtFTFkoISRuYW1lKSlcbiIpOwpAQCAtNDA4OSw3ICs0MDg5LDcgQEAgc3ViIEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGF1dG8gJG5hbWUgPSAke291dGVyfSR7bmF0aXZlVmFsdWV9O1xuIik7CiAgICAgICAg
ICAgICAgICAgJHZhbHVlID0gIldURk1vdmUoJG5hbWUpIjsKICAgICAgICAgICAgICAgICBpZiAo
JG1heVRocm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTtcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ0NzAsNyArNDQ3
MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKCkKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAkaW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihzdGF0
ZSwgZWMpO1xuIikgaWYgJHJhaXNlc0V4Y2VwdGlvbjsKIAogICAgICAgICBpZiAoJGNvZGVHZW5l
cmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewotICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5k
ZW50IC4gImlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRpbmRlbnQgLiAiICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgfQogCkBAIC01Mjg0LDcgKzUyODQs
NyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgZXZlbnRUeXBlID0gc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICR7aW50ZXJmYWNlTmFtZX1Jbml0IGV2ZW50
SW5pdDsKQEAgLTUyOTMsNyArNTI5Myw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCAKICAgICBpZiAoIWluaXRpYWxpemVyVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewogICAgICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5
aWVsZCBhbiBvYmplY3QuCiAgICAgICAgIEpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCA9IGlu
aXRpYWxpemVyVmFsdWUudG9PYmplY3Qoc3RhdGUpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5p
dGlhbGl6ZXIgb2JqZWN0LgogICAgICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeShzdGF0ZSwg
aW5pdGlhbGl6ZXJPYmplY3QpOwpAQCAtNTQzNiw3ICs1NDM2LDcgQEAgRU5ECiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVD
b250YWlucygkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JDYWxs
V2l0aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewotICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAg
ICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5j
cHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQs
NyArMjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBtZXNzYWdlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5wb3N0TWVzc2Fn
ZShXVEZNb3ZlKG1lc3NhZ2UpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZp
c2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RDdXN0bwogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFub3RoZXJGdW5jdGlvbihXVEZN
b3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0ODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8
PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQgZXZlbnRJbml0OwpAQCAt
OTQsNyArOTQsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAg
ICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAg
Ly8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0
LgogICAgICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVl
LnRvT2JqZWN0KHN0YXRlKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8v
IENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVj
dC4KICAgICAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2Jq
ZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjA1NDg1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
aW5kZXggPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuaXRlbShXVEZNb3Zl
KGluZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
UmVndWxhckF0dHJpYnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTI4NSw3ICsyODYsNyBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFJlZ3VsYXJBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMjk2LDcgKzI5Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0UHVibGljQW5kUHJpdmEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMwNCw3ICszMDYsNyBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE2LDcgKzMxOCw4IEBA
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmEKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMy
NCw3ICszMjcsNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFB1YmxpY0FuZFBy
aXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zMzcsNyArMzQwLDggQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RF
bmFibGVkQXRSdW50aQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ1LDcgKzM0OSw3IEBAIGJvb2wgc2V0SlNUZXN0
R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGkKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzIsNyArMzc2LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RHbG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnJlZ3VsYXJPcGVyYXRpb24oV1RGTW92ZSh0ZXN0
UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
MzkzLDcgKzM5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmEK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFi
bGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQxNiw3ICs0MjAsNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVu
YWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5j
cHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMTAgKzIz
MSwxMCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0
byBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBzdHIyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBBU0NJSUxpdGVyYWwoImRlZmF1bHRTdHJpbmciKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZKCFjb250ZXh0KSkKQEAgLTY2Myw5ICs2NjMsMTAg
QEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvckltcGxlbQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0SW50
ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC02NzgsNyArNjc5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZh
Y2VJbXBsZW1lbnRzU3RyMihFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNjg2LDcgKzY4OCw3IEBAIGJvb2wgc2V0SlNUZXN0
SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0SW1wbGVtZW50c1N0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNjk5LDcgKzcwMSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJm
YWNlSW1wbGVtZW50c1N0cjMoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTcxNiw3ICs3MTksOCBAQCBib29sIHNldEpTVGVz
dEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MzksOSArNzQzLDEwIEBAIGJvb2wg
c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGUKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgV2ViQ29yZTo6VGVzdFN1
cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFsU3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NTQsNyArNzU5LDggQEAgYm9vbCBzZXRKU1Rlc3RJ
bnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNzYyLDcgKzc2OCw3IEBAIGJvb2wgc2V0
SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9X
VEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRh
bFN0cjIoaW1wbCwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
Nzc1LDcgKzc4MSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMygK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdElu
dGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTc5Miw3ICs3OTksOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRh
bE5vZGUoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFj
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC04NTIsNyArODYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RJbnRlcgogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2Jq
QXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAo
VU5MSUtFTFkoIW9iakFyZykpCkBAIC05MzAsNyArOTM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcgogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1
aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsOCBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRp
bkNvbnN0cnVjdG9yVGVzdEF0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMyArOTEsMTMgQEAgdGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0
U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0cjMgPSBzdGF0ZS0+YXJndW1lbnQoMiku
aXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBU
ZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3RvcigqY2FzdGVkVGhpcy0+
ZG9jdW1lbnQoKSwgV1RGTW92ZShzdHIxKSwgV1RGTW92ZShzdHIyKSwgV1RGTW92ZShzdHIzKSwg
ZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9u
IDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcgKzIwNyw4IEBAIGJvb2wgc2V0SlNU
ZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE5vZGUqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjE1LDcgKzIxNiw3IEBAIGJvb2wgc2V0SlNUZXN0
Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCShyZXZpc2lv
biAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsOCBA
QCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTM2OSw3ICszNzAsNyBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5v
bmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM4MCw3ICszODEsOCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4OCw3ICszOTAsNyBAQCBib29s
IHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5OSw3ICs0MDEs
OCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQwNyw3ICs0MTAsNyBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxOCw3ICs0MjEsOCBAQCBib29sIHNldEpTVGVzdE5v
bmRldGVybWluaXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNyw3ICs0MzEs
NyBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSks
IGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShy
ZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDk3ICs1MjUsOTcgQEAgdGVt
cGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5PgogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQgPSBj
b252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhv
dXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0
T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0
IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW51bVZhbHVlMSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1
ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5
cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQiKSksIFRlc3RPYmo6
OkVudW1UeXBlOjpFbXB0eVN0cmluZyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0
T3B0aW9uYWw8U3RyaW5nPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dpdGhEZWZhdWx0IikpLCAiZGVmYXVsdFN0cmluZyIp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIHN0cmluZ1dpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3Rh
dGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJz
dHJpbmdXaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhEZWZhdWx0IikpLCBmYWxzZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9v
bGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhv
dXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3RyaW5ncyA9IGNvbnZlcnRPcHRpb25hbDxW
ZWN0b3I8U3RyaW5nPj4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJzZXF1ZW5jZU9mU3RyaW5ncyIpKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZERv
dWJsZSA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZSIpKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0
T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZSIpKSwgU2hvdWxkQWxsb3dOb25G
aW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBO
dWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydE9w
dGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQiKSksIFNob3VsZEFs
bG93Tm9uRmluaXRlOjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQg
PSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0
IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXN0cmljdGVkRmxvYXQg
PSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0IikpLCBTaG91bGRBbGxv
d05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJpY3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFs
PGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVz
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byByZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9h
dD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6
Ok5vLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRGbG9hdFdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlv
bmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93
Tm9uRmluaXRlOjpZZXMsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHNtYWxsSW50ZWdlckNsYW1wZWQgPSBjb252ZXJ0T3B0
aW9uYWw8aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlckNsYW1wZWQiKSksIENsYW1wKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFs
bEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxpbnQ4X3Q+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRl
Z2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHNtYWxsVW5zaWduZWRJ
bnRlZ2VyRW5mb3JjZWRSYW5nZSA9IGNvbnZlcnRPcHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5z
aWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIpKSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbFVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQ4X3Q+KHN0YXRl
LCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gaW50ZWdlciA9IGNvbnZlcnRPcHRpb25hbDxpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVnZXIiKSksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvIGludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxp
bnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gdW5zaWduZWRJbnRlZ2VyID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVk
SW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5zaWduZWRJbnRlZ2VyV2l0aERl
ZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8dWludDMyX3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERl
ZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGxhcmdlSW50ZWdlciA9IGNvbnZl
cnRPcHRpb25hbDxpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdlSW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gbGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4o
c3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8g
dW5zaWduZWRMYXJnZUludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8dWludDY0X3Q+KHN0YXRlLCBv
YmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWdu
ZWRMYXJnZUludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJ
bnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8dWludDY0X3Q+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRM
YXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8qIG51
bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVyVHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVO
b2RlIikpLCBJc051bGxhYmxlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGFueVZhbHVlID0gY29udmVydE9wdGlvbmFs
PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIpKSwganNVbmRlZmluZWQoKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYW55VHlw
ZWRlZlZhbHVlID0gY29udmVydE9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlUeXBlZGVmVmFs
dWUiKSksIGpzVW5kZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGRpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oc3RhdGUs
IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0
aW9uYXJ5TWVtYmVyIikpKTsKICAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeSB7IFdURk1v
dmUoZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZh
bHVlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdE
ZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRoRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aG91
dERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRoRGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldp
dGhvdXREZWZhdWx0KSwgV1RGTW92ZShzZXF1ZW5jZU9mU3RyaW5ncyksIFdURk1vdmUocmVzdHJp
Y3RlZERvdWJsZSksIFdURk1vdmUodW5yZXN0cmljdGVkRG91YmxlKSwgV1RGTW92ZShyZXN0cmlj
dGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZh
dWx0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0
KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmlj
dGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1vdmUoc21hbGxJbnRlZ2VyQ2xhbXBlZCksIFdURk1v
dmUoc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2Vy
RW5mb3JjZWRSYW5nZSksIFdURk1vdmUoc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCks
IFdURk1vdmUoaW50ZWdlciksIFdURk1vdmUoaW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1
bnNpZ25lZEludGVnZXIpLCBXVEZNb3ZlKHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RG
TW92ZShsYXJnZUludGVnZXIpLCBXVEZNb3ZlKGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RG
TW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlciksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXJX
aXRoRGVmYXVsdCksIFdURk1vdmUobnVsbGFibGVOb2RlKSwgV1RGTW92ZShhbnlWYWx1ZSksIFdU
Rk1vdmUoYW55VHlwZWRlZlZhbHVlKSwgZGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02
MzEsMTMgKzYzMSwxMyBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlU
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KICAgICBhdXRvIHJlcXVpcmVkRW51bWVy
YXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWRFbnVtZXJh
dGlvblZhbHVlIikpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CiAgICAgYXV0byBib29sZWFuV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9u
YWw8Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJib29sZWFuV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvKiBub25OdWxsYWJsZU5v
ZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9kZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIp
KSwgSXNOdWxsYWJsZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciA9IGNvbnZl
cnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rpb25hcnk+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVt
YmVyIikpKTsKICAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xl
cmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9v
bGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51bGxhYmxlTm9kZSwgcmVxdWlyZWREaWN0aW9uYXJ5
TWVtYmVyLnZhbHVlKCkgfTsKQEAgLTY1NSw3ICs2NTUsNyBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFs
PFRlc3RPYmo6OkRpY3Rpb25hcnlUCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KICAg
ICBhdXRvIGVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5
cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0g
Y29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKICAgICBy
ZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGRUb2xlcmF0ZU51bGwgeyBXVEZNb3Zl
KGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKQEAg
LTY3Myw3ICs2NzMsNyBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPEFsdGVybmF0ZURpY3Rpb25hcnlO
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KICAgICBhdXRvIGVudW1lcmF0aW9uVmFs
dWUgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1
ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0
OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+
KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKICAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlv
bmFyeU5hbWUgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRo
b3V0RGVmYXVsdCkgfTsKQEAgLTMwOTAsOSArMzA5MCwxMCBAQCBib29sIHNldEpTVGVzdE9iakNv
bnN0cnVjdG9yU3RhdGljU3RyaW5nCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzEwMyw3ICszMTA0
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0U3ViT2JqRW5hYmxlZEJ5U2V0dAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzExOCw3ICszMTIwLDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzEyNiw3ICszMTI5LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihFeGVjU3RhdGUqIHN0YQogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBw
YXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRp
dmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxMzksNyArMzE0Miw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxNDcsNyArMzE1MSw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVy
dDxpbnQ4X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qnl0ZUF0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE1OCw3ICsz
MTYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzE2Niw3ICszMTcx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpPY3RldEF0dHIoRXhlY1N0YXRlKiBzdAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0T2N0ZXRBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMxNzcsNyArMzE4Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0
ZSogc3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTMxODUsNyArMzE5MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSog
c3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zMTk2LDcgKzMyMDIsOCBAQCBib29sIHNldEpTVGVzdE9iakNsYW1w
ZWRTaG9ydEF0dHIoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zMjA0LDcgKzMyMTEsNyBAQCBib29sIHNldEpTVGVzdE9iakNsYW1wZWRT
aG9ydEF0dHIoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2
YWx1ZSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Q2xhbXBlZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjE1LDcgKzMyMjIsOCBAQCBib29sIHNldEpTVGVz
dE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjIzLDcgKzMyMzEsNyBAQCBib29sIHNldEpTVGVzdE9i
akVuZm9yY2VSYW5nZVNob3J0QXR0cihFCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4o
KnN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuZm9yY2VSYW5nZVNob3J0QXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMjM0LDcgKzMy
NDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTCiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjQyLDcgKzMyNTEs
NyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKEV4ZWNTCiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0VW5zaWduZWRTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzI1Myw3ICszMjYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihF
eGVjU3RhdGUqIHN0YQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzI2MSw3ICszMjcxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVj
U3RhdGUqIHN0YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUs
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3Miw3ICszMjgyLDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI4MCw3ICszMjkxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpM
b25nTG9uZ0F0dHIoRXhlY1N0YXRlKgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDY0X3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyOTEsNyArMzMwMiw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXgKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyOTksNyArMzMxMSw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ0F0dHIoRXgKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRV
bnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0zMzEwLDcgKzMzMjIsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhl
Y1N0YXRlKiBzCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zMzE4LDcgKzMzMzEsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0
YXRlKiBzCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0
cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzMy
OSw3ICszMzQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzMzNyw3
ICszMzUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZQogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVc3ZzdHJp
bmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNDgs
NyArMzM2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiAKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzNjksNyAr
MzM4NCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdE51bGxhYmxlT2JqQXR0cihFeGUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMzOTMsNyArMzQw
OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTGVuaWVudFRlc3RPYmpBdHRyKEV4ZWMKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0MTQsNyArMzQzMSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEEKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0MjIsNyArMzQ0MCw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0clRyZWF0aW5nTnVsbEEKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM0MzMsNyArMzQ1MSw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NDEsNyArMzQ2MCw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmlu
Z1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVzdnN0cmlu
Z0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTM0NTIsNyArMzQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1w
bGVtZW50YXRpb25FbnVtQXR0cigKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTM0NjAsNyArMzQ4MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVt
ZW50YXRpb25FbnVtQXR0cigKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+
KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0zNDczLDcgKzM0OTMsOCBAQCBib29sIHNldEpTVGVzdE9ialhNTE9iakF0
dHIoRXhlY1N0YXRlKiBzCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNDk0LDcgKzM1MTUsOCBAQCBib29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVj
U3RhdGUqIHN0YXRlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNTAyLDcgKzM1MjQsNyBAQCBib29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3Rh
dGUqIHN0YXRlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRD
cmVhdGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzUxMyw3
ICszNTM1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzUyMSw3ICsz
NTQ0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0
dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1MzIsNyAr
MzU1NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cigKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1NDAsNyArMzU2
NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWU3RyaW5nQXR0cigKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnN0cmlu
Z2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
NTUxLDcgKzM1NzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihF
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTU5
LDcgKzM1ODQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxl
Y3RlZGludGVncmFsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM1NzAsNyArMzU5NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5z
aWduZWRJbnRlZ3IKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTM1NzgsNyArMzYwNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWdu
ZWRJbnRlZ3IKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNv
cmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5zaWduZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTg5LDcgKzM2MTUsOCBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTk3LDcgKzM2MjQsNyBAQCBib29s
IHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xlYW5BdHRyKEV4CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRCb29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zNjA4LDcgKzM2MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJl
ZmxlY3RlZFVSTEF0dHIoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zNjE2LDcgKzM2NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxl
Y3RlZFVSTEF0dHIoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYyNyw3ICszNjU1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRVU1ZVUkxBdHRyKEV4ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzYzNSw3ICszNjY0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZVUkxBdHRyKEV4ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxO
YW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTM2NDYsNyArMzY3NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkU3RyaW5nQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTM2NTQsNyArMzY4NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzY2NSw3ICszNjk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzY3Myw3ICszNzA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRDdXN0b21JbnRlZ3JhbAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50SW50ZWdyYWxBdHRyQXR0ciwgV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzY4NCw3ICszNzE1LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzY5Miw3ICszNzI0LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21Cb29sZWFuQQogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50
b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFt
ZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MDMsNyArMzczNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkQ3VzdG9tVVJMQXR0cigKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM3MTEsNyArMzc0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkQ3VzdG9tVVJMQXR0cigKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1M
TmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzcyMyw3ICszNzU2LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpF
bmFibGVkQXRSdW50aW1lQXR0cmlidQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzczMSw3ICszNzY1LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmFi
bGVkQXRSdW50aW1lQXR0cmlidQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRFbmFibGVkQXRSdW50aW1lQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3NDMsNyArMzc3Nyw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTM3NTEsNyArMzc4Niw3IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
VHlwZWRBcnJheUF0dHIoRXhlY1N0YXQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdG9GbG9hdDMyQXJyYXkodmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7CiAgICAgICAgIHRocm93QXR0cmlidXRl
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgIlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0
dHIiLCAiRmxvYXQzMkFycmF5Iik7CkBAIC0zNzY2LDcgKzM4MDEsOCBAQCBib29sIHNldEpTVGVz
dE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzc0LDcgKzM4MTAsNyBAQCBib29sIHNldEpTVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzg1
LDcgKzM4MjEsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzkzLDcg
KzM4MzAsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4MDQsNyArMzg0MSw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24KIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4MTMsNyArMzg1MSw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSks
IGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTM4MjUsNyArMzg2Myw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24KIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4MzQsNyArMzg3Myw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBl
YzsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1l
c3NhZ2UoV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3Rh
dGUsIGVjKTsKQEAgLTM4NDYsNyArMzg4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0
cldpdGhHZXR0ZXJFeGMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTM4NTQsNyArMzg5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldp
dGhHZXR0ZXJFeGMKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwu
c2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzg2NSw3ICszOTA1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpT
dHJpbmdBdHRyV2l0aFNldHRlckV4YwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzg3NCw3ICszOTE1LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aFNldHRlckV4YwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0
aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRl
LCBlYyk7CkBAIC0zODg2LDcgKzM5MjcsOCBAQCBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIo
RXhlY1N0YXRlKiBzCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zOTAxLDcgKzM5NDMsOCBAQCBib29sIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0
ZSogc3RhdGUsCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zOTE2LDcgKzM5NTksOCBAQCBib29sIHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNT
dGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zOTMxLDcgKzM5NzUsOCBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJp
YnV0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
OTM5LDcgKzM5ODQsNyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCBXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zOTUwLDcgKzM5OTUsOCBAQCBi
b29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTU4LDcgKzQwMDQsNyBAQCBib29s
IHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFuZFNldHRlckNhCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRo
Q2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURPTVdpbmRv
dyhzdGF0ZSksIGZpcnN0RE9NV2luZG93KHN0YXRlKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzk2OSw3ICs0MDE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzk5Myw3ICs0MDQwLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRo
U2NyaXB0U3RhdGVBdHRyaWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDAxNCw3ICs0MDYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtNDAzOCw3ICs0MDg3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtNDA2Miw3ICs0MTEyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtNDA4Niw3ICs0MTM3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtNDExMCw3ICs0MTYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRz
QW5kQwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NDEzMiw3ICs0MTg1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNT
dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE0
MCw3ICs0MTk0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdAog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxBdHRyMShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MTUzLDcgKzQyMDcsOCBAQCBib29sIHNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjIoRXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00MTYxLDcgKzQyMTYsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRp
dGlvbmFsQXR0cjIoRXhlY1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIyKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNzQsNyArNDIyOSw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3QKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxODIsNyArNDIzOCw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMyhFeGVjU3QKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENv
bmRpdGlvbmFsQXR0cjMoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtNDE5NSw3ICs0MjUxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29u
c3RydQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NDIxMiw3ICs0MjY5LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3Ry
dQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDIy
OSw3ICs0Mjg3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI0NSw3
ICs0MzA0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKgogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI2Miw3ICs0
MzIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpNdXRhYmxlUG9pbnQoRXhlY1N0YXRlKgogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI4Niw3ICs0MzQ3
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludChFeGVjU3RhdAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDMxMCw3ICs0MzcyLDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDMxOCw3ICs0MzgxLDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Qmx1ZWJlcnJ5KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQz
MjksNyArNDM5Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW4K
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMzcs
NyArNDQwMSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpbXBsLnNldElkKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQzNDgsNyArNDQxMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1
dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTQzNjMsNyArNDQyOCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVB
dHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQz
NzEsNyArNDQzNyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHQK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE51bGxhYmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzODIsNyArNDQ0OCw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUEKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzOTAsNyArNDQ1Nyw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0YWJsZUEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFi
bGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC00NDAxLDcgKzQ0NjgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxl
VVNWU3RyaW5nU2V0dGFiCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00NDA5LDcgKzQ0NzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNW
U3RyaW5nU2V0dGFiCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFi
bGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NDQyMCw3ICs0NDg4LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4
ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNv
ZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQy
OCw3ICs0NDk3LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJpbmdWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDM5LDcgKzQ1MDgsOCBAQCBib29sIHNldEpTVGVzdE9i
akF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVuCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00NDQ3LDcgKzQ1MTcsNyBAQCBib29sIHNldEpTVGVzdE9iakF0
dHJpYnV0ZVdpdGhSZXNlcnZlZEVuCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6Ok9wdGlv
bmFsPigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNDQ2MCw3ICs0NTMwLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRG
b3J3YXJkc0F0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDQ2OSw3ICs0NTQwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3
YXJkc0F0dHJpYnV0ZShFeAogICAgIFJlZjxUZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKS5wdXRGb3J3YXJkc0F0dHJpYnV0ZSgpOwogICAgIGF1dG8mIGltcGwg
PSBmb3J3YXJkZWRJbXBsLmdldCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROYW1lKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTQ0ODAsNyArNDU1MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9y
d2FyZHNOdWxsYWJsZUF0dHIKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQ0OTEsNyArNDU2Myw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2Fy
ZHNOdWxsYWJsZUF0dHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAq
Zm9yd2FyZGVkSW1wbDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0TmFtZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC00NTAyLDcgKzQ1NzQsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0
cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC00NTEwLDcgKzQ1ODMsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmli
dXRlKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQ1NDYsNyArNDYxOSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQ1NjksNyAr
NDY0Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJh
bSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00NjI3
LDEwICs0NzAwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2Jq
Ojp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFy
ZykpCkBAIC00NjY4LDEwICs0NzQxLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZl
cnQ8aW50OF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcg
PSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJ
S0VMWSghb2JqQXJnKSkKQEAgLTQ3MDksMTAgKzQ3ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvY3Rl
dEFyZyA9IGNvbnZlcnQ8dWludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRl
LT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzUwLDEwICs0ODIzLDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0
ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFy
Z3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzkxLDEwICs0ODY0
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBw
ZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00
ODMyLDcgKzQ5MDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZyA9IHZhbHVlVG9TdHJpbmdUcmVhdGlu
Z051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5n
KFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTQ4NTIsNyArNDkyNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gcmVzb2x2ZXIgPSBKU1hQYXRo
TlNSZXNvbHZlcjo6dG9XcmFwcGVkKCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFyZXNvbHZlcikpCiAgICAgICAgIHJldHVy
biB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVy
IiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIsICJY
UGF0aE5TUmVzb2x2ZXIiKTsKQEAgLTQ4OTgsNyArNDk3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5k
ZXggPSBjb252ZXJ0PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNT
dHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVsbGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKFdURk1v
dmUoaW5kZXgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNDky
MCw3ICs0OTkzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgIGF1dG8gZW51bUFyZ1ZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDApOwogICAgIFRlc3RPYmo6
OkVudW1UeXBlIGVudW1Bcmc7CiAgICAgYXV0byBvcHRpb25hbFZhbHVlID0gcGFyc2U8VGVzdE9i
ajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvcHRpb25hbFZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJU
ZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhFbnVtQXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVl
czxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CkBAIC00OTQ0LDcgKzUwMTcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgT3B0aW9uYWw8VGVzdE9iajo6RW51
bVR5cGU+IGVudW1Bcmc7CiAgICAgaWYgKCFlbnVtQXJnVmFsdWUuaXNVbmRlZmluZWQoKSkgewog
ICAgICAgICBlbnVtQXJnID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFy
Z1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChVTkxJ
S0VMWSghZW51bUFyZykpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVu
dW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAi
bWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVz
dE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk3MCw3ICs1MDQzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICBlbnVtQXJnID0gVGVzdE9iajo6RW51
bVR5cGU6OkVudW1WYWx1ZTE7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBvcHRpb25hbFZh
bHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghb3B0aW9u
YWxWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9k
V2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk5NSw3ICs1MDY4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3RyQXJnID0gc3Rh
dGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMSkp
OwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKQEAgLTUwMjAsNyArNTA5Myw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnKFdU
Rk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
QEAgLTUwNDAsNyArNTExMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0cmlu
Z1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmco
V1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTA2MCw3ICs1MTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSB2YWx1ZVRvVVNWU3Ry
aW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRp
bmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MDgwLDcgKzUxNTMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zZXJp
YWxpemVkVmFsdWUoV1RGTW92ZShzZXJpYWxpemVkQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxNzksNyArNTI1Miw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gYXJndW1lbnQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0
YXRlLCBpbXBsLnByaXZhdGVNZXRob2QoV1RGTW92ZShhcmd1bWVudCkpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01MTk5LDcgKzUyNzIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShz
dGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRlTWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTIxOSwxMyArNTI5MiwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGxpc3RlbmVyID0gSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoc3RhdGUtPmFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJl
bnRXb3JsZChzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghbGlzdGVuZXIpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJsaXN0
ZW5lciIsICJUZXN0T2JqZWN0IiwgImFkZEV2ZW50TGlzdGVuZXIiLCAiRXZlbnRMaXN0ZW5lciIp
OwogICAgIGF1dG8gdXNlQ2FwdHVyZSA9IHN0YXRlLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oc3Rh
dGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmFkZEV2ZW50TGlzdGVuZXIoV1RGTW92
ZSh0eXBlKSwgKmxpc3RlbmVyLCBXVEZNb3ZlKHVzZUNhcHR1cmUpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTI0NSwxMyArNTMxOCwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHR5cGUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGxpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpj
cmVhdGUoc3RhdGUtPmFyZ3VtZW50KDEpLCAqY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3Js
ZChzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VMWSghbGlzdGVuZXIpKQogICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJsaXN0ZW5lciIs
ICJUZXN0T2JqZWN0IiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAiRXZlbnRMaXN0ZW5lciIpOwog
ICAgIGF1dG8gdXNlQ2FwdHVyZSA9IHN0YXRlLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV1RGTW92
ZSh0eXBlKSwgKmxpc3RlbmVyLCBXVEZNb3ZlKHVzZUNhcHR1cmUpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTI4NCw3ICs1MzU3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0
YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KQEAgLTUzMjEsNyArNTM5NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHIKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3Rh
dGUsIGVjKSk7CiAKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtNTM4MCw3
ICs1NDUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlv
bigqc3RhdGUsICpjb250ZXh0LCBlYykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKIH0KQEAgLTU0MDAsNyArNTQ3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygqc3RhdGUsICpjb250ZXh0KSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTU0ODYs
NyArNTU1OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0
ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90Pigp
IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE9wdGlvbmFsQXJnKFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTU1MDQsNyArNTU3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3Rl
ZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyA2NjYgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShvcHQpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTUyNCwxMCArNTU5Nywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIG5vbk9wdCA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8
aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKFdURk1vdmUobm9uT3B0KSwg
V1RGTW92ZShvcHQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTU0NywxMyArNTYyMCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbk9wdCA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9wdDEgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQyID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxB
cmdzKFdURk1vdmUobm9uT3B0KSwgV1RGTW92ZShvcHQxKSwgV1RGTW92ZShvcHQyKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NzEsNyArNTY0NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUt
PmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1ODksNyArNTY2Miw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2MDcsNyArNTY4MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcoV1RGTW92ZShzdHIp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTYyNSw3
ICs1Njk4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIg
PSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikg
OiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRW
YWx1ZShXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC01NjQzLDcgKzU3MTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQXRv
bWljU3RyaW5nKCJmb28iLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY2MSw3ICs1NzM0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY3OSw3ICs1NzUyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2OTcsNyArNTc3MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRvbSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGwoV1RGTW92
ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTcxNSw3ICs1Nzg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkg
OiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJp
bmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNTczMyw3ICs1ODA2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNU
ZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5
U3RyaW5nKCkgOiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVT
VlN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTc1MSw3ICs1ODI0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNV
bmRlZmluZWQoKSA/IGVtcHR5QXRvbSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0
cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1v
dmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTU3NjksNyArNTg0Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6
aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbnVtYmVyID0gY29udmVydDxkb3VibGU+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBT
aG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01Nzg3LDcgKzU4NjAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8
ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6
WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxGbG9h
dElzTmFOKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU4MDUsNyArNTg3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
KCkgPyBPcHRpb25hbDxpbnQ2NF90PigpIDogY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTgyMyw3
ICs1ODk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1i
ZXIgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9u
YWxMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODQxLDcgKzU5MTQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
UyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5p
c1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01ODU5LDcgKzU5MzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNpZ25lZExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVt
YmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4
NzcsNyArNTk1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
YXJyYXkgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPFZlY3Rv
cjxTdHJpbmc+PigpIDogdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZShXVEZNb3ZlKGFycmF5KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4OTUsNyArNTk2OCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYXJyYXkgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNV
bmRlZmluZWQoKSA/IFZlY3RvcjxTdHJpbmc+KCkgOiB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eShXVEZNb3ZlKGFycmF5KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU5MTMsNyAr
NTk4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYiA9IHN0
YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8Ym9vbD4oKSA6IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4oV1RGTW92ZShiKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU5MzEsNyArNjAwNCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYiA9IHN0YXRlLT5h
cmd1bWVudCgwKS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
Lm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5Jc0ZhbHNlKFdURk1vdmUoYikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02MDA5LDcgKzYwODIsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgUmVmUHRyPFhQYXRo
TlNSZXNvbHZlcj4gcmVzb2x2ZXIgPSBudWxscHRyOwogICAgIGlmICghc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgcmVzb2x2ZXIgPSBKU1hQYXRoTlNS
ZXNvbHZlcjo6dG9XcmFwcGVkKCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcmVz
b2x2ZXIpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAwLCAicmVzb2x2ZXIiLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0
aW9uYWxYUGF0aE5TUmVzb2x2ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7CkBAIC02MDUyLDcgKzYx
MjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbkNhbGxiYWNrID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGlmIChVTkxJS0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCAxLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2Fs
bGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOwpAQCAtNjExNiw3ICs2MTg5LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5M
SUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5pc0Z1bmN0aW9uKCkpKQogICAgICAgICByZXR1cm4g
dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAi
Y2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0Z1bmN0aW9uQXJnIik7CkBAIC02MjQ5LDcgKzYzMjIsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsKICAgICB9CiAgICAgYXV0byBzdHJBcmcg
PSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKHN0
ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02
Mjc1LDcgKzYzNDgsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialBy
CiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRl
c3RPYmoiKTsKICAgICB9CiAgICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlz
VW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKG9iakFyZyks
IFdURk1vdmUobG9uZ0FyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC02Mjk1LDcgKzYzNjgsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVl
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02MzE1LDcgKzYzODgsNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVy
bG9hZGVkTWV0aG9kKFdURk1vdmUobG9uZ0FyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Mzc4LDcgKzY0NTEsNyBAQCBzdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFy
cmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUo
YXJyYXlBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNjQxOCw3ICs2NDkxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJy
YXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0MzgsNyArNjUxMSw3IEBA
IHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zlcmxv
YWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0NTgsNyArNjUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3Ry
QXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoc3RyQXJnKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY1NDYsNyArNjYxOSw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iaiogb2JqQXJnID0gbnVsbHB0
cjsKICAgICBpZiAoIXN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBA
IC02NTc4LDcgKzY2NTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9i
alByCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0
aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsKICAgICB9CiAgICAgYXV0byBsb25nQXJn
ID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90Pigp
IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRl
ZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcihXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9u
Z0FyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02
NjI0LDcgKzY2OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNv
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8gYXJnID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6
Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RGTW92ZShhcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjY0OSw3ICs2NzIyLDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBh
cmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZDEoV1RGTW92ZShhcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNjY2Niw3ICs2NzM5LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUt
PmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
VGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZSh0eXBlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3MDksMTAgKzY3ODIsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgQ2xhbXApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFy
Z3NMb25nID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIENs
YW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jbGFzc01ldGhvZFdpdGhDbGFtcChX
VEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjczMiwxMCArNjgwNSwxMCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIG9iakFyZ3NTaG9ydCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIG9iakFyZ3NMb25nID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMSksIEVuZm9yY2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NN
ZXRob2RXaXRoRW5mb3JjZVJhbmdlKFdURk1vdmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpB
cmdzTG9uZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC02NzU1LDcgKzY4MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0g
dG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShX
VEZNb3ZlKHVuc2lnbmVkTG9uZ1NlcXVlbmNlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3NzYsNyArNjg0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8
U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAK
QEAgLTY4MjEsMTAgKzY4OTQsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZl
QXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBudWxsYWJsZUFycmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJf
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLm1ldGhvZFdpdGhBbmRXaXRob3V0TnVsbGFibGVTZXF1ZW5jZShXVEZNb3ZlKGFycmF5QXJn
KSwgV1RGTW92ZShudWxsYWJsZUFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY4NDQsNyArNjkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gZWxl
bWVudElkID0gQXRvbWljU3RyaW5nKHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSkt
PnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3ZlKGVsZW1lbnRJZCkpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC02OTI3LDcgKzcwMDAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0MyhXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY5NDcsNyArNzAyMCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gdmFsdWUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LmNvbnZlcnQ0KFdURk1vdmUodmFsdWUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNzAxMiwxMCArNzA4NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlYWQg
PSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWlsID0gdG9OYXRpdmVBcmd1bWVudHM8U3RyaW5nPigq
c3RhdGUsIDEpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljU3RyaW5nTWV0
aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUodGFpbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MDM1LDEwICs3MTA4LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gaGVhZCA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxk
b3VibGU+IHRhaWwgPSB0b05hdGl2ZUFyZ3VtZW50czxkb3VibGU+KCpzdGF0ZSwgMSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwudmFyaWFkaWNEb3VibGVNZXRob2QoV1RGTW92ZShoZWFk
KSwgV1RGTW92ZSh0YWlsKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTcwODcsMTAgKzcxNjAsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxm
bG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZ
ZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgaW1wbC5hbnkoV1RGTW92ZShhKSwgV1RGTW92ZShiKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcxMzcsNyArNzIxMCw3IEBAIHN0
YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJl
ZFdyYXBwZXI6OmNyZWF0ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21p
c2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC03MTg0LDcgKzcyNTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RP
Ymo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGlu
dDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50
ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoV1RGTW92ZShhKSwgRGVm
ZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBw
cm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNzIxMCw3ICs3MjgzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxmbG9h
dD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rp
b24oV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzMyNCw3ICs3Mzk3LDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzM0Nyw3ICs3NDIw
LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzM5MCw3ICs3NDYzLDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQxMSw3
ICs3NDg0LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQ1MCw3ICs3NTIzLDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBpbml0ID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLmF0dGFjaFNoYWRvd1Jvb3QoaW5pdC52YWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlCdWZm
ZXIgPSB0b0FycmF5QnVmZmVyKHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dB
cmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJhcnJheUJ1ZmZlciIsICJU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZlciIpOwpAQCAt
OTMsNyArOTMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZm
ZXJWaWV3KHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChV
TkxJS0VMWSghYXJyYXlCdWZmZXJWaWV3KSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOwpAQCAt
MTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3Qg
PSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC0xNDEsNyArMTQxLDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
Kj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgVmVjdG9y
PGludDMyX3Q+IGxvbmdBcmdzID0gdG9OYXRpdmVBcmd1bWVudHM8aW50MzJfdD4oKnN0YXRlLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUobG9uZ0FyZ3MpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDIw
NTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAg
ICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlQ29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVChj
YXN0ZWRUaGlzKTsKICAgICBhdXRvIHNlcXVlbmNlT2ZTdHJpbmdzID0gc3RhdGUtPmFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9OYXRpdmVBcnJheTxTdHJp
bmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc2VxdWVuY2VPZlN0cmluZ3MpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBzdHJpbmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlOjpjcmVhdGUoV1RGTW92ZShzdHJpbmcpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWls
dGlucy5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjEwLDcgKzIxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3Zl
cnIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbmFtZSA9IHN0YXRlLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJ
dGVtKFdURk1vdmUobmFtZSkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3ICsyNTEsOCBAQCBib29sIHNldEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0yNTksNyArMjYwLDcgQEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMjcwLDcgKzI3MSw4IEBAIGJvb2wgc2V0SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTI3OCw3ICsyODAsNyBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDYWNoZWRWYWx1ZShXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJl
dmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCB0
ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIGhlbGxvID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQo
MSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rp
b25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdFR5cGVk
ZWZzIiwgbnVsbHB0cik7CkBAIC0zNjAsNyArMzYwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVm
c1Vuc2lnbmVkTG9uZ0xvbmdBdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2OCw3ICszNjksNyBAQCBib29sIHNldEpTVGVzdFR5
cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+
KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9u
Z0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc5LDcg
KzM4MCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVTZXJpYWxpemUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZz
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
ODcsNyArMzg5LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZQog
ICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
bmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUs
IDAsIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0SW1tdXRhYmxlU2VyaWFsaXplZFNjcmlwdFZhbHVlKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5OCw3ICs0MDAsOCBAQCBib29sIHNl
dEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJFeGNlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDA2LDcgKzQwOSw3IEBAIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aEdldHRlckV4Y2UKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQxNyw3ICs0MjAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhT
ZXR0ZXJFeGNlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRl
ZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDI2LDcgKzQzMCw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRy
V2l0aFNldHRlckV4Y2UKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01F
eGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTQzOCw3ICs0NDIsOCBAQCBib29sIHNldEpTVGVzdFR5
cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ2LDcgKzQ1MSw3IEBAIGJvb2wgc2V0SlNU
ZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDU3LDcgKzQ2Miw4IEBAIGJv
b2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHQKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NjYsNyArNDcyLDcg
QEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dAogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0
cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00OTEsNyArNDk3LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHggPSBzdGF0ZS0+YXJndW1l
bnQoMCkuaXNVbmRlZmluZWQoKSA/IFZlY3RvcjxpbnQzMl90PigpIDogdG9OYXRpdmVBcnJheTxp
bnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuZnVuYyhXVEZNb3ZlKHgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTExLDE5ICs1MTcsMTkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byB3aWR0aCA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91
bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBoZWln
aHQgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgxKSwgU2hvdWxkQWxs
b3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYmx1ciA9IGNv
bnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDIpLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBjb2xvciA9IHN0YXRlLT5h
cmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMykudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IGFscGhhID0gc3RhdGUtPmFyZ3VtZW50KDQpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxmbG9h
dD4oKSA6IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDQp
LCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5zZXRTaGFkb3coV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSwgV1RGTW92ZShibHVy
KSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUoYWxwaGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTQzLDcgKzU0OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
c2VxdWVuY2VBcmcgPSB0b1JlZlB0ck5hdGl2ZUFycmF5PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwg
SlNTZXJpYWxpemVkU2NyaXB0VmFsdWU+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm1ldGhv
ZFdpdGhTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTU2Myw3ICs1NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNl
cXVlbmNlQXJnID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlQXJnKFdU
Rk1vdmUoc2VxdWVuY2VBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNTgzLDEwICs1ODksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcxID0gY29udmVy
dDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBhcmcyID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVk
KCkgPyBPcHRpb25hbDx1aW50NjRfdD4oKSA6IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwuZnVuY1dpdGhDbGFtcChXVEZNb3ZlKGFyZzEpLCBXVEZNb3ZlKGFyZzIpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjIyLDcgKzYyOCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHZhbHVl
cyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbihXVEZN
b3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY0NSw3ICs2NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5
PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNlRnVuY3Rpb24yKFdURk1vdmUodmFsdWVzKSwgZWMp
KTsKIApAQCAtNjY3LDcgKzY3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b1Jl
ZlB0ck5hdGl2ZUFycmF5PFRlc3RFdmVudFRhcmdldCwgSlNUZXN0RXZlbnRUYXJnZXQ+KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVk
ZShXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDggKzE3NywxMiBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAs
IE5QT2JqZWN0KiBvCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNW
YWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgRXhl
Y1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2Jq
ZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIAogICAgICAgICAv
LyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBv
YmotPmltcDsKQEAgLTE5Myw3ICsxOTcsNyBAQCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAs
IE5QT2JqZWN0KiBvCiAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQg
b2YgdGhlIGZ1bmN0aW9uIGNhbGwuCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOyAgICAg
ICAgCiAgICAgfQogCkBAIC0yMjUsOCArMjI5LDEzIEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5w
cCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+
cm9vdE9iamVjdDsKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBv
YmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0
cmluZygpKSk7CiAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBj
YWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC0yNDAsNyArMjQ5
LDcgQEAgYm9vbCBfTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdCogbywgTgogCiAgICAgICAg
IC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgog
ICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjY5LDE4
IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUFMKICAgICAgICAgaWYg
KCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2
KHMpOwogICAgICAgICAKLSAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVh
dGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShz
Y3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFs
dWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpK
U1ZhbHVlKCkpOwogCiAgICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVy
blZhbHVlLCB2YXJpYW50KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC0yODQsMTAgKzI5NywxNCBAQCBib29sIF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVj
dCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8g
Z2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElk
ZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1l
KTsKICAgICAgICAgCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBK
U1ZhbHVlIHJlc3VsdDsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4
ZWMsIGktPnN0cmluZygpKSk7CkBAIC0yOTUsNyArMzEyLDcgQEAgYm9vbCBfTlBOX0dldFByb3Bl
cnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdl
dChleGVjLCBpLT5udW1iZXIoKSk7CiAKICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQo
ZXhlYywgcmVzdWx0LCB2YXJpYW50KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0zMTgsOCArMzM1LDEyIEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5Q
T2JqZWN0KiBvLCAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBz
dGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKIAogICAgICAgICBpZiAo
aS0+aXNTdHJpbmcoKSkgewpAQCAtMzI3LDcgKzM0OCw3IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0
eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgp
LT5wdXQob2JqLT5pbXAsIGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGkt
PnN0cmluZygpKSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCwgcm9vdE9i
amVjdCksIHNsb3QpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRo
b2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iai0+aW1wLCBleGVjLCBpLT5udW1iZXIoKSwgY29udmVy
dE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFyaWFudCwgcm9vdE9iamVjdCksIGZhbHNlKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zNDYsMjcgKzM2NywzMiBA
QCBib29sIF9OUE5fUmVtb3ZlUHJvcGVydHkoTlBQLCBOUE9iamVjdCogCiAgICAgICAgIGlmICgh
cm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9i
amVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0
YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaS0+
aXNTdHJpbmcoKSkgewogICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkoZXhl
YywgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKSkgewotICAg
ICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIW9iai0+aW1wLT5o
YXNQcm9wZXJ0eShleGVjLCBpLT5udW1iZXIoKSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3Bl
cnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5z
dHJpbmcoKSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFi
bGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iai0+aW1wLCBleGVjLCBpLT5udW1iZXIoKSk7
CiAKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKQEAgLTM4MSwxNyArNDA3LDIxIEBAIGJvb2wgX05QTl9IYXNQcm9wZXJ0eShOUFAsIE5QT2Jq
ZWN0KiBvLCAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
SWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5h
bWUpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlz
U3RyaW5nKCkpIHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhhc1Byb3Bl
cnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7
Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0K
IAogICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpLT5u
dW1iZXIoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00
MTQsMTAgKzQ0NCwxNCBAQCBib29sIF9OUE5fSGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5Q
CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU1ZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4
ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKQEAg
LTQ0Myw4ICs0NzcsMTIgQEAgYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBO
UAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9w
ZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwogCiAgICAgICAgIG9i
ai0+aW1wLT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iai0+aW1wLCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC00NTgsNyArNDk2LDcgQEAgYm9v
bCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICAqaWRlbnRpZmll
ciA9IGlkZW50aWZpZXJzOwogICAgICAgICAqY291bnQgPSBzaXplOwogCi0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTQ3OSw5ICs1MTcsMTMgQEAgYm9vbCBf
TlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBjbwogICAgICAgICBSb290T2JqZWN0KiBy
b290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0OwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwg
IXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAg
ICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisK
KyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBjb25zdHJ1Y3RvciBvYmplY3QuCiAgICAgICAg
IEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmotPmltcDsKQEAgLTQ5Niw3ICs1MzgsNyBAQCBib29s
IF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmplY3QqIG8sIGNvCiAgICAgICAgIAogICAgICAgICAv
LyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KICAgICAgICAgY29udmVydFZhbHVlVG9O
UFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0
YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5j
ZS5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNCArNjgsMTMgQEAgdm9pZCBDSW5zdGFu
Y2U6OnNldEdsb2JhbEV4Y2VwdGlvbihTdHJpbgogCiB2b2lkIENJbnN0YW5jZTo6bW92ZUdsb2Jh
bEV4Y2VwdGlvblRvRXhlY1N0YXRlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQog
ICAgIGlmIChnbG9iYWxFeGNlcHRpb25TdHJpbmcoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBnbG9iYWxFeGNlcHRpb25TdHJp
bmcoKSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2Ny
aXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dl
YlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYkNvcmUvYnJp
ZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3
IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZUludGVybmFsLmg+CiAjaW1wb3J0IDxpbnRlcnByZXRl
ci9DYWxsRnJhbWUuaD4KKyNpbXBvcnQgPHJ1bnRpbWUvQ2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8
cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4KQEAgLTEyOSw4ICsxMzAs
MTAgQEAgc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdAogCiBzdGF0aWMg
dm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQzo6
RXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTMzNCw5
ICszMzcsMTIgQEAgLSAoaWQpY2FsbFdlYlNjcmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gTG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0Lgot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKKyAgICBVTlVTRURfUEFSQU0oc2NvcGUpOwogCiAgICAgSlNDOjpKU1Zh
bHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0tPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIFN0cmluZyhuYW1lKSkpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMzY5
LDEwICszNzUsMTIgQEAgLSAoaWQpZXZhbHVhdGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQog
ICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKICAgICAKICAgICBK
U0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnByb2ZpbGVk
RXZhbHVhdGUoZXhlYywgSlNDOjpQcm9maWxpbmdSZWFzb246Ok90aGVyLCBtYWtlU291cmNlKFN0
cmluZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVlKCkpOwogCkBAIC0zODYsMTcgKzM5NCwxOSBAQCAt
ICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBmb3JLZXk6KE5TU3RyCiAgICAgaWYgKCFbc2VsZiBf
aXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0g
W3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFT
U0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KFtzZWxmIF9p
bXBdKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QpOwogICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCBTdHJpbmcoa2V5KSksIGNvbnZlcnRPYmpjVmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2Jq
Y09iamVjdFR5cGUsIFtzZWxmIF9yb290T2JqZWN0XSksIHNsb3QpOwogCi0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
ewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQog
fQogCkBAIC00MDUsMjIgKzQxNSwyNSBAQCAtIChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilr
ZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotCiAg
ICAgaWQgcmVzdWx0T2JqOwogICAgIHsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2Vs
ZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgICAgICBhdXRvJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKwogICAgICAgICAvLyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBl
bnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8v
IFtzdXBlciB2YWx1ZUZvcktleTprZXldIHdoaWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBh
bmQgYnlwYXNzIHRoZSBKU0xvY2sgZGVzdHJ1Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUg
bG9jayBwZXJtYW5lbnRseSBoZWxkCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwot
ICAgICAgICAKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworCisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVj
ID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJl
c3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCBTdHJpbmcoa2V5KSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAg
ICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIHJl
c3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3Vs
dCBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0Oltz
ZWxmIF9yb290T2JqZWN0XV07CkBAIC00MzcsMTUgKzQ1MCwxNyBAQCAtICh2b2lkKXJlbW92ZVdl
YlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3Rd
LT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1l
dGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KFtzZWxmIF9pbXBdLCBleGVjLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhrZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAg
ICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiB9CiAKQEAg
LTQ1NCwxNSArNDY5LDE3IEBAIC0gKEJPT0wpaGFzV2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWtl
eQogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBOTzsKIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1Byb3Bl
cnR5KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKIAot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC00OTAsMTYgKzUwNywxOCBAQCAt
IChpZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbmVkKWluCiAgICAgaWYgKCFbc2VsZiBf
aXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9
IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwog
ICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsK
IAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwog
ICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIGlk
IHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJl
c3VsdCBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0
OltzZWxmIF9yb290T2JqZWN0XV07CkBAIC01MTIsMTUgKzUzMSwxNyBAQCAtICh2b2lkKXNldFdl
YlNjcmlwdFZhbHVlQXRJbmRleDoodW5zaWduCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0
XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RP
YmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmpl
Y3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0t
Pm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgoW3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252
ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBf
cm9vdE9iamVjdF0pLCBmYWxzZSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25QYXJzZXIuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNiArNjAsOSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlBU0NJSVdpdGhOb1VwcGVyCiAg
ICAgCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhlY1N0YXRlJiBleGVj
LCBjb25zdCBKU09iamVjdCogYXJyYXlPYmplY3QsIFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCiB7
CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCh2ZWN0b3IuaXNFbXB0eSgpKTsKICAgICBpZiAoIWFy
cmF5T2JqZWN0IHx8ICFpc0pTQXJyYXkoYXJyYXlPYmplY3QpKQogICAgICAgICByZXR1cm4gQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CkBAIC02OCw3ICs3MSw3
IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0RG9tYWluTGlzdChFeGUKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSBhcnJheS0+Z2V0
SW5kZXgoJmV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFs
dWUuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZS5p
c1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNP
TkludmFsaWREb21haW5MaXN0OwogICAgICAgICAKICAgICAgICAgLy8gRG9tYWlucyBzaG91bGQg
YmUgcHVueWNvZGUgZW5jb2RlZCBsb3dlciBjYXNlLgpAQCAtODQsMTEgKzg3LDE0IEBAIHN0YXRp
YyBzdGQ6OmVycm9yX2NvZGUgZ2V0RG9tYWluTGlzdChFeGUKIAogc3RhdGljIHN0ZDo6ZXJyb3Jf
Y29kZSBnZXRUeXBlRmxhZ3MoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiB0eXBlVmFs
dWUsIFJlc291cmNlRmxhZ3MmIGZsYWdzLCB1aW50MTZfdCAoKnN0cmluZ1RvVHlwZSkoY29uc3Qg
U3RyaW5nJikpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdHlwZVZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBjb25zdCBKU09iamVjdCogb2JqZWN0ID0gdHlw
ZVZhbHVlLnRvT2JqZWN0KCZleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMuaGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KG9i
amVjdCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
VHJpZ2dlckZsYWdzQXJyYXk7CiAKQEAgLTk3LDcgKzEwMyw3IEBAIHN0YXRpYyBzdGQ6OmVycm9y
X2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOwotICAg
ICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFsdWUpCisgICAgICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVHJpZ2dlckZsYWdzQXJyYXk7CiAgICAgICAg
IAogICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTEx
MywxMiArMTE5LDE1IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMK
ICAgICAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1N0YXRlJiBleGVj
LCBjb25zdCBKU09iamVjdCYgcnVsZU9iamVjdCwgVHJpZ2dlciYgdHJpZ2dlcikKIHsKKyAgICBW
TSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCiAgICAgY29uc3QgSlNWYWx1ZSB0cmlnZ2VyT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ0cmlnZ2VyIikpOwotICAgIGlm
ICghdHJpZ2dlck9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0
LmlzT2JqZWN0KCkpCisgICAgaWYgKCF0cmlnZ2VyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigp
IHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlcjsKICAgICAKICAgICBjb25zdCBKU1ZhbHVl
IHVybEZpbHRlck9iamVjdCA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlciIpKTsKLSAgICBpZiAoIXVybEZpbHRlck9iamVj
dCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkK
KyAgICBpZiAoIXVybEZpbHRlck9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdXJsRmls
dGVyT2JqZWN0LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05JbnZhbGlkVVJMRmlsdGVySW5UcmlnZ2VyOwogCiAgICAgU3RyaW5nIHVybEZpbHRl
ciA9IHVybEZpbHRlck9iamVjdC50b1dURlN0cmluZygmZXhlYyk7CkBAIC0xMjgsMTEgKzEzNywx
MSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgdHJpZ2dl
ci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAKICAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNh
c2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZleGVjLCAidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZSIpKTsKLSAgICBpZiAodXJsRmls
dGVyQ2FzZVZhbHVlICYmICFleGVjLmhhZEV4Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VWYWx1
ZS5pc0Jvb2xlYW4oKSkKKyAgICBpZiAodXJsRmlsdGVyQ2FzZVZhbHVlICYmICFzY29wZS5leGNl
cHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHRyaWdn
ZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZlID0gdXJsRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVh
bigmZXhlYyk7CiAKICAgICBjb25zdCBKU1ZhbHVlIHJlc291cmNlVHlwZVZhbHVlID0gdHJpZ2dl
ck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJyZXNvdXJj
ZS10eXBlIikpOwotICAgIGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVW
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSAmJiByZXNvdXJj
ZVR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBn
ZXRUeXBlRmxhZ3MoZXhlYywgcmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRS
ZXNvdXJjZVR5cGUpOwogICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCiAgICAgICAgICAgICBy
ZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0xNDAsNyArMTQ5LDcgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCiAgICAgY29uc3QgSlNWYWx1
ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJsb2FkLXR5cGUiKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2VwdGlv
bigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0
aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIGF1dG8gdHlwZUZs
YWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgbG9hZFR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFn
cywgcmVhZExvYWRUeXBlKTsKICAgICAgICAgaWYgKHR5cGVGbGFnc0Vycm9yKQogICAgICAgICAg
ICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9yOwpAQCAtMTQ4LDcgKzE1Nyw3IEBAIHN0YXRpYyBzdGQ6
OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRl
bnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJheTsKIAogICAgIGNvbnN0IEpT
VmFsdWUgaWZEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9u
KCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkg
JiYgaWZEb21haW4uaXNPYmplY3QoKSkgewogICAgICAgICBhdXRvIGlmRG9tYWluRXJyb3IgPSBn
ZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KGlmRG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsK
ICAgICAgICAgaWYgKGlmRG9tYWluRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gaWZEb21haW5F
cnJvcjsKQEAgLTE2MCw3ICsxNjksNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmln
Z2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZh
bGlkRG9tYWluTGlzdDsKICAgICAKICAgICBjb25zdCBKU1ZhbHVlIHVubGVzc0RvbWFpbiA9IHRy
aWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidW5s
ZXNzLWRvbWFpbiIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9t
YWluLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIHVubGVzc0Rv
bWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAgIGlmICh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiAh
PSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5sZXNzQW5kSWZEb21haW47CiAgICAgICAgIGF1dG8g
dW5sZXNzRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0KHVubGVzc0Rv
bWFpbiksIHRyaWdnZXIuZG9tYWlucyk7CkBAIC0xODYsMTMgKzE5NSwxNiBAQCBzdGF0aWMgYm9v
bCBpc1ZhbGlkU2VsZWN0b3IoY29uc3QgU3RyaW5nCiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUg
bG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBB
Y3Rpb24mIGFjdGlvbiwgYm9vbCYgdmFsaWRTZWxlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBleGVj
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
dmFsaWRTZWxlY3RvciA9IHRydWU7CiAgICAgY29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBy
dWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImFjdGlv
biIpKTsKLSAgICBpZiAoIWFjdGlvbk9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFh
Y3Rpb25PYmplY3QuaXNPYmplY3QoKSkKKyAgICBpZiAoIWFjdGlvbk9iamVjdCB8fCBzY29wZS5l
eGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uOwogCiAgICAgY29uc3QgSlNW
YWx1ZSB0eXBlT2JqZWN0ID0gYWN0aW9uT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmZXhlYywgInR5cGUiKSk7Ci0gICAgaWYgKCF0eXBlT2JqZWN0IHx8IGV4ZWMuaGFk
RXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKKyAgICBpZiAoIXR5cGVPYmpl
Y3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBlOwog
CiAgICAgU3RyaW5nIGFjdGlvblR5cGUgPSB0eXBlT2JqZWN0LnRvV1RGU3RyaW5nKCZleGVjKTsK
QEAgLTIwNSw3ICsyMTcsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRBY3Rpb24oRXhl
Y1N0CiAgICAgICAgIGFjdGlvbiA9IEFjdGlvblR5cGU6OkJsb2NrQ29va2llczsKICAgICBlbHNl
IGlmIChhY3Rpb25UeXBlID09ICJjc3MtZGlzcGxheS1ub25lIikgewogICAgICAgICBKU1ZhbHVl
IHNlbGVjdG9yID0gYWN0aW9uT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZygmZXhlYywgInNlbGVjdG9yIikpOwotICAgICAgICBpZiAoIXNlbGVjdG9yIHx8IGV4ZWMuaGFk
RXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlzU3RyaW5nKCkpCisgICAgICAgIGlmICghc2VsZWN0
b3IgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlzU3RyaW5nKCkpCiAgICAgICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZENTU0Rpc3BsYXlO
b25lQWN0aW9uVHlwZTsKIAogICAgICAgICBTdHJpbmcgcyA9IHNlbGVjdG9yLnRvV1RGU3RyaW5n
KCZleGVjKTsKQEAgLTI0MywxNyArMjU1LDIwIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9h
ZFJ1bGUoRXhlY1N0YXQKIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVz
KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25SdWxlPiYgcnVsZUxpc3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEZJWE1FOiBKU09O
UGFyc2Ugc2hvdWxkIHJlcXVpcmUgY2FsbGJhY2tzIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgog
ICAgIGNvbnN0IEpTVmFsdWUgZGVjb2RlZFJ1bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7
CiAKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKQorICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSB8fCAhZGVjb2RlZFJ1bGVzKQogICAgICAgICByZXR1cm4gQ29u
dGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZDsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVz
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05U
b3BMZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0OwogCiAgICAgY29uc3QgSlNPYmplY3QqIHRvcExl
dmVsT2JqZWN0ID0gZGVjb2RlZFJ1bGVzLnRvT2JqZWN0KCZleGVjKTsKLSAgICBpZiAoIXRvcExl
dmVsT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCF0b3BMZXZlbE9iamVj
dCB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3Q7CiAgICAgCiAgICAgaWYgKCFp
c0pTQXJyYXkodG9wTGV2ZWxPYmplY3QpKQpAQCAtMjY5LDExICsyODQsMTEgQEAgc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVzKAogICAgICAgICByZXR1cm4gQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OVG9vTWFueVJ1bGVzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0gdG9wTGV2
ZWxBcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRp
b24oKSB8fCAhdmFsdWUpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUp
CiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9i
amVjdEluVG9wTGV2ZWxBcnJheTsKIAogICAgICAgICBjb25zdCBKU09iamVjdCogcnVsZU9iamVj
dCA9IHZhbHVlLnRvT2JqZWN0KCZleGVjKTsKLSAgICAgICAgaWYgKCFydWxlT2JqZWN0IHx8IGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghcnVsZU9iamVjdCB8fCBzY29wZS5leGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkUnVsZTsKIAogICAgICAgICBhdXRvIGVycm9yID0gbG9hZFJ1bGUoZXhlYywgKnJ1bGVP
YmplY3QsIGxvY2FsUnVsZUxpc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDU0ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAyLDYgKzQwMDIsOCBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZVRleHRUcmFjCiAKIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEhUTUxNZWRpYUVsZW1lbnQmIG1lZGlhKQogeworICAgIEpT
Qzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8gbWVkaWFKU1dyYXBwZXIgPSB0b0pTKCZleGVjLCAm
Z2xvYmFsT2JqZWN0LCBtZWRpYSk7CiAgICAgCiAgICAgLy8gUmV0cmlldmUgdGhlIGNvbnRyb2xs
ZXIgdGhyb3VnaCB0aGUgSlMgb2JqZWN0IGdyYXBoCkBAIC00MDA5LDE4ICs0MDExLDE4IEBAIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlMKICAgICBpZiAoIW1lZGlhSlNX
cmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKICAgICAKLSAgICBK
U0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZleGVjLnZtKCksICJjb250cm9sc0hvc3QiKTsKKyAgICBKU0M6OklkZW50aWZpZXIgY29udHJv
bHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xzSG9zdCIp
OwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sc0hvc3RKU1dyYXBwZXIgPSBtZWRpYUpTV3JhcHBl
ck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sc0hvc3QpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwogCiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbHNIb3N0SlNX
cmFwcGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9s
c0hvc3RKU1dyYXBwZXIpOwogICAgIGlmICghY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0KQog
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250
cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRy
b2xsZXIiKTsKKyAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xsZXIiKTsKICAgICBKU0M6OkpTVmFsdWUgY29u
dHJvbGxlckpTV3JhcHBlciA9IGNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdC0+Z2V0KCZleGVj
LCBjb250cm9sbGVySUQpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwogCiAgICAgcmV0dXJuIGNvbnRyb2xsZXJKU1dyYXBwZXI7CkBAIC00MDU3LDggKzQwNTksMTAg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVDYXB0aW9uQ29udAogCiAgICAgU2NyaXB0
Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0
KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsK
KyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNv
bnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAq
dGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IEpTQzo6anNEeW5h
bWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY29udHJvbGxlclZhbHVlKTsKQEAgLTQwODMsNyArNDA4
Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2FwdGlvbkNvbnQKIAogICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbm9Bcmd1bWVudHM7CiAgICAgSlNDOjpjYWxsKGV4ZWMs
IG1ldGhvZE9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBub0Fy
Z3VtZW50cyk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogCiAgICAgbV9oYXZlU2V0VXBDYXB0aW9uQ29udGFpbmVyID0gdHJ1ZTsKICNl
bmRpZgpAQCAtNjYwMyw4ICs2NjA3LDEwIEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJl
TWVkaWFDb250cm8KICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gZW5zdXJlSXNvbGF0ZWRX
b3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVu
dCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xv
YmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAog
ICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVDb250cm9scyIpKTsKICAg
ICBpZiAoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0aW9uKCkpCkBAIC02NjE3LDggKzY2MjMsOCBAQCBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvCiAgICAgVVJMIHNjcmlwdFVS
TDsKICNlbmRpZgogICAgIHNjcmlwdENvbnRyb2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNv
dXJjZUNvZGUobWVkaWFDb250cm9sc1NjcmlwdCwgc2NyaXB0VVJMKSwgd29ybGQpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjY3
Niw4ICs2NjgyLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gK
IAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZy
YW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBK
U0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2Jq
ZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
SlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIC8v
IFRoZSBtZWRpYSBjb250cm9scyBzY3JpcHQgbXVzdCBwcm92aWRlIGEgbWV0aG9kIHdpdGggdGhl
IGZvbGxvd2luZyBkZXRhaWxzLgogICAgIC8vIE5hbWU6IGNyZWF0ZUNvbnRyb2xzCkBAIC02NzA0
LDIxICs2NzEyLDIxIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gK
ICAgICBhcmdMaXN0LmFwcGVuZChtZWRpYUNvbnRyb2xzSG9zdEpTV3JhcHBlcik7CiAKICAgICBK
U0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0g
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxUeXBl
IGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9u
LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBKU0M6
OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBh
cmdMaXN0KTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgSlNDOjpKU09iamVjdCogY29udHJvbGxlck9iamVjdCA9IEpTQzo6anNE
eW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY29udHJvbGxlclZhbHVlKTsKICAgICBpZiAoIWNv
bnRyb2xsZXJPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENvbm5lY3QgdGhlIE1l
ZGlhLCBNZWRpYUNvbnRyb2xsZXJIb3N0LCBhbmQgQ29udHJvbGxlciBzbyB0aGUgR0Mga25vd3Mg
YWJvdXQgdGhlaXIgcmVsYXRpb25zaGlwCiAgICAgSlNDOjpKU09iamVjdCogbWVkaWFKU1dyYXBw
ZXJPYmplY3QgPSBtZWRpYUpTV3JhcHBlci50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAg
ICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLT52bSgpLCAiY29udHJvbHNIb3N0Iik7CiAgICAgCiAgICAgQVNTRVJUKCFtZWRp
YUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgY29udHJvbHNIb3N0KSk7CkBAIC02
NzM4LDggKzY3NDYsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNo
CiAgICAgdXBkYXRlUGFnZVNjYWxlRmFjdG9ySlNQcm9wZXJ0eSgpOwogICAgIHVwZGF0ZVVzZXNM
VFJVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uSlNQcm9wZXJ0eSgpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TWVkaWFDb250cm9sc0Rl
cGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wgZGVwZW5kc09uUGFnZVNjYWxlKQpAQCAtNjc3NCwy
MSArNjc4MiwyMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvCiAg
ICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGVuc3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBT
Y3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5z
Y3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3Js
ZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFs
dWUgY29udHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmpl
Y3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gY29udHJv
bGxlclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFuZGxlUHJlc2VudGF0
aW9uTW9kZUNoYW5nZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgfHwgZnVuY3Rp
b25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9P
YmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAg
ICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2Fs
bFR5cGU6Ok5vbmUpCkBAIC02ODE1LDIxICs2ODI1LDIzIEBAIFN0cmluZyBIVE1MTWVkaWFFbGVt
ZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRy
b2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlw
dENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9s
bGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmpl
Y3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7CiAK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBKU0M6OkpT
VmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGNvbnRyb2xsZXJPYmplY3QtPmdldChleGVjLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImdldEN1cnJlbnRDb250cm9sc1N0YXR1cyIpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rp
b25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVj
dChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpT
Qzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z0xpc3Q7CkBAIC02ODM4LDcgKzY4NTAsNyBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0
Q3VycmVudE1lZGlhCiAKICAgICBKU0M6OkpTVmFsdWUgb3V0cHV0VmFsdWUgPSBKU0M6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgY29udHJvbGxlck9iamVjdCwgYXJn
TGlzdCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZXR1cm4gb3V0cHV0VmFsdWUuZ2V0U3RyaW5nKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDU0ODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTIsOSArMzkyLDExIEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6ZGlkQWRkVXNlckEKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIg
PSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRy
b2xsZXIuZ2xvYmFsT2JqZWN0KGlzb2xhdGVkV29ybGQpKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsK
ICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcm9vdCkpOwpAQCAt
NDA4LDggKzQxMCw4IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckEK
ICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUgSlMgZmlsZSBwcm92aWRlcyBhIGNyZWF0ZU92ZXJs
YXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRpdGxlKSBmdW5jdGlvbi4KICAgICBKU0M6OkpTT2Jq
ZWN0KiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVPdmVybGF5IikpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlm
ICghb3ZlcmxheSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CkBAIC00MTgsNyArNDIwLDcgQEAg
dm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpkaWRBZGRVc2VyQQogICAgICAgICByZXR1cm47
CiAKICAgICBKU0M6OmNhbGwoZXhlYywgb3ZlcmxheSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9i
YWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojpw
YXJ0T2ZTbmFwc2hvdE92ZXJsYXkoY29uc3QgTm9kZSogbm9kZSkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2Vw
dGlvbiBjaGVja3MgdG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjpoYXNNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmdldFByb3BlcnR5KToKKyAgICAgICAgKFdl
YktpdDo6TlBKU09iamVjdDo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2Jq
ZWN0OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmNvbnN0
cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omludm9rZSk6CisKIDIwMTYtMDkt
MDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdW1dheWxhbmRdIGV2aW5jZS1icm93c2VyLXBsdWdpbiBwcmV2ZW50cyB2aWV3aW5nIFBE
RnMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpT
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDEwICsxMDEsMTIgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNNZXRob2Qo
TlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fanNPYmplY3QtPmdldChleGVjLCBp
ZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCkpOyAgICAKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAK
ICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICByZXR1cm4gZ2V0Q2FsbERhdGEodmFsdWUsIGNh
bGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZTsKQEAgLTE0Nyw3ICsxNDksOSBAQCBib29sIE5QSlNP
YmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYm9vbCByZXN1bHQ7CiAgICAg
aWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCkBAIC0xNTUsNyArMTU5LDcgQEAgYm9vbCBO
UEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGVsc2UKICAgICAgICAgcmVz
dWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVy
KCkpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE2Nyw3ICsxNzEsMTAgQEAgYm9v
bCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSBqc1Jlc3Vs
dDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKICAgICAgICAganNSZXN1bHQg
PSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMs
IGlkZW50aWZpZXJSZXApKTsKQEAgLTE3NSw3ICsxODIsNyBAQCBib29sIE5QSlNPYmplY3Q6Omdl
dFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0
KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICAKICAgICBtX29iamVjdE1hcC0+
Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCBqc1Jlc3VsdCwgKnJlc3VsdCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xODcsNyArMTk0LDkgQEAgYm9vbCBOUEpTT2JqZWN0Ojpz
ZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IG1fb2JqZWN0
TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMsIG1fb2JqZWN0TWFwLT5nbG9iYWxP
YmplY3QoKSwgKnZhbHVlKTsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewpA
QCAtMTk1LDcgKzIwNCw3IEBAIGJvb2wgTlBKU09iamVjdDo6c2V0UHJvcGVydHkoTlBJZGVudGlm
aWUKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG1fanNPYmplY3QuZ2V0
KCksIGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVw
KSwganNWYWx1ZSwgc2xvdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fanNPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPnB1dEJ5SW5kZXgobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRpZmllclJl
cC0+bnVtYmVyKCksIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0yMDgsMjYgKzIxNywyOSBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5Q
SWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkgewogICAgICAgICBJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRl
bnRpZmllclJlcCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3Bl
cnR5KGV4ZWMsIGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9qc09iamVjdC0+bWV0
aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkobV9qc09iamVjdC5nZXQoKSwgZXhlYywgaWRlbnRp
Zmllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0
eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpIHsKLSAgICAgICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgbV9qc09iamVjdC0+
bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG1fanNPYmplY3QuZ2V0KCksIGV4
ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICB9CiAKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTI1OSw3ICsyNzEsOSBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25z
dCBOUFZhcmlhCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0
VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0YShtX2pzT2JqZWN0LmdldCgpLCBj
b25zdHJ1Y3REYXRhKTsKQEAgLTI3NSwxMyArMjg5LDE2IEBAIGJvb2wgTlBKU09iamVjdDo6Y29u
c3RydWN0KGNvbnN0IE5QVmFyaWEKICAgICAKICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhl
IG5ldyBvYmplY3QuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQo
ZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5Q
SlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50
MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5v
bmUpCkBAIC0yOTYsNyArMzEzLDcgQEAgYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoRXhlY1N0YXRl
KiBleGVjLAogCiAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1
bmN0aW9uIGNhbGwuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQo
ZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE2LTA5LTA2ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQg
Zm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hT
Y29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UpOgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZURlZmF1bHQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cnVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0UHJvcGVydHkp
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldFByb3Bl
cnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1v
dmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6Omhhc01ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6ZW51bWVyYXRlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisKIDIwMTYtMDktMDUgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vcmUgYmluZGluZ3MgaW1wcm92ZW1lbnRzLCBwYXJ0
aWN1bGFybHkgdGhpbmdzIG5vdCBuZWVkZWQgZm9yIEphdmFTY3JpcHQgYmluZGluZ3MKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5t
bQkod29ya2luZyBjb3B5KQpAQCAtODg1LDggKzg4NSwxMSBAQCBib29sIE5ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2socGx1Z2luV29ybGQoKS52bSgpKTsKLSAgICBT
dHJvbmc8SlNHbG9iYWxPYmplY3Q+IGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpLnZtKCksIGZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOworICAgIFZNJiB2bSA9
IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgU3Ryb25nPEpTR2xvYmFs
T2JqZWN0PiBnbG9iYWxPYmplY3Qodm0sIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSkpOwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxv
d1BvcHVwcyA/IE9wdGlvbmFsPFByb2Nlc3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5n
VXNlckdlc3R1cmUpIDogTnVsbG9wdCk7CkBAIC04OTQsNyArODk3LDcgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpl
dmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdCkpOwogICAgIAogICAgIG1hcnNoYWxWYWx1
ZShleGVjLCByZXN1bHQsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC05MTUsOSArOTE4LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjppbnZva2UKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2Vi
RnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1Zh
bHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlv
biwgY2FsbERhdGEpOwpAQCAtOTMwLDcgKzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjppbnZva2UKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBmdW5jdGlv
biwgY2FsbFR5cGUsIGNhbGxEYXRhLCBvYmplY3QsIGFyZ0xpc3QpOwogICAgICAgICAKICAgICBt
YXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC05NDgsOSArOTU0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdp
blZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsg
ICAgCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmpl
Y3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERhdGEpOwogICAgIGlm
IChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKQEAgLTk2Miw3ICs5NzEsNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNh
bGwoZXhlYywgb2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAg
ICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5n
dGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTgwLDkgKzk4OSwxMiBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3Ry
dWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1
Y3REYXRhKG9iamVjdCwgY29uc3RydWN0RGF0YSk7CkBAIC05OTUsNyArMTAwNyw3IEBAIGJvb2wg
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpjb25zdHIKICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNDOjpjb25zdHJ1Y3QoZXhlYywgb2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRh
LCBhcmdMaXN0KTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDEzLDEzICsx
MDI1LDE2IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICBG
cmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5X
b3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1l
LT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMs
IHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
ICAgICAKQEAgLTEwMzQsMTMgKzEwNDksMTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmdldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJG
cmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwor
ICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhl
Y1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgp
KS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBK
U1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAg
ICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0g
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMDU4LDE1ICsxMDc2LDE4IEBAIGJvb2wgTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtt
X3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhl
eGVjKTsgICAgCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhlYywgdmFs
dWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsK
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOwogICAgIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA4NCwx
NCArMTEwNSwxNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAg
ICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1
Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBm
cmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFsdWUgdmFs
dWUgPSBkZW1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBmYWxzZSk7CiAgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTEw
LDE1ICsxMTM0LDE4IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJv
cGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVy
dHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7ICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAgICAgCkBAIC0xMTM2LDE2ICsxMTYzLDE5IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5OjpyZW1vdmUKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2Vi
RnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisK
KyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQo
KSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAo
IW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTYzLDExICsxMTkzLDE1IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3Jl
KFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAgICBib29sIHJlc3VsdCA9IG9i
amVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOwotICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0xMTg1LDExICsxMjE5LDE1IEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpoYXNQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdp
blZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwotICAgIAorICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKICAgICByZXR1cm4gcmVzdWx0
OwogfQogICAgIApAQCAtMTIwNywxMSArMTI0NSwxNCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6aGFzTWV0CiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3
IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
SlNWYWx1ZSBmdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgbWV0aG9kTmFtZSk7Ci0gICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVy
biAhZnVuYy5pc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMjI5LDkgKzEyNzAsMTIgQEAgYm9vbCBO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogICAgIEZyYW1lKiBmcmFtZSA9IGNv
cmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2Jh
bE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOwogIAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5n
ZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlKCkpOwpAQCAtMTI1MSw3ICsxMjk1LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmVudW1lcgogCiAgICAgbWVtY3B5KHJlc3VsdERhdGEsIFtkYXRhIGJ5dGVzXSwgcmVz
dWx0TGVuZ3RoKTsKIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMjA1NDg1KQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTM2LDYgKzY5MzYsOSBA
QCAtIChCT09MKXNob3VsZENsb3NlCiAjaWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBOU0FwcGxl
RXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgTlNBcHBsZUV2ZW50RGVzY3Jp
cHRvciogYWVEZXNjID0gMDsKICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAg
cmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVhbjpqc1Zh
bHVlLmFzQm9vbGVhbigpXTsKQEAgLTY5NzYsOCArNjk3OSw4IEBAIHN0YXRpYyBOU0FwcGxlRXZl
bnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBKU0M6OkpTVmFsdWUgcHJpbWl0aXZlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
IFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIG51bGxEZXNjcmlwdG9yXTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gYWVEZXNjRnJvbUpTVmFsdWUoZXhlYywgcHJpbWl0aXZlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQ4NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA5LTA2ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9y
Y2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hTY29w
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1
Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpOUE5fSW52b2tlKToKKwogMjAxNi0wOS0wMyAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3RyZWFtbGluZSBET01JbXBsZW1lbnRh
dGlvbiwgYW5kIG1vdmUgaXQgdG8gb3VyIG5ldyBET00gZXhjZXB0aW9uIHN5c3RlbQpJbmRleDog
U291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCShyZXZpc2lvbiAy
MDU0ODUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTAsMTQgKzIxMCwxOCBAQCBzdGF0aWMgYm9vbCBOUE5fRXZhbHVh
dGUoTlBQIGluc3RhbmNlLCBOCiAgICAgICAgIC8vIFBsdWdpblZpZXcsIHNvIHdlIGRlc3Ryb3kg
aXQgYXN5bmNocm9ub3VzbHkuCiAgICAgICAgIFBsdWdpblZpZXc6OmtlZXBBbGl2ZShpbnN0YW5j
ZSk7CiAKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpOworICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKToKKyAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0gSlNDOjpC
aW5kaW5nczo6Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKIAotICAgICAgICBKU0M6OkpTVmFs
dWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkp
OworICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMs
IG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAgICAgICAgIEpT
Qzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2
YXJpYW50KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNDcs
OCArMjUxLDEzIEBAIHN0YXRpYyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QKICAg
ICAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9i
amVjdDsKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9
IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKToKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBKU0M6
OkpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIEpTQzo6QmluZGluZ3M6Omlk
ZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIEpT
Qzo6Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBn
ZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtMjYyLDcgKzI3MSw3IEBAIHN0YXRp
YyBib29sIE5QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QKIAogICAgICAgICAvLyBDb252ZXJ0
IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAgICAgSlND
OjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVzdWx0
KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288036</attachid>
            <date>2016-09-06 12:21:04 -0700</date>
            <delta_ts>2016-09-07 14:20:55 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>847025</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxNSBA
QAorMjAxNi0wOS0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZpYSBU
aHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGF0J3MgbmV3PzoKKyAgICAgICAgMS4gQWxsIGNhbGxzIHRvIGNs
ZWFyRXhjZXB0aW9uKCkgbXVzdCBnbyB0aHJvdWdoIGEgQ2F0Y2hTY29wZS4KKyAgICAgICAgMi4g
QWxsIGNhbGxzIHRvIGdldCB0aGUgYW55IHBlbmRpbmcgZXhjZXB0aW9uIG11c3QgZ28gdGhyb3Vn
aCBUaHJvd1Njb3BlOjpleGNlcHRpb24oKQorICAgICAgICAgICBvciBDYXRjaFNjb3BlOjpleGNl
cHRpb24oKS4KKyAgICAgICAgMy4gVGhyb3dTY29wZSBhbmQgQ2F0Y2hTY29wZSBhcmUgbm93IHN1
Yi1jbGFzc2VzIG9mIEV4Y2VwdGlvblNjb3BlLiAgVGhpcyBpcyBuZWVkZWQKKyAgICAgICAgICAg
YmVjYXVzZSBUaHJvd1Njb3BlIGFsc28gbmVlZHMgdG8gYmUgYXdhcmUgb2YgQ2F0Y2hTY29wZXMg
dGhhdCBlbmNsb3NlIGl0LCBzbworICAgICAgICAgICBhcyB0byBiZSBhYmxlIHRvIGRldGVybWlu
ZSB3aGV0aGVyIGl0IG5lZWRzIHRvIHNpbXVsYXRlIGEgcmUtdGhyb3cgb3Igbm90LgorICAgICAg
ICA0LiBSZW5hbWVkIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pIHRvIEVOQUJMRShF
WENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKS4KKworICAgICAgICAqIEFQSS9BUElVdGlscy5o
OgorICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAg
KERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6CisgICAgICAgICogYmluZGlu
Z3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWU6OnRv
U3RyaW5nKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAgIChKU0M6
OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckNh
bGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdp
dGhTY29wZUV4dGVuc2lvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om9w
ZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAg
ICAgIChKU0M6OkhlYXA6OnZpc2l0RXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjpjcmVhdGVJbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL0pT
R2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6
OkpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVwb3J0QVBJRXhjZXB0aW9uKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwOgorICAgICAgICAo
SW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNp
b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6
OndlYWtNYXBFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlwdEhv
c3Q6OndlYWtTZXRFbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNJbmplY3RlZFNjcmlw
dEhvc3Q6Oml0ZXJhdG9yRW50cmllcyk6CisgICAgICAgICogaW5zcGVjdG9yL0pTSmF2YVNjcmlw
dENhbGxGcmFtZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSmF2YVNjcmlwdENhbGxGcmFt
ZTo6ZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2tGYWN0b3J5LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6ZXh0cmFjdFNvdXJj
ZUluZm9ybWF0aW9uRnJvbUV4Y2VwdGlvbik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FjaGVk
Q2FsbC5oOgorICAgICAgICAoSlNDOjpDYWNoZWRDYWxsOjpDYWNoZWRDYWxsKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9DYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpjbGVh
ckV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6ZXhjZXB0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpoYWRFeGNlcHRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6Omxhc3RFeGNlcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmNsZWFyTGFzdEV4Y2VwdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpldmFs
KToKKyAgICAgICAgKEpTQzo6c2l6ZU9mVmFyYXJncyk6CisgICAgICAgIChKU0M6Om5vdGlmeURl
YnVnZ2VyT2ZVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6dW53aW5kKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpwcmVwYXJlRm9yUmVwZWF0
Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6U3VzcGVuZEV4Y2VwdGlvblNj
b3BlOjpTdXNwZW5kRXhjZXB0aW9uU2NvcGUpOgorICAgICAgICAqIGludGVycHJldGVyL1NoYWRv
d0NoaWNrZW4uY3BwOgorICAgICAgICAoSlNDOjpTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0
YWNrKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkpJVENvZGU6
OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpT
Qzo6Z2VuZXJpY1Vud2luZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKFdURjo6
SW1wdXJlR2V0dGVyOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoR2xvYmFsT2JqZWN0
Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6bW9kdWxlTG9h
ZGVyRmV0Y2gpOgorICAgICAgICAoZnVuY3Rpb25DcmVhdGVFbGVtZW50KToKKyAgICAgICAgKGZ1
bmN0aW9uUnVuKToKKyAgICAgICAgKGZ1bmN0aW9uUnVuU3RyaW5nKToKKyAgICAgICAgKGZ1bmN0
aW9uTG9hZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRTdHJpbmcpOgorICAgICAgICAoZnVuY3Rp
b25SZWFkRmlsZSk6CisgICAgICAgIChmdW5jdGlvbkNoZWNrU3ludGF4KToKKyAgICAgICAgKGZ1
bmN0aW9uU2V0UmFuZG9tU2VlZCk6CisgICAgICAgIChmdW5jdGlvbkxvYWRNb2R1bGUpOgorICAg
ICAgICAoZnVuY3Rpb25DcmVhdGVCdWlsdGluKToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tNb2R1
bGVTeW50YXgpOgorICAgICAgICAoZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCk6CisgICAg
ICAgIChmdW5jdGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyk6CisgICAgICAgIChkdW1w
RXhjZXB0aW9uKToKKyAgICAgICAgKGNoZWNrVW5jYXVnaHRFeGNlcHRpb24pOgorICAgICAgICAo
cnVuV2l0aFNjcmlwdHMpOgorICAgICAgICAocnVuSW50ZXJhY3RpdmUpOgorICAgICAgICAqIGxs
aW50L0xMSW50RXhjZXB0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpyZXR1cm5Ub1Ro
cm93KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNhbGxUb1Rocm93KToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5dGVjb2RlU2VxdWVuY2U6OmFkZFNlcXVlbmNl
UHJvcGVydGllcyk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpDb21waWxhdGlvbjo6dG9KUyk6CisgICAgICAgICog
cHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpE
YXRhYmFzZTo6dG9KUyk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5j
cHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpPU1JFeGl0U2l0ZTo6dG9KUyk6CisgICAgICAg
ICogcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA6CisgICAgICAgIChKU0M6OlByb2Zp
bGVyOjpPcmlnaW5TdGFjazo6dG9KUyk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OnNwZWNpZXNDb25zdHJ1Y3RBcnJheSk6CisgICAgICAgIChK
U0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6dW5zaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5
UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6c2xvd0pvaW4pOgorICAgICAgICAoSlNDOjpmYXN0Sm9p
bik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9pbik6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNoKToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQ
cm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2UpOgorICAg
ICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJv
dG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSW5kZXhPZik6Cisg
ICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpt
b3ZlRWxlbWVudHMpOgorICAgICAgICAoSlNDOjpjb25jYXRBcHBlbmRPbmUpOgorICAgICAgICAo
SlNDOjphcnJheVByb3RvUHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHkpOgorICAgICAgICAqIHJ1bnRp
bWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aEJv
b2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpDYXRjaFNjb3BlOjpDYXRjaFNjb3BlKToKKyAgICAgICAgKEpTQzo6
Q2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2F0Y2hTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2F0Y2hTY29wZTo6Y2xlYXJFeGNlcHRpb24pOgorICAg
ICAgICAoSlNDOjpDYXRjaFNjb3BlOjpDYXRjaFNjb3BlKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAg
ICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93
UGF0aHM6Om9wSW4pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6aW50ZXJwcmV0ZXJUaHJvd0lu
Q2FsbGVyKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlND
OjpldmFsdWF0ZSk6CisgICAgICAgIChKU0M6OnJlamVjdFByb21pc2UpOgorICAgICAgICAoSlND
Ojpsb2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoSlNDOjpsb2FkTW9kdWxlKToKKyAg
ICAgICAgKiBydW50aW1lL0NvbnNvbGVPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjb25zb2xl
UHJvdG9GdW5jQXNzZXJ0KToKKyAgICAgICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Byb2ZpbGUp
OgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jUHJvZmlsZUVuZCk6CisgICAgICAgIChK
U0M6OmNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6Y29u
c29sZVByb3RvRnVuY1RpbWUpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jVGltZUVu
ZCk6CisgICAgICAgICogcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3REYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVBhcnNlKToKKyAgICAgICAgKiBy
dW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9Q
cmltaXRpdmVTeW1ib2wpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9KU09OKToKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRp
bWUvRXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OnNhbml0
aXplZFRvU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9F
eGNlcHRpb25FdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToK
KyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24u
aDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxv
Y2F0aW9uLmguCisgICAgICAgIChKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb246OkV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24pOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlTG9jYXRpb246OlRocm93
U2NvcGVMb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6RXhjZXB0aW9uU2NvcGUpOgorICAgICAgICAoSlND
OjpFeGNlcHRpb25TY29wZTo6fkV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6RXhjZXB0
aW9uU2NvcGU6OmxvZ0V2ZW50KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OmxvZ0V2
ZW50SGVhZGVyKToKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6dm0pOgorICAgICAgICAoSlNDOjpFeGNlcHRp
b25TY29wZTo6ZGVwdGgpOgorICAgICAgICAoSlNDOjpFeGNlcHRpb25TY29wZTo6ZXhjZXB0aW9u
KToKKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OkV4Y2VwdGlvblNjb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25z
dHJ1Y3RGdW5jdGlvblNraXBwaW5nRXZhbEVuYWJsZWRDaGVjayk6CisgICAgICAgICogcnVudGlt
ZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uUHJvdG9GdW5j
QmluZCk6CisgICAgICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAg
ICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Y2FsbEdldHRl
cik6CisgICAgICAgICogcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjppbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3RMb2cpOgorICAg
ICAgICAqIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkludGVy
bmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1l
L0ludGxDb2xsYXRvci5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6aW5pdGlhbGl6
ZUNvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yOjpjcmVhdGVDb2xsYXRvcik6
CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAg
KiBydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SW50bENvbGxhdG9yKToKKyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yQ29uc3RydWN0
b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxDb2xsYXRv
clByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRvckZ1bmNDb21wYXJlKToK
KyAgICAgICAgKEpTQzo6SW50bENvbGxhdG9yUHJvdG90eXBlR2V0dGVyQ29tcGFyZSk6CisgICAg
ICAgICogcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjp0b0Rh
dGVUaW1lT3B0aW9uc0FueURhdGUpOgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXQ6
OmluaXRpYWxpemVEYXRlVGltZUZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGltZUZv
cm1hdDo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0
Ojpmb3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsRGF0ZVRpbWVGb3JtYXQpOgorICAg
ICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVUaW1lKToK
KyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToK
KyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6
SW50bE51bWJlckZvcm1hdDo6Y3JlYXRlTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50
bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL0ludGxO
dW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEludGxO
dW1iZXJGb3JtYXQpOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3JG
dW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1lL0ludGxOdW1iZXJGb3Jt
YXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpJbnRsTnVtYmVyRm9ybWF0RnVuY0Zvcm1h
dE51bWJlcik6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXRQcm90b3R5cGVHZXR0ZXJG
b3JtYXQpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OmludGxCb29sZWFuT3B0aW9uKToKKyAgICAgICAgKEpTQzo6aW50bFN0cmluZ09wdGlvbik6Cisg
ICAgICAgIChKU0M6OmludGxOdW1iZXJPcHRpb24pOgorICAgICAgICAoSlNDOjpjYW5vbmljYWxp
emVMb2NhbGVMaXN0KToKKyAgICAgICAgKEpTQzo6c3VwcG9ydGVkTG9jYWxlcyk6CisgICAgICAg
ICogcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJ
bnRsSW5zdGFuY2VXaXRoV29ya2Fyb3VuZEZvckxlZ2FjeUludGxDb25zdHJ1Y3Rvcik6CisgICAg
ICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjppdGVy
YXRvck5leHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclN0ZXApOgorICAgICAgICAoSlNDOjpp
dGVyYXRvckNsb3NlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JGb3JJdGVyYWJsZSk6CisgICAg
ICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Zm9yRWFj
aEluSXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnBvcCk6CisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpjb3B5VG9Bcmd1bWVudHMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlC
dWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJvdG9GdW5jU2xpY2UpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNBcnJheUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Z2V0TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6dG9MZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoK
KyAgICAgICAgKEpTQzo6Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgIChK
U0M6OkpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJbmRleCk6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6dG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
ZXF1YWxTbG93Q2FzZUlubGluZSk6CisgICAgICAgICogcnVudGltZS9KU0RhdGFWaWV3UHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0RGF0YSk6CisgICAgICAgIChKU0M6OnNldERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVu
Y3Rpb246OnNldEZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlldy5oOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5Vmlldzo6c2V0
SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3RvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlW
aWV3RnJvbUl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJy
YXlWaWV3V2l0aEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBl
ZEFycmF5Vmlldyk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpzcGVjaWVzQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbik6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1ZGVzKToKKyAg
ICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5kZXhPZik6CisgICAg
ICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pvaW4pOgorICAgICAgICAo
SlNDOjpnZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAg
IChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY1NsaWNlKToKKyAgICAgICAgKEpT
Qzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJpdmF0ZUZ1bmNTdWJhcnJheUNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RF
bXB0eUFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXkpOgorICAgICAgICAoSlND
Ojpjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZCk6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Omdsb2JhbEZ1bmNFdmFsKToK
KyAgICAgICAgKiBydW50aW1lL0pTSm9iLmNwcDoKKyAgICAgICAgKEpTQzo6SlNKb2JNaWNyb3Rh
c2s6OnJ1bik6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1
bGVMb2FkZXI6OmZldGNoKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6CisgICAg
ICAgIChKU0M6OkpTTW9kdWxlUmVjb3JkOjppbnN0YW50aWF0ZURlY2xhcmF0aW9ucyk6CisgICAg
ICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6
OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OnN0cmluZ2lmeSk6Cisg
ICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjp0b0pTT04pOgorICAgICAgICAoSlNDOjpTdHJpbmdp
Zmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVy
OjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fs
ayk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1bmNQYXJzZSk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om9yZGluYXJ5U2V0U2xvdyk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGVXaXRoQ3ljbGVDaGVjayk6CisgICAgICAgIChK
U0M6OmNhbGxUb1ByaW1pdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om9y
ZGluYXJ5VG9QcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6dG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duTm9uSW5kZXhQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRHZW5lcmljUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRNZXRob2QpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OmNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpnZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFByb21p
c2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg6CisgICAg
ICAgIChKU0M6OnByb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lSXRl
cmF0b3I6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAg
KEpTQzo6aXNVbnNjb3BhYmxlKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpl
cXVhbFNsb3dDYXNlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmdKb2luZXI6OmpvaW4pOgorICAgICAgICAqIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+Ojpw
YXJzZSk6CisgICAgICAgICogcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdE1hcCk6CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAg
ICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0NsejMyKToKKyAgICAgICAgKEpTQzo6bWF0aFByb3Rv
RnVuY0h5cG90KToKKyAgICAgICAgKEpTQzo6bWF0aFByb3RvRnVuY0lNdWwpOgorICAgICAgICAq
IHJ1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxl
TG9hZGVyUHJvdG90eXBlUGFyc2VNb2R1bGUpOgorICAgICAgICAoSlNDOjptb2R1bGVMb2FkZXJQ
cm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJv
dG90eXBlTW9kdWxlRGVjbGFyYXRpb25JbnN0YW50aWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6
Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUv
TnVtYmVyQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoTnVtYmVy
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RPYmplY3QpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JT
ZXRQcm90b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3JzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRP
d25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRPd25Q
cm9wZXJ0eVN5bWJvbHMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvcktleXMpOgor
ICAgICAgICAoSlNDOjpvd25FbnVtZXJhYmxlUHJvcGVydHlLZXlzKToKKyAgICAgICAgKEpTQzo6
dG9Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckRl
ZmluZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6ZGVmaW5lUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yU2VhbCk6CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0
cnVjdG9yRnJlZXplKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZCk6
CisgICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9ySXNGcm96ZW4pOgorICAgICAgICAoSlND
OjpvYmplY3RDb25zdHJ1Y3RvcklzRXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6Om93blByb3Bl
cnR5S2V5cyk6CisgICAgICAgICogcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oOgorICAgICAg
ICAoSlNDOjpjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAg
KiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Om9iamVjdFByb3Rv
RnVuY0hhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jSXNQcm90
b3R5cGVPZik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlcik6Cisg
ICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlcik6CisgICAgICAgIChKU0M6
Om9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3Rv
RnVuY0xvb2t1cFNldHRlcik6CisgICAgICAgIChKU0M6Om9iamVjdFByb3RvRnVuY1Byb3BlcnR5
SXNFbnVtZXJhYmxlKToKKyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6Cisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3I6OnNsb3dHZXR0ZXJTZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
UHJveHlDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om1ha2VSZXZvY2FibGVQcm94eSk6
CisgICAgICAgICogcnVudGltZS9Qcm94eU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlByb3h5
T2JqZWN0Ojp0b1N0cmluZ05hbWUpOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJveHlHZXQpOgor
ICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUdldCk6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHZXRPd25Qcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQ
cm94eU9iamVjdDo6cGVyZm9ybVB1dCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwdXRC
eUluZGV4Q29tbW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAg
IChKU0M6OnBlcmZvcm1Qcm94eUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0
OjpwZXJmb3JtRGVsZXRlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1QcmV2
ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRl
bnNpYmxlKToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlO
YW1lcyk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKToK
KyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OnJlZmxlY3RPYmpl
Y3RDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0RGVmaW5lUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0R2V0KToKKyAgICAgICAgKEpTQzo6cmVmbGVj
dE9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OnJlZmxlY3RP
YmplY3RJc0V4dGVuc2libGUpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0UHJldmVudEV4
dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpyZWZsZWN0T2JqZWN0U2V0KToKKyAgICAgICAgKEpT
Qzo6cmVmbGVjdE9iamVjdFNldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6dG9GbGFncyk6CisgICAgICAgIChKU0M6
OnJlZ0V4cENyZWF0ZSk6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFJlZ0V4cCk6CisgICAgICAg
ICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oOgorICAgICAgICAoSlNDOjppc1JlZ0V4cCk6
CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjb2xs
ZWN0TWF0Y2hlcyk6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6bWF0Y2hHbG9iYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChKU0M6OmZsYWdzU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpyZWdFeHBQ
cm90b0dldHRlckZsYWdzKToKKyAgICAgICAgKEpTQzo6cmVnRXhwUHJvdG9GdW5jU2VhcmNoRmFz
dCk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgICog
cnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdFNldCk6
CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OnN0cmluZ0Zyb21Db2RlUG9pbnQpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXaXRoU3RyaW5n
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eSk6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdSZWdF
eHBTZWFyY2gpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25TdHJpbmdQcm90b0Z1bmNSZXBsYWNl
UmVnRXhwRW1wdHlTdHIpOgorICAgICAgICAoSlNDOjpyZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2gp
OgorICAgICAgICAoSlNDOjpyZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
UmVwbGFjZVVzaW5nUmVnRXhwKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jUmVwbGFj
ZVVzaW5nU3RyaW5nU2VhcmNoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQ29kZVBv
aW50QXQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChK
U0M6OnN0cmluZ1Byb3RvRnVuY1NwbGl0RmFzdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1N1YnN0cik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1YnN0cmluZyk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOgorICAgICAgICAoSlND
Ojp0b0xvY2FsZUNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNCaWcpOgorICAg
ICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTbWFsbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY0JsaW5rKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQm9sZCk6CisgICAg
ICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZpeGVkKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jSXRhbGljcyk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N0cmlrZSk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1N1Yik6CisgICAgICAgIChKU0M6OnN0cmluZ1By
b3RvRnVuY1N1cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRjb2xvcik6Cisg
ICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0ZvbnRzaXplKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jQW5jaG9yKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTGluayk6
CisgICAgICAgIChKU0M6OnRyaW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jRW5kc1dpdGgpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdJbmNsdWRlc0ltcGwpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNJbmNsdWRlcyk6CisgICAgICAgIChKU0M6OmJ1aWx0aW5TdHJpbmdJbmNsdWRlc0lu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jTm9ybWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6c3ltYm9s
Q29uc3RydWN0b3JGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHA6
CisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2JqZWN0KToKKyAg
ICAgICAgKiBydW50aW1lL1Rocm93U2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3Bl
OjpUaHJvd1Njb3BlKToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6flRocm93U2NvcGUpOgor
ICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6
OlRocm93U2NvcGU6OnByaW50SWZOZWVkQ2hlY2spOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3Bl
OjpzaW11bGF0ZVRocm93KToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6dmVyaWZ5RXhjZXB0
aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVGhy
b3dTY29wZS5oOgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjpyZWxlYXNlKToKKyAgICAgICAg
KEpTQzo6VGhyb3dTY29wZTo6VGhyb3dTY29wZSk6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6
OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6dm0pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpUaHJvd1Njb3BlOjpleGNlcHRpb24pOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvVGhyb3dTY29wZUxvY2F0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVu
dGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJ
c1NhdGlzZmllZCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6
ZXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6Vk06OmNsZWFyRXhjZXB0aW9uKToKKyAgICAgICAg
KEpTQzo6Vk06OnNldEV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9XZWFr
TWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrTWFwKToKKyAg
ICAgICAgKiBydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNv
bnN0cnVjdFdlYWtTZXQpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpmdW5jdGlvblByaW50KToKKwogMjAxNi0wOS0wNiAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFR5cGVkIGFycmF5cyBzaG91bGQgdXNl
IE1hcmtlZFNwYWNlIGluc3RlYWQgb2YgQ29waWVkU3BhY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjMxLDYgKzYzMSw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Cb29sZWFuT2JqZWN0LmNwcAog
ICAgIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0NhbGxEYXRhLmNw
cAorICAgIHJ1bnRpbWUvQ2F0Y2hTY29wZS5jcHAKICAgICBydW50aW1lL0Nsb25lZEFyZ3VtZW50
cy5jcHAKICAgICBydW50aW1lL0NvZGVDYWNoZS5jcHAKICAgICBydW50aW1lL0NvZGVTcGVjaWFs
aXphdGlvbktpbmQuY3BwCkBAIC02NjAsOCArNjYxLDExIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb24uY3BwCisgICAgcnVudGltZS9FeGNl
cHRpb25FdmVudC5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwCiAg
ICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAogICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAKKyAgICBydW50aW1lL0V4Y2VwdGlvblNjb3BlLmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0
YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCiAgICAgcnVudGlt
ZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDEsMTIgKzMwMSwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9w
ZXJ0eU5hbWUgbmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogICAgIHsKKyAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICBJbXB1cmVHZXR0ZXIqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SW1wdXJlR2V0
dGVyKj4ob2JqZWN0KTsKICAgICAgICAgCiAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2RlbGVn
YXRlKSB7CiAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+bV9kZWxlZ2F0ZS0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIG5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KIApAQCAtMTAzNywxMSArMTAzOSwxNCBAQCBzdGF0aWMgU3RyaW5nIHJlc29s
dmVQYXRoKGNvbnN0IERpcmVjdG9yCiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6
Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5VmFsdWUsIEpTVmFsdWUgcmVm
ZXJyZXJWYWx1ZSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgSlNJbnRl
cm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVk
OjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKICAgICBjb25zdCBJZGVudGlmaWVyIGtleSA9
IGtleVZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlv
bigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZGVm
ZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAgIH0KIApAQCAtMTA1NCw5ICsxMDU5
LDkgQEAgSlNJbnRlcm5hbFByb21pc2UqIEdsb2JhbE9iamVjdDo6bW9kdWxlTAogICAgICAgICAg
ICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJDb3VsZCBub3QgcmVzb2x2ZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4i
KSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcmVmZXJyZXIgPSBy
ZWZlcnJlclZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNl
cHRpb24oKTsKLSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgZXhj
ZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0
aW9uKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVmZXJyZXIuaXNTeW1ib2woKSkgewpAQCAt
MTE0MiwxMSArMTE0NywxMyBAQCBzdGF0aWMgYm9vbCBmZXRjaE1vZHVsZUZyb21Mb2NhbEZpbGVT
eXN0CiAKIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNo
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVM
b2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAgICAgU3RyaW5nIG1vZHVsZUtl
eSA9IGtleS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBkZWZlcnJl
ZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgfQogCkBAIC0xMjU3LDkgKzEyNjQsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVudChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CiAgICAgUm9vdCogcm9vdCA9IGpzRHluYW1pY0Nhc3Q8Um9vdCo+KGV4
ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbCgiQ2Fubm90IGNyZWF0ZSBFbGVtZW50IHdpdGhvdXQgYSBSb290LiIpKSkpOwpA
QCAtMTQ0Nyw3ICsxNDU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0
cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZp
bGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNDgxLDcgKzE0ODgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUnVuCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50
KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIGpzTnVsbCgpKSwgVmVjdG9yPFN0cmluZz4oKSk7CkBAIC0xNTA5LDcgKzE1MTYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhl
Yy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNj
cmlwdDsKICAgICBpZiAoIWZldGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwg
c2NyaXB0KSkKQEAgLTE1MzAsNyArMTUzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBTdHJpbmcgc291cmNlQ29kZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCk7CiAKQEAgLTE1NDcsNyArMTU1NCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SZWEKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICgh
ZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE1NjIs
NyArMTU2OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGUKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmls
ZU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0
b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVt
KGZpbGVOYW1lLCBzY3JpcHQpKQpAQCAtMTYyMiw4ICsxNjI5LDExIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXQKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvblNldFJhbmRvbVNlZWQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgdW5zaWduZWQgc2VlZCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+d2Vha1JhbmRvbSgpLnNldFNlZWQo
c2VlZCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE4
NzYsMTQgKzE4ODYsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxv
YQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZyb21Mb2NhbEZpbGVT
eXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQ291bGQgbm90IG9wZW4gZmlsZS4iKSkpKTsKIAogICAgIEpTSW50ZXJuYWxQcm9taXNlKiBw
cm9taXNlID0gbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIGZpbGVOYW1lKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IEpTVmFsdWUgZXJyb3I7CkBAIC0xOTAxLDE0ICsxOTExLDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkNyZWF0ZUJ1aWx0aW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEgfHwgIWV4ZWMtPmFyZ3VtZW50KDApLmlz
U3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBTdHJpbmcgZnVuY3Rpb25UZXh0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJp
bmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlID0gbWFrZVNvdXJjZShmdW5jdGlvblRleHQpOwogICAgIEpTRnVuY3Rpb24qIGZ1
bmMgPSBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIGNyZWF0ZUJ1aWx0aW5F
eGVjdXRhYmxlKHZtLCBzb3VyY2UsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZm9vIiks
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0
KS0+bGluayh2bSwgc291cmNlKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKIApAQCAt
MTkyNyw3ICsxOTM5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNo
ZQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmlu
ZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IFN0b3BXYXRjaCBzdG9wV2F0Y2g7CkBAIC0xOTUzLDE0ICsxOTY1LDE2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QbGEKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNuYXBzaG90QnVpbGRlcihleGVj
LT52bSgpLmVuc3VyZUhlYXBQcm9maWxlcigpKTsKICAgICBzbmFwc2hvdEJ1aWxkZXIuYnVpbGRT
bmFwc2hvdCgpOwogCiAgICAgU3RyaW5nIGpzb25TdHJpbmcgPSBzbmFwc2hvdEJ1aWxkZXIuanNv
bigpOwogICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmVuY29kZShKU09OUGFy
c2UoZXhlYywganNvblN0cmluZykpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xOTk4LDcgKzIwMTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtCiAKICAgICBTdHJpbmcganNvblN0cmluZyA9IHZtLnNh
bXBsaW5nUHJvZmlsZXIoKS0+c3RhY2tUcmFjZXNBc0pTT04oKTsKICAgICBFbmNvZGVkSlNWYWx1
ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsK
LSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC0yMTAxLDYgKzIxMTUsMTYgQEAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogCiBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9u
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvbikKIHsKKyAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCisjZGVmaW5lIENIRUNLX0VYQ0VQVElPTigpIGRvIHsgXAorICAgICAg
ICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpIHsgXAorICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsgXAorICAgICAgICAgICAgcmV0dXJuOyBcCisgICAgICAgIH0gXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCiAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBleGNlcHRpb24udG9X
VEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogCiAg
ICAgSWRlbnRpZmllciBuYW1lSUQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCAibmFtZSIpOwpAQCAtMjEwOSw5ICsyMTMzLDEzIEBAIHN0YXRpYyB2
b2lkIGR1bXBFeGNlcHRpb24oR2xvYmFsT2JqZWN0KiAKICAgICBJZGVudGlmaWVyIHN0YWNrSUQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAic3Rh
Y2siKTsKICAgICAKICAgICBKU1ZhbHVlIG5hbWVWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCksIG5hbWVJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgSlNWYWx1ZSBmaWxlTmFtZVZhbHVlID0gZXhjZXB0aW9uLmdldChnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgZmlsZU5hbWVJRCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgSlNW
YWx1ZSBsaW5lTnVtYmVyVmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLCBsaW5lTnVtYmVySUQpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIEpTVmFs
dWUgc3RhY2tWYWx1ZSA9IGV4Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IHN0YWNrSUQpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIAogICAgIGlmIChuYW1lVmFs
dWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpID09ICJTeW50YXhFcnJv
ciIKICAgICAgICAgJiYgKCFmaWxlTmFtZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgfHwgIWxp
bmVOdW1iZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSkgewpAQCAtMjEyMywxMSArMjE1MSwx
NCBAQCBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9uKEdsb2JhbE9iamVjdCogCiAgICAgCiAgICAg
aWYgKCFzdGFja1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHByaW50ZigiJXNc
biIsIHN0YWNrVmFsdWUudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0
ZjgoKS5kYXRhKCkpOworCisjdW5kZWYgQ0hFQ0tfRVhDRVBUSU9OCiB9CiAKIHN0YXRpYyBib29s
IGNoZWNrVW5jYXVnaHRFeGNlcHRpb24oVk0mIHZtLCBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBleGNlcHRpb24sIGNvbnN0IFN0cmluZyYgZXhwZWN0ZWRFeGNlcHRpb25OYW1l
LCBib29sIGFsd2F5c0R1bXBFeGNlcHRpb24pCiB7Ci0gICAgdm0uY2xlYXJFeGNlcHRpb24oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewogICAgICAgICBwcmludGYoIkV4
cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIG5hbWUgJyVzJyBidXQgbm9uZSB3YXMgdGhy
b3duXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTIxMzUsMTMgKzIxNjYsMTMgQEAgc3RhdGljIGJvb2wgY2hlY2tVbmNh
dWdodEV4Y2VwdGlvbihWTSYgdgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7CiAgICAgSlNWYWx1ZSBleGNlcHRpb25DbGFzcyA9IGdsb2JhbE9iamVj
dC0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgZXhwZWN0ZWRFeGNlcHRp
b25OYW1lKSk7Ci0gICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHZtLmV4Y2Vw
dGlvbigpKSB7CisgICAgaWYgKCFleGNlcHRpb25DbGFzcy5pc09iamVjdCgpIHx8IHNjb3BlLmV4
Y2VwdGlvbigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9u
IHdpdGggbmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgaXMgbm90IGRlZmluZWRc
biIsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAogICAgIGJvb2wgaXNJbnN0YW5jZU9mRXhwZWN0ZWRFeGNlcHRpb24g
PSBqc0Nhc3Q8SlNPYmplY3QqPihleGNlcHRpb25DbGFzcyktPmhhc0luc3RhbmNlKGV4ZWMsIGV4
Y2VwdGlvbik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7CisgICAgaWYgKHNjb3BlLmV4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgdW5jYXVnaHQgZXhjZXB0aW9uIHdp
dGggbmFtZSAnJXMnIGJ1dCBnaXZlbiBleGNlcHRpb24gY2xhc3MgZmFpbHMgcGVyZm9ybWluZyBo
YXNJbnN0YW5jZVxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjE2NSw2ICsyMTk2LDcgQEAgc3RhdGljIGJv
b2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1
bXBHZW5lcmF0ZWRCeXRlY29kZXMoKSA9IHRydWU7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7CiAKICAgICBhdXRvIGNoZWNrRXhjZXB0aW9uID0gWyZdIChi
b29sIGlzTGFzdEZpbGUsIGJvb2wgaGFzRXhjZXB0aW9uLCBKU1ZhbHVlIHZhbHVlKSB7CkBAIC0y
MjA3LDcgKzIyMzksNyBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3Qq
CiAgICAgICAgIGlmIChpc01vZHVsZSkgewogICAgICAgICAgICAgaWYgKCFwcm9taXNlKQogICAg
ICAgICAgICAgICAgIHByb21pc2UgPSBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVOYW1lKSk7Ci0gICAg
ICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKIAogICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVsZmlsbEhhbmRsZXIgPSBKU05h
dGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nKCksIFsm
LCBpc0xhc3RGaWxlXShFeGVjU3RhdGUqIGV4ZWMpIHsKICAgICAgICAgICAgICAgICBjaGVja0V4
Y2VwdGlvbihpc0xhc3RGaWxlLCBmYWxzZSwgZXhlYy0+YXJndW1lbnQoMCkpOwpAQCAtMjIyNCwx
MyArMjI1NiwxNCBAQCBzdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqCiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IGV2YWx1YXRp
b25FeGNlcHRpb247CiAgICAgICAgICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gZXZhbHVhdGUo
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGpzY1NvdXJjZShzY3JpcHRCdWZmZXIsIGZpbGVO
YW1lKSwgSlNWYWx1ZSgpLCBldmFsdWF0aW9uRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRp
b24pCiAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBldmFsdWF0aW9uRXhjZXB0aW9uLT52
YWx1ZSgpOwogICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgZXZhbHVhdGlv
bkV4Y2VwdGlvbiwgcmV0dXJuVmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgc2NyaXB0QnVm
ZmVyLmNsZWFyKCk7Ci0gICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQpA
QCAtMjI0Myw2ICsyMjc2LDkgQEAgc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2Jq
ZWN0KgogCiBzdGF0aWMgdm9pZCBydW5JbnRlcmFjdGl2ZShHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgU3RyaW5nIGludGVycHJldGVyTmFt
ZShBU0NJSUxpdGVyYWwoIkludGVycHJldGVyIikpOwogICAgIAogICAgIGJvb2wgc2hvdWxkUXVp
dCA9IGZhbHNlOwpAQCAtMjI5Myw3ICsyMzI5LDcgQEAgc3RhdGljIHZvaWQgcnVuSW50ZXJhY3Rp
dmUoR2xvYmFsT2JqZWN0KgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwcmludGYoIiVzXG4i
LCByZXR1cm5WYWx1ZS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSkudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICAgICAgZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCktPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGds
b2JhbE9iamVjdC0+dm0oKS5kcmFpbk1pY3JvdGFza3MoKTsKICAgICB9CiAgICAgcHJpbnRmKCJc
biIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJVXRpbHMuaAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElVdGlscy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgZW51bSBjbGFzcyBFeGNlcHRpb25TdGF0dXMgewogCiBp
bmxpbmUgRXhjZXB0aW9uU3RhdHVzIGhhbmRsZUV4Y2VwdGlvbklmTmVlZGVkKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlUmVmKiByZXR1cm5lZEV4Y2VwdGlvblJlZikKIHsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlv
biA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvblJlZikK
ICAgICAgICAgICAgICpyZXR1cm5lZEV4Y2VwdGlvblJlZiA9IHRvUmVmKGV4ZWMsIGV4Y2VwdGlv
bi0+dmFsdWUoKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAg
ICAgIGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLnJl
cG9ydEFQSUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNDQsMTIgKzIxNDQsMTkgQEAKIAkJRkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3
IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTUwNjg2NjFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3Vy
Y2VEdW1wLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTcxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlT
Y29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1
OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8q
IFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjAyOUQ4
MUQ2RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGRTYwMjlEOTFENkUxRTRGMDAzMDIw
NEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2MDI5RDgxRDZFMUUzMzAwMzAyMDREIC8qIEV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlGRTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTM2MUQ3
OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTM5MUQ3OEYzQUYwMEE2OTRENCAvKiBF
eGNlcHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwICov
OyB9OworCQlGRTY0OTEzQjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjQ5MTNBMUQ3OEY0
NjEwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUZFNjQ5MTNEMUQ3OEZDMkYwMEE2OTRENCAvKiBFeGNl
cHRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuY3BwICovOyB9
OwogCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNjFC
OTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU2OEM2MzgxQjkwREUwQjAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTY4QzYzNTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9B
c3NlbWJsZXJQcmludGVyLmNwcCAqLzsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0IC8q
IEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLzsg
fTsKIAkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEUxQTFBN0NFQzAw
RjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFN0M0MTk2MUI5N0ZDNEIwMEY0RDU5OCAvKiBQaW5nUG9uZ1N0
YWNrT3ZlcmZsb3dUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFREE1MEQ0MUI5N0Y0NDIwMDlBM0I0RiAvKiBQaW5nUG9uZ1N0YWNrT3ZlcmZs
b3dUZXN0LmNwcCAqLzsgfTsKKwkJRkU4MEMxOTcxRDc3NUNERDAwODUxMEMwIC8qIENhdGNoU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBD
MTk2MUQ3NzVCMjcwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU4MEMxOTkxRDc3NUZCRTAwODUxMEMwIC8q
IENhdGNoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkU4MEMxOTgxRDc3NUZCNDAwODUxMEMwIC8qIENhdGNoU2NvcGUuY3BwICovOyB9Owor
CQlGRTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5QTFE
Nzc2OEZEMDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAgKi87IH07CiAJCUZF
OTlCMjQ5MUMyNEMzRDMwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFOTlCMjQ4MUMyNEI2RDMwMEM4MjE1
OSAvKiBKSVROZWdHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRkU5OUIyNEExQzI0QzNENzAwQzgyMTU5
IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTk5QjI0NzFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9y
LmNwcCAqLzsgfTsKIAkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFQTA4NjFFMTgy
QjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ0NjcsMTEgKzQ0NzQsMTggQEAKIAkJRkU1MDY4NjYx
QUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEEx
RUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Vk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNjAyOUQ4MUQ2
RTFFMzMwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU2NDkxMzYxRDc4RjAxMzAw
QTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEV4Y2VwdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZFNjQ5
MTM4MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZFNjQ5MTNBMUQ3OEY0NjEwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY0OTEzQzFENzhGNUM0MDBBNjk0RDQgLyog
RXhjZXB0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXhjZXB0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY4QzYz
NTFCOTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBN
YWNyb0Fzc2VtYmxlclByaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TWFjcm9Bc3NlbWJsZXJQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
N0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNo
U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0Y2hTY29wZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyog
Q2F0Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXRj
aFNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOUExRDc3NjhG
RDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRT
dWJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2Vu
ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMw
MEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU3MjksNiArNTc0Myw4IEBACiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8q
IEJ1dHRlcmZseUlubGluZXMuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyog
Q2FsbERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0
YS5oICovLAorCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAq
LywKKwkJCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovLAogCQkJ
CUJDNkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKIAkJCQkwRkUwNTAx
QzFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAx
RDFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggKi8sCkBAIC01NzkzLDEwICs1
ODA5LDE2IEBACiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBl
LmggKi8sCiAJCQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8s
CiAJCQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZF
NjQ5MTNDMUQ3OEY1QzQwMEE2OTRENCAvKiBFeGNlcHRpb25FdmVudC5jcHAgKi8sCisJCQkJRkU2
NDkxM0ExRDc4RjQ2MTAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmggKi8sCisJCQkJRkU4MEMx
OUExRDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovLAorCQkJ
CUZFNjAyOUQ4MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi8s
CiAJCQkJMEYxMkRFMEQxOTc5RDVGRDAwMDZGRjRFIC8qIEV4Y2VwdGlvbkZ1enouY3BwICovLAog
CQkJCTBGMTJERTBFMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmggKi8sCiAJCQkJ
MTQyOUQ4NzcwRUQyMUFDRDAwQjg5NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwICovLAogCQkJ
CUE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi8sCisJCQkJ
RkU2NDkxMzgxRDc4RjNBMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAqLywKKwkJCQlG
RTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCAqLywKIAkJCQk4NkNB
MDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJODZDQUZFRTIx
MDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKIAkJCQlBN0E4QUYyOTE3QURCNUYz
MDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggKi8sCkBAIC02MTkyLDcgKzYyMTQsNiBAQAogCQkJ
CTBGQTJDMTdBMTdEN0NGODQwMDlEMDE1RiAvKiBUZXN0UnVubmVyVXRpbHMuaCAqLywKIAkJCQlG
RTJFNkE3QTFENkVBNUZFMDA2MEY4OTYgLyogVGhyb3dTY29wZS5jcHAgKi8sCiAJCQkJRkUzNDIy
MTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLywKLQkJCQlGRTYwMjlEODFENkUx
RTMzMDAzMDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggKi8sCiAJCQkJMEY1NTk4OTcxN0M4
NkM1NjAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggKi8sCiAJCQkJMEYyQjY2RDgxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlBZGFwdG9ycy5oICovLAogCQkJCTBGMkI2NkQ5MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5Q29udHJvbGxlci5jcHAgKi8sCkBAIC03NzQ1LDcg
Kzc3NjYsNyBAQAogCQkJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDhFQkUyNDFDRThGMzU4MDA0NTMxNDYg
LyogSW50bE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDcwQTQ4MUQ1NDNB
OTAwMDZFNzIzMiAvKiBDZWxsQ29udGFpbmVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBH
ZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC04MjY2LDYgKzgyODcsNyBAQAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVG
REUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4
MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBF
QkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUZF
NjQ5MTM3MUQ3OEYwMUQwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM2RTU0NTMxQzQ2OEU3NDAwQjVBRjczIC8qIEIzTGVnYWxpemVNZW1v
cnlPZmZzZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcg
LyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzU5LDYgKzgzODEsNyBA
QAogCQkJCTcwOUZCODZDMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ3QTBFMTZGNUNEMDBCMzQ0NjAgLyogV2ViS2l0QXZhaWxh
YmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0RDQjk3MzEyRTUxOTNGMDA5MTE5NDAgLyog
V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTgwQzE5NzFENzc1Q0REMDA4NTEw
QzAgLyogQ2F0Y2hTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0RUM5MEMxODYwRDZDMjAw
OTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJCNkQ3
NTMxOEEzMzc5MzAwNEE5MzAxIC8qIFdyaXRlQmFycmllcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTgzNjgsNiArODM5MSw3IEBACiAJCQkJNDUxNTM5QjkxMkRDOTk0
NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3
MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTY0OTEz
QjFENzhGNDZDMDBBNjk0RDQgLyogRXhjZXB0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI2MkQ4NUI3MUMwRDY1MEYwMDZBQ0I2MSAvKiBBaXJGaXhQYXJ0aWFsUmVnaXN0
ZXJTdGFsbHMuaCBpbiBIZWFkZXJzICovLApAQCAtODg5MSw2ICs4OTE1LDcgQEAKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkwRkZBNTQ5NzE2Qjg4
MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRTY0OTEz
OTFENzhGM0FGMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNl
RG91YmxlVG9GbG9hdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNzEsNiArOTM5Niw3IEBACiAJ
CQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlC
dWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFC
NiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFODBDMTk5
MUQ3NzVGQkUwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQwMyw2ICs5NDI5LDcgQEAKIAkJCQkxNEU5RDE3
QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1
MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJRkU2NDkxM0QxRDc4RkMyRjAwQTY5NEQ0IC8qIEV4Y2VwdGlvbkV2ZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVj
dFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUIxREI3MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTk0ODMsNiArOTUxMCw3IEBACiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZF
MjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRC
Q0Y0NjMwMDg4NUI0RiAvKiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZF
ODBDMTlCMUQ3NzZBOTgwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVy
cHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAv
KiBQZXJHbG9iYWxPYmplY3RXcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRC
NzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRGdW5jdGlvbkNhbGwuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDEwICsxMDUsMTIgQEAgSlNWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwoYm9v
bCYgaAogewogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gbV90aGlzT2JqZWN0LmpzT2JqZWN0
KCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2V4ZWMpOworICAgIFZNJiB2bSA9IG1fZXhl
Yy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IHRoaXNPYmpl
Y3QtPmdldChtX2V4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcobV9leGVjLCBtX25hbWUpKTsK
LSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaGFkRXhjZXB0aW9uID0gdHJ1ZTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3Mv
U2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5k
aW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwx
MCArMTIxLDEzIEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhFeGVjU3RhdGUqIHMKIAog
U3RyaW5nIFNjcmlwdFZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKSBjb25z
dAogeworICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyByZXN1bHQgPSBtX3ZhbHVlLmdl
dCgpLnRvU3RyaW5nKHNjcmlwdFN0YXRlKS0+dmFsdWUoc2NyaXB0U3RhdGUpOwogICAgIC8vIEhh
bmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFzIHBhcnQgb2YgaW52
b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KLSAgICBpZiAoc2NyaXB0U3RhdGUtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICBzY3JpcHRTdGF0ZS0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIzLDYgKzYyMyw5IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYK
IAogdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
KyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNjYyLDcgKzY2NSw3IEBAIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZy
YW1lKiAKICAgICB7CiAgICAgICAgIFBhdXNlUmVhc29uRGVjbGFyYXRpb24gcmVhc29uKCp0aGlz
LCBkaWRIaXRCcmVha3BvaW50ID8gUGF1c2VkRm9yQnJlYWtwb2ludCA6IG1fcmVhc29uRm9yUGF1
c2UpOwogICAgICAgICBoYW5kbGVQYXVzZSh2bUVudHJ5R2xvYmFsT2JqZWN0LCBtX3JlYXNvbkZv
clBhdXNlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9u
KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0K
IAogICAgIG1fcGF1c2luZ0JyZWFrcG9pbnRJRCA9IG5vQnJlYWtwb2ludElEOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXJDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDkgQEAg
SlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogICAgIGlmICghY2FsbEZy
YW1lKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNhbGxGcmFtZSk7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBpZiAo
aXNUYWlsRGVsZXRlZCgpKQpAQCAtMjI4LDcgKzIzMCw2IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
CiAgICAgRGVidWdnZXJFdmFsRW5hYmxlciBldmFsRW5hYmxlcihjYWxsRnJhbWUpOwotICAgIFZN
JiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKIAogICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4
dFR5cGU7CiAgICAgCkBAIC0yNDMsOSArMjQ0LDkgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFt
ZTo6ZXZhbHVhdGVXaXRoUwogICAgIEpTU2NvcGU6OmNvbGxlY3RWYXJpYWJsZXNVbmRlclREWihz
Y29wZSgpLT5qc1Njb3BlKCksIHZhcmlhYmxlc1VuZGVyVERaKTsKIAogICAgIEV2YWxFeGVjdXRh
YmxlKiBldmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uo
c2NyaXB0KSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENv
ZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVC
bG9jaygpLT5pc0Fycm93RnVuY3Rpb24oKSwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5k
ZXJURFopOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24gPSB2
bS5leGNlcHRpb24oKTsKLSAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5M
SUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gY2F0
Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTI1Nyw5ICsyNTgs
OSBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAKICAgICBKU1Zh
bHVlIHRoaXNWYWx1ZSA9IHRoaXMtPnRoaXNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
dm0uaW50ZXJwcmV0ZXItPmV4ZWN1dGUoZXZhbCwgY2FsbEZyYW1lLCB0aGlzVmFsdWUsIHNjb3Bl
KCktPmpzU2NvcGUoKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAg
IGlmIChVTkxJS0VMWShjYXRjaFNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBleGNlcHRp
b24gPSBjYXRjaFNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgfQogCiAgICAgaWYgKHNjb3BlRXh0ZW5zaW9uT2JqZWN0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAko
cmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTQgKzExMiwxNSBAQCBleHRlcm4g
IkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgaWYg
KGV4ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2gpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuY2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKworICAg
IGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLT5j
YWxsRnJhbWVGb3JDYXRjaCA9PSBleGVjKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwotCi0gICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgCiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhh
dCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndAog
ICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgpAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgY29t
cGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICh2bS0+Y2FsbEZyYW1lRm9yQ2F0
Y2gpCiAgICAgICAgIEFTU0VSVChleGl0Lm1fa2luZCA9PSBHZW5lcmljVW53aW5kKTsKICAgICBp
ZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKLSAgICAgICAgQVNTRVJUKCEhdm0tPmV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgISFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgICAgIAogICAgIAogICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVj
LCBleGl0Lm1fY29kZU9yaWdpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcg
QEAgdGVtcGxhdGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0PgogQUxXQVlTX0lOTElORSBzdGF0
aWMgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIAogICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKQEAgLTExOSw3ICsx
MjAsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIEpJVF9PUEVSQVRJT04gCiAKICAgICAv
LyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocm93cyBhbiBleGNlcHRpb24u
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBzdHJpY3QpOwpAQCAtMTgzLDExICsxODQsMTIgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkNyZWF0ZVRoaQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoY29uc3RydWN0b3ItPnR5cGUoKSA9PSBK
U0Z1bmN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMs
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5yYXJlRGF0YShleGVjLCBpbmxpbmVD
YXBhY2l0eSktPm9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCktPnN0cnVjdHVyZSgpKTsKIAogICAg
IEpTVmFsdWUgcHJvdG8gPSBjb25zdHJ1Y3Rvci0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
cHJvdG8uaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIGFzT2JqZWN0KHByb3RvKSk7CkBAIC0yMTEsMTIgKzIxMywxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIGludDMyX3QgYiA9IG9wMi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoYSAmIGIpKTsKQEAgLTIyNiwxMiArMjI5LDEzIEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihhIHwgYikpOwpAQCAtMjQxLDEyICsyNDUsMTMgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVl
IG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgXiBiKSk7CkBAIC0yNTYsMTIgKzI2MSwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3Ay
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIDw8IChiICYgMHgxZikpKTsKQEAg
LTI3MSwxMiArMjc3LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7
CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBp
bnQzMl90IGEgPSBvcDEudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IG9wMi50
b1VJbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgPj4g
KGIgJiAweDFmKSkpOwpAQCAtMjg2LDEyICsyOTMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkT3AyKTsKIAogICAgIHVpbnQzMl90IGEgPSBvcDEudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHVpbnQzMl90IGIgPSBvcDIudG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihhID4+IChiICYgMHgxZikpKSk7CkBA
IC0zMTcsMTIgKzMyNSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
OwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAg
ZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAvIGIp
KTsKQEAgLTMzMiwxMCArMzQxLDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoQWJzKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVy
biBmYWJzKGEpOwogfQpAQCAtMzQ0LDEwICszNTQsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhDb3MoRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAgICAgcmV0dXJuIGNvcyhhKTsKIH0KQEAgLTM1NiwxMCArMzY3LDExIEBAIGRvdWJsZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRlJvdW4KIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYSk7CiB9CkBAIC0zNjgs
MTAgKzM4MCwxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aExvZyhFCiB7
CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gbG9nKGEpOwog
fQpAQCAtMzgwLDEwICszOTMsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhTaW4oRQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJu
IHNpbihhKTsKIH0KQEAgLTM5MiwxMCArNDA2LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyaXRoU3FydCgKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAg
aWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIHJldHVybiBzcXJ0KGEpOwogfQpAQCAtNDIxLDcgKzQzNiw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwogCkBAIC00NDcsMTAgKzQ2Mywx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgfQogCiAg
ICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eU5hbWUpKTsKIH0KQEAgLTQ1OSw3ICs0
NzUsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2
bSwgZXhlYyk7Ci0gICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVy
dHkpOwogCiAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpCkBAIC00ODAsNyArNDk3LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoYmFzZSkuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwog
fQpAQCAtODQ5LDYgKzg2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2UKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRU
aGlzKTsKQEAgLTg3NCwxMSArODkyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICB9CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJs
ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5LCBzbG90KSk7
CiB9CkBAIC05MDMsOSArOTIxLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbFdpdGgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAKICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRTdWJzY3JpcHQpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKICAgICBwdXRXaXRoVGhpczx0cnVlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFRo
aXMsIGVuY29kZWRWYWx1ZSwgcHJvcGVydHkpOwogfQpAQCAtOTE0LDkgKzkzMywxMCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxXaXRoCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSWRlbnRpZmll
ciBwcm9wZXJ0eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KS50b1Byb3BlcnR5
S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgcHV0V2l0aFRoaXM8ZmFsc2U+
KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7
CiB9CkBAIC0xNDMxLDkgKzE0NTEsOSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3RyQ2F0MihFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgSlNTdHJpbmcqIHN0cjEgPSBKU1ZhbHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3Qg
aGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2
ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KHN0cjEtPmxlbmd0aCgp
LCBzdHIyLT5sZW5ndGgoKSkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMs
IHNjb3BlKTsKQEAgLTE0NTAsMTEgKzE0NzAsMTEgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblN0ckNhdDMoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4
ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3
ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBwcmltaXRpdmVzLgorICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOyAvLyBJbXBvc3NpYmxlLCBzaW5jZSB3ZSBtdXN0IGhhdmUgYmVlbiBnaXZlbiBw
cmltaXRpdmVzLgogICAgIEpTU3RyaW5nKiBzdHIyID0gSlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3Ry
aW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIEpTU3RyaW5nKiBzdHIzID0gSlNWYWx1ZTo6ZGVjb2RlKGMp
LnRvU3RyaW5nKGV4ZWMpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90Pihz
dHIxLT5sZW5ndGgoKSwgc3RyMi0+bGVuZ3RoKCksIHN0cjMtPmxlbmd0aCgpKSkgewogICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0
LDkgQEAgU3RyaW5nIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTYwogCiBKU0M6OkpT
T2JqZWN0KiBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KGNvbnN0
IFN0cmluZyYgc291cmNlLCBFeGVjU3RhdGUqIHNjcmlwdFN0YXRlLCBpbnQgaWQpCiB7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0U3RhdGUpOworICAgIFZNJiB2bSA9IHNjcmlwdFN0YXRl
LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBTb3VyY2VDb2RlIHNvdXJjZUNvZGUgPSBtYWtl
U291cmNlKHNvdXJjZSk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjcmlw
dFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CkBAIC0xNTcsNyArMTU5LDcgQEAgSlNDOjpK
U09iamVjdCogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpjcgogICAgIGFyZ3MuYXBwZW5kKGpzTnVt
YmVyKGlkKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChzY3JpcHRTdGF0ZSwg
ZnVuY3Rpb25WYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxUaGlzVmFsdWUsIGFyZ3Mp
OwotICAgIHNjcmlwdFN0YXRlLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJlc3VsdC5nZXRPYmplY3QoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDggQEAgdm9pZCBK
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OgogICAgIGlmIChpc1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXJy
b3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7CiAKICAgICBS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tG
cm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3Rh
Y2tTaXplVG9DYXB0dXJlKTsKICAgICBpZiAoaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVw
b3J0aW5nRXhjZXB0aW9ucygpKQpAQCAtMjI5LDggKzIzMCwxMiBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3Jp
cHQgaGFuZGxpbmcgZXhjZXB0aW9ucwogICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0
aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3Ry
aW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSBleGNlcHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAg
ICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAg
ICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLT52YWx1ZSgpLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICB9CiAKICAgICBp
ZiAoSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpsb2dUb1N5c3RlbUNvbnNvbGUoKSkgewog
ICAgICAgICBpZiAoY2FsbFN0YWNrLT5zaXplKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlV2kKICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkluamVjdGVkU2NyaXB0SG9z
dC5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3Ry
aW5nLiIpKTsKIAogICAgIFN0cmluZyBwcm9ncmFtID0gc2NyaXB0VmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwpAQCAtMjU5LDEyICsyNTks
MTMgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKIAogICAgIGlmIChKU1Byb21pc2UqIHByb21pc2Ug
PSBqc0R5bmFtaWNDYXN0PEpTUHJvbWlzZSo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCBudWxscHRyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICBzd2l0Y2ggKHByb21pc2UtPnN0YXR1cyhleGVjLT52
bSgpKSkgewogICAgICAgICBjYXNlIEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nOgpAQCAtMjg2
LDcgKzI4Nyw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAg
ICBpZiAoSlNCb3VuZEZ1bmN0aW9uKiBib3VuZEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Jv
dW5kRnVuY3Rpb24qPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVj
dEludGVybmFsUHJvcGVydHkoZXhlYywgInRhcmdldEZ1bmN0aW9uIiwgYm91bmRGdW5jdGlvbi0+
dGFyZ2V0RnVuY3Rpb24oKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAiYm91bmRUaGlzIiwgYm91
bmRGdW5jdGlvbi0+Ym91bmRUaGlzKCkpKTsKQEAgLTI5OCw3ICsyOTksNyBAQCBKU1ZhbHVlIEpT
SW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKFByb3h5T2JqZWN0KiBwcm94
eSA9IGpzRHluYW1pY0Nhc3Q8UHJveHlPYmplY3QqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwogICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRlcmFs
KCJ0YXJnZXQiKSwgcHJveHktPnRhcmdldCgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJ
bmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiaGFuZGxlciIpLCBwcm94eS0+aGFuZGxlcigpKSk7CkBAIC0zMTIsNyArMzEzLDcg
QEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogCiAgICAgICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtF
TFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5h
bFByb3BlcnR5KGV4ZWMsICJhcnJheSIsIGl0ZXJhdGVkVmFsdWUpKTsKICAgICAgICAgICAgIGFy
cmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3Bl
cnR5KGV4ZWMsICJraW5kIiwga2luZCkpOwpAQCAtMzM1LDcgKzMzNiw3IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgfQogICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAibWFwIiwgbWFwSXRl
cmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2luZCIsIGpz
Tm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkpOwpAQCAtMzU3LDcgKzM1OCw3IEBAIEpTVmFs
dWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICAgICAgfQogICAgICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAic2V0Iiwg
c2V0SXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoKSkpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCAia2lu
ZCIsIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBraW5kKSkpOwpAQCAtMzY3LDcgKzM2OCw3IEBA
IEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNTdHJp
bmdJdGVyYXRvciogc3RyaW5nSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nSXRlcmF0
b3IqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICBKU0Fy
cmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgMSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVy
bmFsUHJvcGVydHkoZXhlYywgInN0cmluZyIsIHN0cmluZ0l0ZXJhdG9yLT5pdGVyYXRlZFZhbHVl
KGV4ZWMpKSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTM3Niw3ICszNzcsNyBAQCBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgaWYgKEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gMDsK
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIsIDEpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRleCsrLCBj
b25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJvYmplY3QiLCBwcm9wZXJ0eU5hbWVJdGVy
YXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIHJldHVybiBhcnJheTsKQEAgLTQwNCw2
ICs0MDUsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50CiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9
IGpzRHluYW1pY0Nhc3Q8SlNXZWFrTWFwKj4odmFsdWUpOwogICAgIGlmICghd2Vha01hcCkKQEAg
LTQxOCw3ICs0MjAsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrTWFwRW50
CiAgICAgICAgIG51bWJlclRvRmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3Vi
bGUpOwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgZm9yIChhdXRvIGl0ID0gd2Vha01hcC0+d2Vha01hcERhdGEoKS0+YmVnaW4oKTsgaXQgIT0g
d2Vha01hcC0+d2Vha01hcERhdGEoKS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3Qq
IGVudHJ5ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkBAIC00NTEsNiArNDUzLDcgQEAg
SlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQgPSBqc0R5bmFtaWND
YXN0PEpTV2Vha1NldCo+KHZhbHVlKTsKICAgICBpZiAoIXdlYWtTZXQpCkBAIC00NjUsNyArNDY4
LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6d2Vha1NldEVudAogICAgICAgICBu
dW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0
byBpdCA9IHdlYWtTZXQtPndlYWtNYXBEYXRhKCktPmJlZ2luKCk7IGl0ICE9IHdlYWtTZXQtPndl
YWtNYXBEYXRhKCktPmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBlbnRyeSA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpAQCAtNDk1LDYgKzQ5OCw3IEBAIEpTVmFsdWUgSlNJ
bmplY3RlZFNjcmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIGl0ZXJhdG9yOwogICAgIEpTVmFsdWUgdmFs
dWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBpZiAoSlNNYXBJdGVyYXRvciog
bWFwSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPih2YWx1ZSkpCkBAIC01
MDUsNyArNTA5LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6aXRlcmF0b3JFbgog
ICAgICAgICBpdGVyYXRvciA9IHN0cmluZ0l0ZXJhdG9yLT5jbG9uZShleGVjKTsKICAgICBlbHNl
IGlmIChKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBwcm9wZXJ0eU5hbWVJdGVyYXRvciA9IGpzRHlu
YW1pY0Nhc3Q8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcio+KHZhbHVlKSkgewogICAgICAgICBpdGVy
YXRvciA9IHByb3BlcnR5TmFtZUl0ZXJhdG9yLT5jbG9uZShleGVjKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKEpTT2JqZWN0KiBpdGVyYXRvck9iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmpl
Y3QqPih2YWx1ZSkpIHsKQEAgLTUyNSwxOCArNTI5LDE4IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNj
cmlwdEhvc3Q6Oml0ZXJhdG9yRW4KICAgICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJU
b0ZldGNoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMs
IGl0ZXJhdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUoZXhlYywgbmV4dCk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBKU09iamVjdCog
ZW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTSmF2YVNjcmlwdENhbGxGcmFtZS5j
cHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBKU1ZhbHVlIEpTSmF2YVNjcmlwdENhbGxGcmFtZTo6ZXZhbHVhdGVXCiAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKU0phdmFTY3JpcHRD
YWxsRnJhbWUuZXZhbHVhdGVXaXRoU2NvcGVFeHRlbnNpb24gZmlyc3QgYXJndW1lbnQgbXVzdCBi
ZSBhIHN0cmluZy4iKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0ID0gc2NyaXB0VmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIAogICAgIE5ha2VkUHRyPEV4Y2VwdGlvbj4gZXhjZXB0aW9uOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxT
dGFja0ZhY3RvcnkuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksNiArMTE5LDkgQEAgUmVmPFNjcmlwdENhbGxTdGFjaz4gY3JlYXRlU2NyaXB0Q2FsbFN0
YQogCiBzdGF0aWMgdm9pZCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogZXhjZXB0aW9uT2JqZWN0LCBpbnQqIGxpbmVO
dW1iZXIsIGludCogY29sdW1uTnVtYmVyLCBTdHJpbmcqIHNvdXJjZVVSTCkKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKwogICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNw
ZWN0b3I6IFNob3VsZCBub3QgbmVlZCB0byBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4
Y2VwdGlvbnMKICAgICBKU1ZhbHVlIGxpbmVWYWx1ZSA9IGV4Y2VwdGlvbk9iamVjdC0+Z2V0RGly
ZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImxpbmUiKSk7CiAg
ICAgKmxpbmVOdW1iZXIgPSBsaW5lVmFsdWUgJiYgbGluZVZhbHVlLmlzTnVtYmVyKCkgPyBpbnQo
bGluZVZhbHVlLnRvTnVtYmVyKGV4ZWMpKSA6IDA7CkBAIC0xMjYsNyArMTI5LDcgQEAgc3RhdGlj
IHZvaWQgZXh0cmFjdFNvdXJjZUluZm9ybWF0aW9uRnJvbQogICAgICpjb2x1bW5OdW1iZXIgPSBj
b2x1bW5WYWx1ZSAmJiBjb2x1bW5WYWx1ZS5pc051bWJlcigpID8gaW50KGNvbHVtblZhbHVlLnRv
TnVtYmVyKGV4ZWMpKSA6IDA7CiAgICAgSlNWYWx1ZSBzb3VyY2VVUkxWYWx1ZSA9IGV4Y2VwdGlv
bk9iamVjdC0+Z2V0RGlyZWN0KGV4ZWMtPnZtKCksIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgInNvdXJjZVVSTCIpKTsKICAgICAqc291cmNlVVJMID0gc291cmNlVVJMVmFsdWUgJiYgc291
cmNlVVJMVmFsdWUuaXNTdHJpbmcoKSA/IHNvdXJjZVVSTFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKSA6IEFTQ0lJTGl0ZXJhbCgidW5kZWZpbmVkIik7Ci0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiBSZWY8U2NyaXB0
Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBzaXplX3QgbWF4U3RhY2tTaXpl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhY2hlZENhbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2Fs
bC5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FjaGVkQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgICAgIG1fY2xvc3VyZSA9IG1faW50ZXJwcmV0ZXItPnByZXBh
cmVGb3JSZXBlYXRDYWxsKGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKSwgY2FsbEZyYW1lLCAmbV9w
cm90b0NhbGxGcmFtZSwgZnVuY3Rpb24sIGFyZ3VtZW50Q291bnQgKyAxLCBmdW5jdGlvbi0+c2Nv
cGUoKSwgbV9hcmd1bWVudHMuZGF0YSgpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGNhbGxGcmFtZSwgc2NvcGUpOwotICAgICAg
ICAgICAgbV92YWxpZCA9ICFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpOworICAgICAgICAgICAg
bV92YWxpZCA9ICFzY29wZS5leGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgSlNWYWx1ZSBjYWxsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE0ICsx
MTYsNiBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIHBvaW50ZXIsIHNvIHRoZXNlIGFy
ZSBpbmVmZmljaWVudCwgYW5kIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBpbiBuZXcgY29kZS4K
ICAgICAgICAgLy8gQnV0IHRoZXkncmUgdXNlZCBpbiBtYW55IHBsYWNlcyBpbiBsZWdhY3kgY29k
ZSwgc28gdGhleSdyZSBub3QgZ29pbmcgYXdheSBhbnkgdGltZSBzb29uLgogCi0gICAgICAgIHZv
aWQgY2xlYXJFeGNlcHRpb24oKSB7IHZtKCkuY2xlYXJFeGNlcHRpb24oKTsgfQotCi0gICAgICAg
IEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdm0oKS5leGNlcHRpb24oKTsg
fQotICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0dXJuICEhdm0oKS5leGNl
cHRpb24oKTsgfQotCi0gICAgICAgIEV4Y2VwdGlvbiogbGFzdEV4Y2VwdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHZtKCkubGFzdEV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgY2xlYXJMYXN0RXhj
ZXB0aW9uKCkgeyB2bSgpLmNsZWFyTGFzdEV4Y2VwdGlvbigpOyB9Ci0KICAgICAgICAgQXRvbWlj
U3RyaW5nVGFibGUqIGF0b21pY1N0cmluZ1RhYmxlKCkgY29uc3QgeyByZXR1cm4gdm0oKS5hdG9t
aWNTdHJpbmdUYWJsZSgpOyB9CiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9w
ZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKnZtKCkucHJvcGVydHlOYW1lczsgfQogICAgICAg
ICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciYgZW1wdHlMaXN0KCkgY29uc3QgeyByZXR1cm4g
KnZtKCkuZW1wdHlMaXN0OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw3ICsxMDUsNyBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBTdHJpbmcgcHJvZ3JhbVNv
dXJjZSA9IGFzU3RyaW5nKHByb2dyYW0pLT52YWx1ZShjYWxsRnJhbWUpOwotICAgIGlmIChjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCiAgICAgQ2FsbEZyYW1lKiBjYWxs
ZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBK
U1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHRoZSBsaXRlcmFsIHBhcnNlciBiYWlsZWQsIGl0IHNob3VsZCBub3QgaGF2
ZSB0aHJvd24gZXhjZXB0aW9ucy4KLSAgICAgICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7Cisg
ICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIGV2YWwgPSBjYWxs
ZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29k
ZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBkZXJpdmVkQ29udGV4dFR5
cGUsIGV2YWxDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgcHJvZ3JhbVNvdXJj
ZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAKQEAgLTE4OCw3ICsxODgsNyBAQCB1bnNpZ25lZCBzaXpl
T2ZWYXJhcmdzKENhbGxGcmFtZSogY2FsbEZyCiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoYXJndW1lbnRzLmlzT2JqZWN0KCkpOwogICAgICAgICBsZW5ndGggPSBnZXRMZW5n
dGgoY2FsbEZyYW1lLCBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWShjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC01ODYsMTMgKzU4NiwxNSBAQCBwcml2YXRlOgogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyB2b2lkIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIgPSBj
YWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewotICAgICAgICBT
dXNwZW5kRXhjZXB0aW9uU2NvcGUgc2NvcGUoJmNhbGxGcmFtZS0+dm0oKSk7CisgICAgICAgIFN1
c3BlbmRFeGNlcHRpb25TY29wZSBzY29wZSgmdm0pOwogICAgICAgICBpZiAoanNEeW5hbWljQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbEZyYW1lLT5jYWxsZWUoKSkpCiAgICAgICAgICAgICBkZWJ1Z2dl
ci0+cmV0dXJuRXZlbnQoY2FsbEZyYW1lKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZGVi
dWdnZXItPmRpZEV4ZWN1dGVQcm9ncmFtKGNhbGxGcmFtZSk7Ci0gICAgICAgIEFTU0VSVCghY2Fs
bEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodGhyb3dTY29w
ZSwgIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIH0KIApAQCAtNjgwLDYgKzY4Miw4
IEBAIHByaXZhdGU6CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnVu
d2luZChWTSYgdm0sIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgRXhjZXB0aW9uKiBleGNlcHRpb24s
IFVud2luZFN0YXJ0IHVud2luZFN0YXJ0KQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh1bndpbmRTdGFydCA9PSBVbndpbmRGcm9tQ2FsbGVy
RnJhbWUpIHsKICAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPclZNRW50cnlGcmFt
ZSgpID09IHZtLnRvcFZNRW50cnlGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpA
QCAtNjk4LDcgKzcwMiw3IEBAIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6
OnUKICAgICBpZiAoZXhjZXB0aW9uVmFsdWUuaXNFbXB0eSgpIHx8IChleGNlcHRpb25WYWx1ZS5p
c0NlbGwoKSAmJiAhZXhjZXB0aW9uVmFsdWUuYXNDZWxsKCkpKQogICAgICAgICBleGNlcHRpb25W
YWx1ZSA9IGpzTnVsbCgpOwogCi0gICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpICYmIHZtLmV4Y2Vw
dGlvbigpLT5zdGFjaygpLnNpemUoKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUu
ZXhjZXB0aW9uKCkgJiYgc2NvcGUuZXhjZXB0aW9uKCktPnN0YWNrKCkuc2l6ZSgpKTsKIAogICAg
IC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVud2luZGluZyBjYWxsIGZy
YW1lcyBhcyBuZWNlc3NhcnkuCiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSBudWxscHRyOwpA
QCAtODk3LDcgKzkwMSw3IEBAIGZhaWxlZEpTT05QOgogCiAgICAgLy8gRXhlY3V0ZSB0aGUgY29k
ZToKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHByb2dyYW0tPmdlbmVyYXRlZEpJVENvZGUoKS0+ZXhl
Y3V0ZSgmdm0sICZwcm90b0NhbGxGcmFtZSk7Ci0KKyAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsK
ICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCkBAIC05MDYsNyArOTEwLDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIEFTU0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICBBU1NFUlQoIXZtLmlzQ29sbGVj
dG9yQnVzeSgpKTsKICAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKQEAgLTk2OSw3ICs5NzMsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDb25zdHJ1Y3QoCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgQVNTRVJUKCFjYWxs
RnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwogICAgIC8vIFdlIHRocm93
IGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlIGhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZyAidmFsaWQi
IGJ1dCB3ZSdyZQogICAgIC8vIGFscmVhZHkgaW4gYW4gaW52YWxpZCBzdGF0ZS4KQEAgLTEwMjAs
MTIgKzEwMjQsMTIgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVu
dHJ5VG9OYXRpdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29uc3RydWN0RGF0YS5uYXRpdmUu
ZnVuY3Rpb24pLCAmdm0sICZwcm90b0NhbGxGcmFtZSkpOwogCi0gICAgICAgICAgICBpZiAoIWNh
bGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoTElLRUxZKCF0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
aXNPYmplY3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChyZXN1bHQuaXNPYmplY3QoKSk7CiAgICAgcmV0
dXJuIGNoZWNrZWRSZXR1cm4oYXNPYmplY3QocmVzdWx0KSk7CkBAIC0xMDM1LDcgKzEwMzksNyBA
QCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yCiB7CiAgICAgVk0mIHZt
ID0gKnNjb3BlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dT
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgCiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQog
ICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwpAQCAtMTA4NCw3ICsxMDg4LDcgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKHNjb3BlLT52bSgp
ID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxl
Y3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQpAQCAtMTE5MCw3ICsx
MTk0LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShNb2R1bGVQcm9ncgogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgQVNTRVJUKHNj
b3BlLT52bSgpID09ICZjYWxsRnJhbWUtPnZtKCkpOwotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgQVNTRVJUKCF2
bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgaWYgKHZtLmlzQ29sbGVjdG9yQnVzeSgpKQpAQCAt
MTIzMSwxMiArMTIzNSwxNCBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKE1vZHVsZVBy
b2dyCiAKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7CisgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAg
ICBEZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
ZGVidWdnZXIoKTsKICAgICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47CiAKICAgICBB
U1NFUlQoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aGFzRGVidWdnZXJSZXF1ZXN0cygpKTsKLSAg
ICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7
CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6CkBAIC0xMjU4LDcgKzEyNjQsNyBAQCBO
RVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6ZGVidWcoQ2FsCiAgICAgICAgICAgICBkZWJ1
Z2dlci0+ZGlkUmVhY2hCcmVha3BvaW50KGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKLX0gICAgCisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVy
LmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5l
IEludGVycHJldGVyX2gKIAogI2luY2x1ZGUgIkFyZ0xpc3QuaCIKKyNpbmNsdWRlICJDYXRjaFNj
b3BlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiU291cmNlUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2luY2x1ZGUgIlN0YWNrRnJh
bWUuaCIKKyNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTkyLDggKzk0LDkgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1c3BlbmRFeGNlcHRpb25TY29wZShWTSogdm0pCiAg
ICAgICAgICAgICA6IG1fdm0odm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG9sZEV4Y2VwdGlv
biA9IHZtLT5leGNlcHRpb24oKTsKLSAgICAgICAgICAgIHZtLT5jbGVhckV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUoKnZtKTsKKyAgICAg
ICAgICAgIG9sZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgICAgICB+U3VzcGVuZEV4Y2VwdGlv
blNjb3BlKCkKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1NoYWRvd0NoaWNrZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TaGFkb3dDaGlja2VuLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MzYsOCArNDM2LDkgQEAgdm9pZCBTaGFkb3dDaGlja2VuOjpkdW1wKFByaW50
U3RyZWFtJiBvdQogSlNBcnJheSogU2hhZG93Q2hpY2tlbjo6ZnVuY3Rpb25zT25TdGFjayhFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgaXRlcmF0ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCB2b2lkIEpJVENvZGU6
OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0ZShW
TSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90b0NhbGxGcmFtZSkKIHsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogICAgIHZvaWQqIGVudHJ5QWRkcmVzczsKICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHByb3Rv
Q2FsbEZyYW1lLT5jYWxsZWUoKSk7CiAKQEAgLTc4LDcgKzc5LDcgQEAgSlNWYWx1ZSBKSVRDb2Rl
OjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogICAgIH0gZWxzZQogICAgICAgICBlbnRyeUFkZHJl
c3MgPSBhZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9KYXZhU2NyaXB0
KGVudHJ5QWRkcmVzcywgdm0sIHByb3RvQ2FsbEZyYW1lKSk7Ci0gICAgcmV0dXJuIHZtLT5leGNl
cHRpb24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OworICAgIHJldHVybiBzY29wZS5leGNlcHRpb24o
KSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCiBERkc6OkNvbW1vbkRhdGEqIEpJVENvZGU6OmRm
Z0NvbW1vbigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgZ2VuZXJpY1Vud2luZChWTSogdm0sIEV4ZWNTdGF0ZSogY2FsbEZyYW1l
LCBVbndpbmRTdGFydCB1bndpbmRTdGFydCkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogICAgIGlmIChPcHRpb25zOjpicmVha09uVGhyb3coKSkgewogICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAg
ICAgIGlmIChjb2RlQmxvY2spCkBAIC01OCw3ICs1OSw3IEBAIHZvaWQgZ2VuZXJpY1Vud2luZChW
TSogdm0sIEV4ZWNTdGF0ZSogY2EKICAgICB9CiAgICAgdm0tPnNoYWRvd0NoaWNrZW4oKS5sb2co
KnZtLCBzaGFkb3dDaGlja2VuVG9wRnJhbWUsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6dGhyb3dQ
YWNrZXQoKSk7CiAgICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSB2bS0+ZXhjZXB0aW9u
KCk7CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKICAgICBS
RUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gdm0t
PmludGVycHJldGVyLT51bndpbmQoKnZtLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgdW53aW5kU3Rh
cnQpOyAvLyBUaGlzIG1heSB1cGRhdGUgY2FsbEZyYW1lLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3NSw3ICsyNzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkluCiAgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25Jbk9wdGltaXplLCBiYXNlLT5jbGFz
c0luZm8oKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJvcGVydHkpOwogICAgIGJvb2wgcmVzdWx0ID0g
YXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7Ci0gICAg
aWYgKHZtLT5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8tPmFjY2Vzc1R5cGUpOwpA
QCAtNDg5LDYgKzQ4OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdPclN5
bWIKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJh
c2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlW
YWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNV
SW50MzIoKSkpIHsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAg
ICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CkBAIC01MTAsNyArNTExLDcg
QEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogCiAgICAgYXV0byBw
cm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CiAgICAgLy8gRG9u
J3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0gICAg
aWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYnlWYWxJbmZvLT5zdHVi
SW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hl
ZElkICE9IHByb3BlcnR5KSkKQEAgLTUyMiw2ICs1MjMsOCBAQCBzdGF0aWMgdm9pZCBwdXRCeVZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQs
IEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogeworICAgIFZNJiB2bSA9IGNh
bGxGcmFtZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmlj
dE1vZGUoKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAg
ICAvLyBEZXNwaXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0cnVl
IG9ubHkgZm9yIHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJlIHZh
bGlkIGFycmF5IGluZGljZXMuCkBAIC01NTMsNyArNTU2LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0
UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBp
ZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNj
cmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRl
eChwcm9wZXJ0eSkpIHsKQEAgLTc3NiwxNCArNzc5LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQ2EKIHsKICAgICBVTlVTRURfUEFSQU0oZXhlYyk7CiAKKyAgICBW
TSogdm0gPSAmZXhlY0NhbGxlZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOworCiAgICAgZXhlY0NhbGxlZS0+c2V0Q29kZUJsb2NrKDApOwogICAgIAog
ICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+Y2FsbGVlQXNWYWx1ZSgpLCBnbG9i
YWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
IAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
ZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBFbmNvZGVkSlNWYWx1ZSgp
OwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTgwNyw3ICs4
MTIsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxsCiAgICAgICAg
ICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAg
ICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKICAgICAgICAg
ICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5h
dGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgICAgICBpZiAodm0tPmV4Y2VwdGlv
bigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04MzYsNyArODQxLDcgQEAgc3RhdGlj
IFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAgICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0
Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2Fs
bGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwpAQCAtMTQ2Miw4
ICsxNDY3LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBlIHsKIAogc3RhdGljIHZvaWQgcHV0
QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0KiBhY2Nlc3NvciwgQWNjZXNzb3JU
eXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIHByb3BlcnR5S2V5ID0g
c3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNzb3JUeXBlOjpHZXR0ZXIpCkBAIC0x
NjA4LDggKzE2MTUsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNjZXNzQXJndW1lbnRJbmRleFF1aWNr
bAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChMSUtFTFko
YmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewotICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChKU0NlbGw6OmNhblVz
ZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICBpZiAoUmVmUHRy
PEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3RyaW5nID0gYXNTdHJpbmcoc3Vic2Ny
aXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkgewpAQCAtMTY1MSwxMCArMTY2MCwx
MCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgfQogCiAg
ICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3Jp
cHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CkBAIC0xODQ1
LDYgKzE4NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsK
ICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0
KTsKICAgICAKQEAgLTE4NjIsMTAgKzE4NzIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYmFzZVZh
bHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiAg
ICAgfQpAQCAtMTkxNCwxMCArMTkyNCwxMCBAQCBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIoaW5kZXgpKQogICAgICAgICBjb3Vs
ZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5ID0ga2V5LnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsKICAgICB9CkBAIC0yMTIyLDcgKzIx
MzIsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1dFBy
b3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2Nv
cGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCi0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwo
ZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dEluZm8sIHNsb3QsIGlkZW50KTsKQEAg
LTIzNzEsMTEgKzIzODEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB1bnByb2ZpbGVkTXVs
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAg
IGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRv
TnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSAqIGIp
KTsKQEAgLTIzODMsNiArMjM5NCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1Zh
bHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZmlsZWRN
dWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBib29s
IHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUpCiB7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDIpOwogCkBAIC0yMzkwLDEwICsyNDAyLDEwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlTEhTQW5kUkhT
KG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIAogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ2OCwxMSArMjQ4MCwxMiBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgb3AxID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ4MCw2ICsyNDkzLDcgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgogCiBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMiwgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2JzZXJ2ZUxIU0FuZFJIU1R5cGVzID0g
dHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
SlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBv
cDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKQEAgLTI0ODcsMTAgKzI1MDEsMTAg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgcHJvZgogICAgICAgICBhcml0
aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIpOwogCiAgICAgZG91YmxlIGEgPSBv
cDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhlYyk7
Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhIC0gYik7CkBAIC0yNTgw
LDEzICsyNTk0LDE0IEBAIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25DaGVja0lmRXgK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXZtLmV4Y2VwdGlvbigpKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0
aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVj
dXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGdlbmVyaWNVbndp
bmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBleHRlcm4gIkMiCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcAko
cmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RXhj
ZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDggQEAgSW5zdHJ1Y3Rpb24q
IHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVOVVNFRF9QQVJBTShleGVjKTsKICNp
ZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAg
IGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCksICIgKHJldHVy
blRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZt
KTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCks
ICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAgICByZXR1cm4gTExJbnQ6OmV4Y2Vw
dGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTYsNyArNTcsOCBAQCB2b2lkKiBjYWxsVG9UaHJv
dyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwogI2lmIExMSU5UX1NM
T1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgZGF0YUxvZygi
VGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24oKSwgIiAoY2FsbFRvVGhyb3cpLlxu
Iik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBkYXRh
TG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKGNhbGxUb1Ro
cm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50OjpnZXRDb2RlUHRyKGxsaW50X3Ro
cm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1
dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJl
dyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5
S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmICh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9FTkQoKTsKIAogICAgIGlmIChPcHRp
b25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVj
b2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzksMTUgKzc5LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBCeXRlY29kZVNlcXVlbmNlOjpmb3JC
eXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVuY2VQcm9wZXJ0aWVzKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0Fy
cmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hlYWRl
ci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBq
c1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVhZGVyW2ldKSkpOwogICAgIHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaGVhZGVyLCBoZWFkZXIpOwog
ICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAw
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAgICAgICAgc2VxdWVuY2UtPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQ29tcGlsYXRp
b24uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSwyOCArMTE1
LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIEpTVmFsdWUg
Q29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzSUQsIGpzTnVtYmVyKG1f
Ynl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5nKGV4ZWMsIFN0cmluZzo6ZnJvbVVU
RjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAgSlNBcnJheSogcHJvZmlsZWRCeXRl
Y29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHByb2ZpbGVkQnl0ZWNv
ZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2ZpbGVkQnl0ZWNvZGVzW2ldLnRvSlMo
ZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
cHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVzKTsKICAgICAKICAgICBKU0FycmF5
KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytpKQogICAgICAgICBkZXNjcmlwdGlv
bnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3JpcHRpb25zW2ldLnRvSlMoZXhlYykp
OwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZGVzY3Jp
cHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvdW50ZXJzID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1fY291bnRlcnMuYmVnaW4oKSwg
ZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEpTT2Jq
ZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTE0Nywx
NCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGUKICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvdW50ZXJzLCBj
b3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNpdGVzID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX29zckV4aXRTaXRlcy5zaXplKCk7
ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX29zckV4
aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNpdGVzKTsKICAgICAKICAgICBKU0Fy
cmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdHMtPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyRGF0YWJhc2UuY3BwCShyZXZp
c2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJE
YXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwyNCArMTAwLDI1IEBAIHZvaWQgRGF0
YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpTVmFsdWUgRGF0YWJhc2U6OnRvSlMo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAgICAKICAgICBKU0FycmF5KiBieXRl
Y29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBieXRlY29kZXMtPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0ZWNvZGVzLCBieXRlY29kZXMpOwog
ICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxhdGlvbnMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9jb21waWxhdGlv
bnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlvbnMpOwogICAgIAogICAgIEpTQXJy
YXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGV2ZW50cy0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT1NSRXhpdFNpdGUuY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1ZhbHVlIE9TUkV4aXRTaXRlOjp0b0pT
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Y29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhSYXdQb2ludGVyKG1fY29kZUFkZHJl
c3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9yaWdpblN0YWNrOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykg
Y29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhY2suc2l6ZSgp
OyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYs
OSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQgewogCiBzdGF0aWMgQUxXQVlT
X0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVj
aWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwg
dW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gRUNNQSA5LjQuMi4zOiBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGUKICAg
ICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQoKTsKICAgICBpZiAoTElLRUxZKGlz
QXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUsNyArMjA4LDcgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZhc3RQYXRoLCBudWxscHRyKTsKIAog
ICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uLCBu
dWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzQ29uc3RydWN0b3IoKSkgewogICAg
ICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4o
Y29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
c3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5p
c09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLmdldChl
eGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVj
aWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxwdHIpOwogICAgICAgICAgICAgaWYg
KGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0aCwgbnVsbHB0cik7OwogICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICB9IGVsc2UgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbiwgbnVsbHB0cik7CiAKICAgICBp
ZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIyOCw3ICsyMzEsNyBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICBKU09iamVj
dCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0cnVjdG9yLCBhcmdzLCAiU3BlY2ll
cyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBjb25zdHJ1Y3RvciIpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3Vs
dDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2ll
c0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3T2JqZWN0KTsKIH0KQEAgLTI4NCwx
MCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGgKICAg
ICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CiAgICAgICAgIHVuc2lnbmVk
IHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5k
ZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2Jq
LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBleGVjLCB0
bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpAQCAtMzMwLDMxICszMzMsMzIgQEAg
dm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIAogICAgICAgICB1bnNpZ25l
ZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAgICAgIHVuc2lnbmVkIHRvID0gayAr
IHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0
eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5s
aW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmot
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIHRv
KSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
IH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1RvU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIC8vIDEu
IExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3Qgb24gdGhlIHRoaXMg
dmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZXhl
Yyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgLy8gMi4gTGV0
IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0g
SlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmpvaW4p
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUoZnVuYykgaXMgZmFsc2UsIHRoZW4g
bGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZCBPYmplY3QucHJvdG90eXBl
LnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4NywxOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMs
ICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc0FycmF5LT50cnlHZXRJ
bmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVudCkgewogICAgICAgICAgICAgZWxl
bWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMsMTQgKzQwNywxNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50
b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRo
aXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExl
bmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIg
Y2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1MiArNDI0LDUyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpTU3RyaW5nSm9pbmVyIHN0cmluZ0pv
aW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYgRU5BQkxFKElOVEwpCiAgICAgQXJn
TGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4
KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBjb252ZXJzaW9uRnVuY3Rpb24gPSBl
bGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcpOwot
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7
CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGNvbnZlcnNpb25G
dW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYgKGNhbGxUeXBlICE9IENhbGxUeXBl
OjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lv
bkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmpl
Y3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoZWxlbWVu
dC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEpT
VmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoY29u
dmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9IGNhbGwoZXhlYywgY29udmVyc2lv
bkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1lbnQsIGV4ZWMtPmVtcHR5TGlzdCgp
KTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBzdHJpbmdK
b2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAjZW5k
aWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQsMTYgQEAgc3RhdGljIGlubGluZSBi
b29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVj
U3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1N0cmluZyogc2VwYXJhdG9yLCB1
aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDUuIElmIGxlbiBpcyB6ZXJv
LCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0
dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0mIHZtID0gZXhlYy52bSgpOwotCiAg
ICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIpLgogICAgIEpTVmFsdWUgZWxlbWVu
dDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50MCBpcyB1bmRlZmluZWQgb3IgbnVs
bCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3aXNlLCBsZXQgUiBiZSA/IFRvU3Ry
aW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBzdGF0aWMgSlNWYWx1ZSBzbG93Sm9p
bihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0VtcHR5U3RyaW5nKCZleGVjKTsKICAg
ICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmluZygmZXhlYyk7Ci0gICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBMZXQgayBiZSAxLgpAQCAtNTI0LDcg
KzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4ZWNTdGF0ZSYgZXhlYywKICAgICBm
b3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2spIHsKICAgICAgICAgLy8gYi4gTGV0
IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSkuCiAgICAgICAgIEpTVmFsdWUgZWxl
bWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhl
YywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJZiBlbGVtZW50IGlzIHVuZGVmaW5l
ZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3RyaW5nOyBvdGhlcndpc2UsIGxldCBu
ZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUsNyArNTQyLDcgQEAgc3RhdGljIEpT
VmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAgICAgICAgICAgbmV4dCA9IGpzRW1w
dHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5leHQgPSBlbGVt
ZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0aGUgU3RyaW5nIHZhbHVlIHByb2R1
Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAtNTYxLDYgKzU2OCw5IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAKIAogc3RhdGljIGlubGluZSBKU1Zh
bHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBTdHJp
bmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
c3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6
IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhl
Y1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdKb2luZXIgam9pbmVyKHN0YXRlLCBz
ZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91
cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3duVG9CZU9LID0gZmFsc2U7CkBAIC01
OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZQog
ICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9y
LCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3VvdXNEb3VibGUo
KS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZhbHNlOwpAQCAtNjAy
LDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBmYXN0Sm9pbihFeGVjU3RhdGUKICAg
ICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBqc0RvdWJsZU51bWJlcih2YWx1ZSkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKCFob2xlc0tub3duVG9C
ZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoc3Rh
dGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZShzdGF0ZS52bSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhvbGVzTXVzdEZv
cndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGdlbmVy
YWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tub3duVG9CZU9LID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEpTVmFs
dWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNlOgogICAgIEpTU3RyaW5nSm9pbmVy
IGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgo
JnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3RhdGUsIGVsZW1lbnQpOwotICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAg
ICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYzMCw2ICs2NDAsOSBAQCBnZW5lcmFs
Q2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0pvaW4o
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUgPyBU
b09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRo
aXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBp
ZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0IGxlbiBiZSA/IFRvTGVuZ3RoKD8g
R2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0aCA9IHRvTGVuZ3RoKGV4ZWMsIHRo
aXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3IgaXMgdW5kZWZpbmVkLCBsZXQgc2Vw
YXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcgIiwiLgpAQCAtNjUzLDcgKzY2Niw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aCk7CiAgICAg
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihsZW5ndGg2NCkgPT0gbGVuZ3RoKTsK
ICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9IGpzU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVjLCB0aGlzT2JqZWN0LCBqc1NlcGFy
YXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBMZXQgc2VwIGJlID8gVG9TdHJpbmco
c2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0b3IgPSBzZXBhcmF0b3JWYWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVzZUZhc3RKb2luKHRoaXNPYmplY3Qp
KSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhp
c09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAgLTcwMSw3ICs3MTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0ID0gdGhpc09iai0+Z2V0
KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoIXRoaXNPYmot
Pm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGV4ZWMsIGxl
bmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKQEAgLTcxNCw2ICs3Mjcs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVl
KSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpAQCAtNzI2LDcgKzc0MSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmop
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKQEAgLTczOCw3ICs3
NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAg
ICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhl
YywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50
NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhv
ZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAg
ICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHN3aXRj
aCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAgLTc5OCw0MSArODEzLDQxIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBmb3IgKHVuc2lnbmVk
IGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKICAgICAgICAgdW5zaWduZWQg
dXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMgPSB0
aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7Ci0gICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIEpT
VmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2VyRXhpc3RzKSB7CiAgICAgICAgICAg
ICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGxvd2VyKTsKLSAgICAgICAgICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHVwcGVyRXhpc3Rz
ID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBwZXIpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAgICAgICBpZiAodXBwZXJFeGlzdHMp
IHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXQoZXhlYywgdXBwZXIp
OwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGlu
ZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAg
ICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0
eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZt
LmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFi
bGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsb3dlckV4aXN0cykg
ewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCB1cHBlciwg
bG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmICgh
dGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09i
amVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHBy
b3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUp
LnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChl
eGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwpAQCAtODU2LDcgKzg3Myw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9IGVsc2Ug
ewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRleChleGVjLCAwKTsKICAgICAgICAg
c2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihleGVjLCB0aGlzT2JqLCAwLCAxLCAw
LCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBwdXRMZW5ndGgoZXhlYywgdGhpc09i
aiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAgLTg2NywxMSArODg0LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIHsKICAgICAvLyBodHRwOi8v
ZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMvanMvY2xpZW50L2pzcmVmL2FycmF5
Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0aGlz
T2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0
KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlz
T2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAgLTg5MiwxNCArOTEwLDE0IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmVzdWx0ID0g
c3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0gYmVnaW4pOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGsg
PSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJv
cGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRp
b24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAo
dikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgbiwgdik7CkBAIC05
MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgog
ICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAg
ICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtOTMyLDcgKzk1MCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAKQEAgLTk2NywxMiArOTg1LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRlbGV0ZUNvdW50OyArK2spIHsK
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBr
ICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaywg
diwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgyLDcgKzEwMDAsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayArIGJlZ2lu
KTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0gc3RkOjptYXg8aW50PihleGVjLT5h
cmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRkaXRpb25hbEFyZ3MgPCBkZWxldGVD
b3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihleGVj
LCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFkZGl0aW9uYWxBcmdzID4gZGVsZXRl
Q291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50Rm9yU3BsaWNlPihl
eGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0aW9uYWxBcmdzLCBsZW5ndGgp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGlu
ZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGsgKyAyKSwgdHJ1ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTEwMTMsMjQgKzEwMzEsMjYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlmdChFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTUuNC40LjEzCiAKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVj
KTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CiAgICAg
aWYgKG5yQXJncykgewogICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTaGlm
dD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbnJBcmdzOyArK2spIHsKICAgICAg
ICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBrLCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKQEAgLTEwNDAsMjYgKzEwNjAsMjggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICAvLyAxNS40LjQuMTQKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4
ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsK
ICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdl
dExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBpbmRleCA9IGFy
Z3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgbGVuZ3RoKTsKICAgICBK
U1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBmb3IgKDsgaW5k
ZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0UHJvcGVydHko
ZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKCFl
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVh
bChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0x
MDY4LDYgKzEwOTAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhP
ZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxNS40LjQuMTUKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDg5LDE4ICsx
MTE0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAg
ICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUpOwogICAgIH0K
IAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZG8gewogICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmRl
eCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNP
YmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2Vh
cmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGluZGV4KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0gd2hpbGUgKGluZGV4LS0pOwog
CkBAIC0xMTA5LDIzICsxMTMzLDI1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKIAogc3RhdGljIGJvb2wgbW92ZUVsZW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgSlNBcnJheSogc291
cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWSghaGFzQW55QXJyYXlTdG9yYWdlKHNv
dXJjZS0+aW5kZXhpbmdUeXBlKCkpICYmICFzb3VyY2UtPnN0cnVjdHVyZSgpLT5ob2xlc011c3RG
b3J3YXJkVG9Qcm90b3R5cGUodm0pKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBzb3Vy
Y2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0SW5kZXgoZXhlYywgdGFyZ2V0T2Zmc2V0ICsg
aSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCBzb3VyY2UsIGkp
OwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVj
dEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCArIGksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xMTU0LDcgKzExODAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgY29uY2F0QXBwZW5kT25lKEV4CiAKICAgICBpZiAoIXJlc3VsdC0+YXBwZW5kTWVtY3B5KGV4
ZWMsIHZtLCAwLCBmaXJzdCkpIHsKICAgICAgICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0s
IHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKSkgewotICAgICAgICAgICAgQVNTRVJU
KHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAg
IH0KICAgICB9CkBAIC0xMTk5LDEyICsxMjI1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b1AKICAgICBJbmRleGluZ1R5cGUgdHlwZSA9IGZpcnN0QXJyYXktPm1l
cmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhzZWNvbmRUeXBlKTsKICAgICBpZiAodHlwZSA9PSBO
b25BcnJheSB8fCAhZmlyc3RBcnJheS0+Y2FuRmFzdENvcHkodm0sIHNlY29uZEFycmF5KSB8fCBm
aXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSA+PSBNSU5fU1BBUlNFX0FSUkFZX0lOREVY
KSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywg
bnVsbHB0ciwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJheVNpemUpOwotICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAg
ICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3RBcnJheSwgZmly
c3RBcnJheVNpemUpCiAgICAgICAgICAgICB8fCAhbW92ZUVsZW1lbnRzKGV4ZWMsIHZtLCByZXN1
bHQsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRBcnJheSwgc2Vjb25kQXJyYXlTaXplKSkgewotICAg
ICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Qm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTQgQEAgdm9pZCBCb29sZWFuQ29uc3RydWN0b3I6OmZp
bmlzaENyZWF0aW9uKAogLy8gRUNNQSAxNS42LjIKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYm9vbGVhbiA9IGpzQm9vbGVhbihleGVjLT5h
cmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIFN0cnVjdHVyZSogYm9vbGVhblN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIEJvb2xlYW5PYmplY3Qq
IG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBib29sZWFuU3RydWN0dXJl
KTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+dm0oKSwgYm9vbGVhbik7CisgICAg
Qm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlKHZtLCBib29sZWFuU3Ry
dWN0dXJlKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUodm0sIGJvb2xlYW4pOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMCAr
NDIsMTIgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdQogCiBKU1Zh
bHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlw
ZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0
aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhl
Yy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICByZXR1cm5lZEV4Y2VwdGlv
biA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQo
cmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2Nv
cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
dGNoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFC
TEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKworLy8gU2VlIGNvbW1lbnRzIGF0IHRo
ZSB0b3Agb2YgVGhyb3dTY29wZS5jcHAgZm9yIGRldGFpbHMgb24gaG93IENhdGNoU2NvcGVzIHdv
cmsuCisKK0NhdGNoU2NvcGU6OkNhdGNoU2NvcGUoVk0mIHZtLCBFeGNlcHRpb25FdmVudExvY2F0
aW9uIGxvY2F0aW9uKQorICAgIDogRXhjZXB0aW9uU2NvcGUodm0sIEV4Y2VwdGlvbkV2ZW50OjpD
YXRjaFNjb3BlRW50cnksIGxvY2F0aW9uKQoreworfQorCitDYXRjaFNjb3BlOjp+Q2F0Y2hTY29w
ZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlKTsKKwor
ICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZl
bnQ6OkNhdGNoU2NvcGVFeGl0LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKKyAgICAKKyAgICBpZiAo
bV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7CisgICAgICAgIGxvZ0V2ZW50SGVhZGVyKEV4
Y2VwdGlvbkV2ZW50OjpDYXRjaFNjb3BlRXhpdCwgbV9sb2NhdGlvbik7CisgICAgICAgIGlmICht
X3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKQorICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBj
aGVjayIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
dm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcykKKyAgICAgICAgICAgIFdU
RlJlcG9ydEJhY2t0cmFjZSgpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZtLmV4
Y2VwdGlvbigpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJ
Q0FUSU9OKQorICAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBDYXRjaFNjb3BlX2gKKyNkZWZpbmUgQ2F0Y2hTY29wZV9oCisKKyNpbmNsdWRlICJFeGNl
cHRpb25TY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBU
SU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNzIENhdGNoU2NvcGUgOiBwdWJsaWMg
RXhjZXB0aW9uU2NvcGUgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIENhdGNoU2Nv
cGUoVk0mLCBFeGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICBDYXRjaFNjb3BlKGNvbnN0IENh
dGNoU2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBDYXRjaFNjb3BlKENhdGNoU2NvcGUmJikgPSBkZWZh
dWx0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNhdGNoU2NvcGUoKTsKKworICAgIHZvaWQg
Y2xlYXJFeGNlcHRpb24oKQorICAgIHsKKyAgICAgICAgbV92bS5tX25lZWRFeGNlcHRpb25DaGVj
ayA9IGZhbHNlOworICAgICAgICBtX3ZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgfQorfTsKKwor
I2RlZmluZSBERUNMQVJFX0NBVENIX1NDT1BFKHZtX18pIFwKKyAgICBKU0M6OkNhdGNoU2NvcGUo
KHZtX18pLCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oX19GVU5DVElPTl9fLCBfX0ZJTEVf
XywgX19MSU5FX18pKQorCisjZWxzZSAvLyBub3QgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJ
RklDQVRJT04pCisKK2NsYXNzIENhdGNoU2NvcGUgOiBwdWJsaWMgRXhjZXB0aW9uU2NvcGUgewor
cHVibGljOgorICAgIEFMV0FZU19JTkxJTkUgQ2F0Y2hTY29wZShWTSYgdm0pCisgICAgICAgIDog
RXhjZXB0aW9uU2NvcGUodm0pCisgICAgeyB9CisgICAgQ2F0Y2hTY29wZShjb25zdCBDYXRjaFNj
b3BlJikgPSBkZWxldGU7CisgICAgQ2F0Y2hTY29wZShDYXRjaFNjb3BlJiYpID0gZGVmYXVsdDsK
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV92bS5jbGVhckV4
Y2VwdGlvbigpOyB9Cit9OworCisjZGVmaW5lIERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm1fXykgXAor
ICAgIEpTQzo6Q2F0Y2hTY29wZSgodm1fXykpCisKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9O
X1NDT1BFX1ZFUklGSUNBVElPTikKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
YXRjaFNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2RlZmluZSBCRUdJTl9OT19TRVRfUEMoKSBc
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsgICAgICBcCi0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcigmdm0sIGV4ZWMpCisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOyBcCisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7IFwKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSkKIAogI2lmbmRlZiBOREVCVUcKICNk
ZWZpbmUgU0VUX1BDX0ZPUl9TVFVCUygpIGRvIHsgXApAQCAtOTksMTAgKzEwMSwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2RlZmluZSBDSEVDS19FWENFUFRJT04oKSBkbyB7ICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIGRvRXhjZXB0aW9uRnV6emluZ0lmRW5hYmxlZChleGVjLCAiQ29t
bW9uU2xvd1BhdGhzIiwgcGMpOyAgIFwKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkgeyAgICAgICAgICAgXAotICAgICAgICAgICAgUkVUVVJOX1RPX1RIUk9XKGV4ZWMsIHBj
KTsgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkgeyAgIFwKKyAgICAgICAgICAgIFJFVFVSTl9UT19USFJPVyhleGVjLCBwYyk7ICAg
ICAgICAgICAgXAogICAgICAgICAgICAgRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIEVORCgpIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICBcCkBAIC0xNDQsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZGVm
aW5lIENBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIEV4ZWNTdGF0ZSogY2NlRXhlYyA9IChleGVjKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEluc3RydWN0aW9uKiBjY2VQQyA9IChw
Yyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICBDQUxMX0VORF9JTVBMKGNjZUV4ZWMsIExMSW50Ojpj
YWxsVG9UaHJvdyhjY2VFeGVjKSk7ICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKQEAgLTQy
Nyw3ICs0MjksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbXVsKQogICAgIEpTVmFsdWUg
bGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQgPSBPUF9DKDMpLmpz
VmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxlZnQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gcmln
aHQudG9OdW1iZXIoZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcihhICogYik7
CkBAIC00NDIsNyArNDQ0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3N1YikKICAgICBK
U1ZhbHVlIGxlZnQgPSBPUF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJpZ2h0ID0gT1Bf
QygzKS5qc1ZhbHVlKCk7CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBkb3VibGUg
YiA9IHJpZ2h0LnRvTnVtYmVyKGV4ZWMpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIo
YSAtIGIpOwpAQCAtNDU3LDEwICs0NTksMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Rp
dikKICAgICBKU1ZhbHVlIGxlZnQgPSBPUF9DKDIpLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJp
Z2h0ID0gT1BfQygzKS5qc1ZhbHVlKCk7CiAgICAgZG91YmxlIGEgPSBsZWZ0LnRvTnVtYmVyKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAg
ICBkb3VibGUgYiA9IHJpZ2h0LnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVy
KGEgLyBiKTsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7CkBAIC00NzIsNyAr
NDc0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX21vZCkKIHsKICAgICBCRUdJTigpOwog
ICAgIGRvdWJsZSBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0g
T1BfQygzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKGpz
TW9kKGEsIGIpKSk7CkBAIC00ODIsMTAgKzQ4NCwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcG93KQogewogICAgIEJFR0lOKCk7CiAgICAgZG91YmxlIGEgPSBPUF9DKDIpLmpzVmFsdWUo
KS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpT
VmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b051bWJlcihleGVj
KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAg
UkVUVVJOKGpzTnVtYmVyKG9wZXJhdGlvbk1hdGhQb3coYSwgYikpKTsKIH0KQEAgLTQ5NCw3ICs0
OTYsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbHNoaWZ0KQogewogICAgIEJFR0lOKCk7
CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3Qg
YiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJl
cihhIDw8IChiICYgMzEpKSk7CkBAIC01MDQsNyArNTA2LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3JzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMiku
anNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJF
VFVSTihKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b1VJ
bnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSA+PiAoYiAmIDMxKSkpOwpAQCAtNTE0
LDcgKzUxNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF91cnNoaWZ0KQogewogICAgIEJF
R0lOKCk7CiAgICAgdWludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICB1
aW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CiAgICAgUkVUVVJO
KGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGEgPj4gKGIgJiAzMSkpKSk7CkBAIC01MzEs
NyArNTMzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdGFuZCkKIHsKICAgICBCRUdJ
TigpOwogICAgIGludDMyX3QgYSA9IE9QX0MoMikuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGludDMy
X3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVt
YmVyKGEgJiBiKSk7CkBAIC01NDEsNyArNTQzLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2JpdG9yKQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVl
KCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpT
VmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9JbnQzMihleGVj
KTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSB8IGIpKTsKQEAgLTU1MSw3ICs1NTMsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfYml0eG9yKQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJf
dCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gT1BfQygzKS5q
c1ZhbHVlKCkudG9JbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSBeIGIpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBpbmxpbmUgYm9v
bCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1CiAgICAgICAgIHJldHVybiBiYXNlT2JqLT5o
YXNQcm9wZXJ0eShleGVjLCBpKTsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBwcm9wTmFtZS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gYmFzZU9iai0+
aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5j
cHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIHZvaWQgaW50ZXJwcmV0ZXJUaHJvd0luQ2FsbGVyKEV4ZWNTdGF0ZSoKIAogICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBlcnJvcik7CiAjaWYgTExJTlRfU0xPV19QQVRIX1RSQUNJ
TkcKLSAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgdm0tPmV4Y2VwdGlvbigpLCAi
LlxuIik7CisgICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHNjb3BlLmV4Y2VwdGlv
bigpLCAiLlxuIik7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nywx
NiArODcsMTkgQEAgYm9vbCBjaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqIGV4ZWMsIAogCiBK
U1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgTmFrZWRQdHI8RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRp
b24pCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1
c3koKSk7CiAKICAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKIAogICAgIFByb2dy
YW1FeGVjdXRhYmxlKiBwcm9ncmFtID0gUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBz
b3VyY2UpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwcm9ncmFtKTsKICAgICBp
ZiAoIXByb2dyYW0pIHsKLSAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT52bSgpLmV4
Y2VwdGlvbigpOwotICAgICAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHJldHVybmVkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApA
QCAtMTA1LDkgKzEwOCw5IEBAIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCAKICAgICBKU09iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50
b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShwcm9ncmFtLCBleGVjLCB0aGlzT2JqKTsKIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkgeworICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3Bl
LmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTE0Nyw5ICsxNTAsMTEgQEAgc3RhdGlj
IFN5bWJvbCogY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludAogCiBzdGF0aWMgSlNJbnRlcm5hbFBy
b21pc2UqIHJlamVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQogewotICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7Ci0gICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKLSAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24o
KSk7CisgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJy
ZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGds
b2JhbE9iamVjdCk7CiAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwogICAg
IHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwpAQCAtMTc2LDE3ICsxODEsMTkgQEAgSlNJbnRl
cm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZQogCiBKU0ludGVybmFsUHJvbWlzZSog
bG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBKU1ZhbHVlIGluaXRpYXRvcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0g
d3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KCFleGVjLT52bSgpLmlzQ29sbGVjdG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUo
KSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9B
U1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeSgpKTsKIAotICAgIFN5bWJvbCoga2V5ID0gY3JlYXRl
U3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZShleGVjLT52bSgpKTsKKyAgICBTeW1ib2wqIGtleSA9
IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1bGUodm0pOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsKIAogICAgIC8v
IEluc2VydCB0aGUgZ2l2ZW4gc291cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3Ry
eSBhcyB0aGUgZmV0Y2hlZCByZWdpc3RyeSBlbnRyeS4KICAgICBnbG9iYWxPYmplY3QtPm1vZHVs
ZUxvYWRlcigpLT5wcm92aWRlKGV4ZWMsIGtleSwgSlNNb2R1bGVMb2FkZXI6OlN0YXR1czo6RmV0
Y2gsIHNvdXJjZS52aWV3KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biByZWplY3RQcm9taXNlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CiAKICAgICByZXR1cm4gbG9hZEFu
ZEV2YWx1YXRlTW9kdWxlKGxvY2ssIGV4ZWMsIGdsb2JhbE9iamVjdCwga2V5LCBqc1VuZGVmaW5l
ZCgpLCBpbml0aWF0b3IpOwpAQCAtMjEzLDE4ICsyMjAsMjAgQEAgSlNJbnRlcm5hbFByb21pc2Uq
IGxvYWRNb2R1bGUoRXhlY1N0YXRlKgogCiBKU0ludGVybmFsUHJvbWlzZSogbG9hZE1vZHVsZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNWYWx1ZSBpbml0aWF0
b3IpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+dm0oKS5pc0NvbGxlY3Rv
ckJ1c3koKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1
c3koKSk7CiAKLSAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZvckVudHJ5UG9pbnRNb2R1
bGUoZXhlYy0+dm0oKSk7CisgICAgU3ltYm9sKiBrZXkgPSBjcmVhdGVTeW1ib2xGb3JFbnRyeVBv
aW50TW9kdWxlKHZtKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVj
LT52bUVudHJ5R2xvYmFsT2JqZWN0KCk7CiAKICAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIHNvdXJj
ZSBjb2RlIHRvIHRoZSBNb2R1bGVMb2FkZXIgcmVnaXN0cnkgYXMgdGhlIGZldGNoZWQgcmVnaXN0
cnkgZW50cnkuCiAgICAgLy8gRklYTUU6IEludHJvZHVjZSBKU1NvdXJjZUNvZGUgb2JqZWN0IHRv
IHdyYXAgYXJvdW5kIHRoaXMgc291cmNlLgogICAgIGdsb2JhbE9iamVjdC0+bW9kdWxlTG9hZGVy
KCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpGZXRjaCwgc291
cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHJlamVj
dFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0KTsKIAogICAgIHJldHVybiBsb2FkTW9kdWxlKGxv
Y2ssIGV4ZWMsIGdsb2JhbE9iamVjdCwga2V5LCBqc1VuZGVmaW5lZCgpLCBpbml0aWF0b3IpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZU9iamVjdC5j
cHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnNvbGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsMTIgKzE5NiwxNCBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNBc3NlcnQoRXhlY1N0YXRlKiBleGVj
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYm9vbCBj
b25kaXRpb24gPSBleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBp
ZiAoY29uZGl0aW9uKQpAQCAtMjI1LDYgKzIyNyw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29uc29sZVByb3RvRnVuY1Byb2ZpbGUoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMjM2LDcgKzI0MCw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcm
IHRpdGxlKHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGNsaWVudC0+cHJvZmlsZShleGVjLCB0aXRsZSk7CkBA
IC0yNDUsNiArMjQ5LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5j
UHJvZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNs
aWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50
KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CkBAIC0yNTYsNyArMjYyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUodmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCiAgICAgY2xpZW50LT5wcm9maWxlRW5kKGV4ZWMsIHRpdGxlKTsKQEAgLTI2NSw2ICsy
NzEsOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUYWtlSGVhcFNu
YXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50
KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsK
ICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTI3Niw3ICsyODQsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1ZVRvU3Ry
aW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBjbGllbnQtPnRha2VIZWFwU25hcHNob3QoZXhlYywgdGl0bGUpOwpAQCAtMjkyLDYg
KzMwMCw4IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZygKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWUoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICgh
Y2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtMzAxLDcgKzMxMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAgICAgdGl0bGUgPSBBU0NJSUxpdGVyYWwoImRlZmF1bHQiKTsKICAgICBlbHNlIHsK
ICAgICAgICAgdGl0bGUgPSB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTMxMSw2ICszMjEsOCBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1bmNUaW1lRW5kKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xlQ2xpZW50KiBjbGllbnQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTMyMCw3
ICszMzIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgIHRpdGxlID0gIEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdCIpOwogICAgIGVsc2UgewogICAgICAg
ICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoZXhlYywgZXhlYy0+YXJndW1lbnQo
MCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAgc3RhdGljIGRvdWJsZSBtaWxsaXNlY29uZHNG
cm9tQ29tcG9uZW50cwogSlNPYmplY3QqIGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpbnQgbnVtQXJncyA9IGFyZ3Muc2l6ZSgp
OwogCiAgICAgZG91YmxlIHZhbHVlOwpAQCAtMTY3LDcgKzE2OCw3IEBAIEpTT2JqZWN0KiBjb25z
dHJ1Y3REYXRlKEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgdmFsdWUgPSBtaWxsaXNlY29uZHNG
cm9tQ29tcG9uZW50cyhleGVjLCBhcmdzLCBXVEY6OkxvY2FsVGltZSk7CiAKICAgICBTdHJ1Y3R1
cmUqIGRhdGVTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9iamVjdC0+ZGF0ZVN0cnVjdHVyZSgpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gRGF0ZUluc3Rh
bmNlOjpjcmVhdGUodm0sIGRhdGVTdHJ1Y3R1cmUsIHZhbHVlKTsKQEAgLTIwMiwxMCArMjAzLDEy
IEBAIENhbGxUeXBlIERhdGVDb25zdHJ1Y3Rvcjo6Z2V0Q2FsbERhdGEoSlMKIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUGFyc2UoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIFN0cmluZyBkYXRlU3RyID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
cGFyc2VEYXRlKGV4ZWMtPnZtKCksIGRhdGVTdHIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihwYXJzZURhdGUodm0sIGRhdGVTdHIpKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwMyw3ICs2MDMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0
ZVByb3RvRnVuY1RvUHJpbWl0aXZlU3ltYm9sKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1Zh
bHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCAiRGF0ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSBleHBlY3RlZCB8dGhpc3wg
dG8gYmUgYW4gb2JqZWN0LiIpOwpAQCAtNjE0LDcgKzYxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogICAgIEpTVmFsdWUgaGludFZhbHVlID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0eXBlID0g
dG9QcmVmZXJyZWRQcmltaXRpdmVUeXBlKGV4ZWMsIGhpbnRWYWx1ZSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICh0eXBl
ID09IE5vUHJlZmVyZW5jZSkKQEAgLTExMjMsMjAgKzExMjQsMjEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1bmNUb0pTT04oRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZXhlYywgTm90U3RyaWN0TW9kZSkp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
IAogICAgIEpTVmFsdWUgdGltZVZhbHVlID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjLCBQcmVm
ZXJOdW1iZXIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKICAgICBpZiAodGltZVZhbHVlLmlzTnVtYmVyKCkgJiYgISh0aW1lVmFsdWUuaXNJ
bnQzMigpIHx8IHN0ZDo6aXNmaW5pdGUodGltZVZhbHVlLmFzRG91YmxlKCkpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKLSAgICBKU1ZhbHVlIHRvSVNPVmFs
dWUgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRvSVNPU3Ry
aW5nKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgSlNWYWx1ZSB0b0lTT1Zh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9JU09TdHJpbmcpOwor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC0xMTQ1
LDcgKzExNDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
InRvSVNPU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBjYWxsKGV4ZWMsIGFzT2JqZWN0KHRvSVNPVmFsdWUpLCBjYWxsVHlwZSwgY2FsbERhdGEsIG9i
amVjdCwgZXhlYy0+ZW1wdHlMaXN0KCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBpZiAocmVzdWx0LmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoInRv
SVNPU3RyaW5nIGRpZCBub3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlIikpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMSBAQCB2b2lkIEVy
cm9yQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFZNCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5h
cmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAg
U3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0
cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAko
cmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsNyBAQCB2b2lkIEVycm9y
SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTCiBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6c2Fu
aXRpemVkVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNW
YWx1ZSBuYW1lVmFsdWU7CiAgICAgYXV0byBuYW1lUHJvcGVydE5hbWUgPSB2bS5wcm9wZXJ0eU5h
bWVzLT5uYW1lOwpAQCAtMTc3LDE0ICsxNzgsMTQgQEAgU3RyaW5nIEVycm9ySW5zdGFuY2U6OnNh
bml0aXplZFRvU3RyaW5nKAogICAgICAgICB9CiAgICAgICAgIGN1cnJlbnRPYmogPSBvYmotPmdl
dFByb3RvdHlwZURpcmVjdCgpOwogICAgIH0KLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIFN0cmluZyBuYW1lU3RyaW5n
OwogICAgIGlmICghbmFtZVZhbHVlKQogICAgICAgICBuYW1lU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJFcnJvciIpOwogICAgIGVsc2UgewogICAgICAgICBuYW1lU3RyaW5nID0gbmFtZVZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIH0KIApAQCAtMTkzLDE0ICsxOTQsMTQgQEAgU3RyaW5nIEVycm9y
SW5zdGFuY2U6OnNhbml0aXplZFRvU3RyaW5nKAogICAgIFByb3BlcnR5U2xvdCBtZXNzYWdlU2xv
dCh0aGlzLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKICAg
ICBpZiAoSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzLCBleGVjLCBtZXNzYWdlUHJv
cGVydE5hbWUsIG1lc3NhZ2VTbG90KSAmJiBtZXNzYWdlU2xvdC5pc1ZhbHVlKCkpCiAgICAgICAg
IG1lc3NhZ2VWYWx1ZSA9IG1lc3NhZ2VTbG90LmdldFZhbHVlKGV4ZWMsIG1lc3NhZ2VQcm9wZXJ0
TmFtZSk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZzsKICAgICBpZiAoIW1lc3Nh
Z2VWYWx1ZSkKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IFN0cmluZygpOwogICAgIGVsc2Ugewog
ICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKIAogICAgIC8vIDMuIExl
dCBuYW1lIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJuYW1lIi4KICAgICBKU1ZhbHVlIG5hbWUgPSB0aGlzT2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5hbWUpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNC4g
SWYgbmFtZSBpcyB1bmRlZmluZWQsIHRoZW4gbGV0IG5hbWUgYmUgIkVycm9yIjsgZWxzZSBsZXQg
bmFtZSBiZSBUb1N0cmluZyhuYW1lKS4KQEAgLTk0LDEzICs5NCwxMyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG5hbWVTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5hbWVTdHJpbmcgPSBuYW1lLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICAv
LyA1LiBMZXQgbXNnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50ICJtZXNzYWdlIi4KICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgLy8gKHNpYykKQEAgLTExMSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGVycm9yUHJvdG9GCiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBTdHJpbmcoKTsK
ICAgICBlbHNlIHsKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2UudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25FdmVudC5oIgorCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04p
CisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisgICAg
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpFeGNlcHRpb25FdmVu
dCBldmVudCkKK3sKKyAgICBjb25zdCBjaGFyKiBldmVudE5hbWU7CisgICAgc3dpdGNoIChldmVu
dCkgeworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29wZUVudHJ5OgorICAg
ICAgICBldmVudE5hbWUgPSAiQ2F0Y2hTY29wZSBFbnRyeSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6Q2F0Y2hTY29wZUV4aXQ6CisgICAgICAgIGV2ZW50
TmFtZSA9ICJDYXRjaFNjb3BlIEV4aXQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpTQzo6
RXhjZXB0aW9uRXZlbnQ6Ok5lZWRFeGNlcHRpb25DaGVjazoKKyAgICAgICAgZXZlbnROYW1lID0g
Ik5lZWQgZXhjZXB0aW9uIGNoZWNrIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4
Y2VwdGlvbkV2ZW50OjpUaHJvd1Njb3BlRW50cnk6CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJv
d1Njb3BlIEVudHJ5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKU0M6OkV4Y2VwdGlvbkV2
ZW50OjpUaHJvd1Njb3BlRXhpdDoKKyAgICAgICAgZXZlbnROYW1lID0gIlRocm93U2NvcGUgRXhp
dCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSlNDOjpFeGNlcHRpb25FdmVudDo6VGhyb3c6
CisgICAgICAgIGV2ZW50TmFtZSA9ICJUaHJvdyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG91dC5wcmludChldmVudE5hbWUpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnQuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCituYW1lc3BhY2UgSlNDIHsKKyAgICAKK2VudW0gY2xh
c3MgRXhjZXB0aW9uRXZlbnQgeworICAgIENhdGNoU2NvcGVFbnRyeSwKKyAgICBDYXRjaFNjb3Bl
RXhpdCwKKyAgICBOZWVkRXhjZXB0aW9uQ2hlY2ssCisgICAgVGhyb3dTY29wZUVudHJ5LAorICAg
IFRocm93U2NvcGVFeGl0LAorICAgIFRocm93Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
bmFtZXNwYWNlIFdURiB7CisgICAgCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpFeGNlcHRpb25FdmVudCk7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25FdmVudExvY2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRp
b24uaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KyAgICAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24gbG9jYXRpb24pCit7CisgICAgb3V0LnByaW50KGxvY2F0aW9uLmZ1bmN0
aW9uTmFtZSwgIiBAICIsIGxvY2F0aW9uLmZpbGUsICI6IiwgbG9jYXRpb24ubGluZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDU0OTgp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5o
OjIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50
TG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFj
ZSBKU0MgeworCitzdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKKyAgICBUaHJvd1Njb3BlTG9j
YXRpb24oKSB7IH0KKyAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorICAgICAgICA6IGZ1bmN0aW9u
TmFtZShmdW5jdGlvbk5hbWUpCisgICAgICAgICwgZmlsZShmaWxlKQorICAgICAgICAsIGxpbmUo
bGluZSkKKyAgICB7IH0KKyAgICAKKyAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxs
cHRyIH07CisgICAgY29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBs
aW5lIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25FdmVudExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXN0cnVjdCBUaHJvd1Njb3BlTG9jYXRpb24gewotICAgIFRocm93U2Nv
cGVMb2NhdGlvbigpIHsgfQotICAgIFRocm93U2NvcGVMb2NhdGlvbihjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCitzdHJ1Y3QgRXhjZXB0
aW9uRXZlbnRMb2NhdGlvbiB7CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbigpIHsgfQorICAg
IEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQogICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlv
bk5hbWUpCiAgICAgICAgICwgZmlsZShmaWxlKQogICAgICAgICAsIGxpbmUobGluZSkKQEAgLTQx
LDMgKzQxLDExIEBAIHN0cnVjdCBUaHJvd1Njb3BlTG9jYXRpb24gewogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2Nh
dGlvbik7CisgICAgCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmbmRlZiBFeGNlcHRpb25IZWxwZXJzX2gK
ICNkZWZpbmUgRXhjZXB0aW9uSGVscGVyc19oCiAKKyNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAj
aW5jbHVkZSAiRXJyb3JJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiVGhyb3dTY29wZS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvblNjb3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGNlcHRpb25TY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgorCisjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworICAgIAorI2lmIEVOQUJMRShFWENF
UFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAorRXhjZXB0aW9uU2NvcGU6OkV4Y2VwdGlv
blNjb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnQgZW50cnlFdmVudCwgRXhjZXB0aW9uRXZlbnRM
b2NhdGlvbiBsb2NhdGlvbikKKyAgICA6IG1fdm0odm0pCisgICAgLCBtX3ByZXZpb3VzU2NvcGUo
dm0ubV90b3BFeGNlcHRpb25TY29wZSkKKyAgICAsIG1fbG9jYXRpb24obG9jYXRpb24pCisgICAg
LCBtX2RlcHRoKG1fcHJldmlvdXNTY29wZSA/IG1fcHJldmlvdXNTY29wZS0+bV9kZXB0aCArIDEg
OiAwKQoreworICAgIG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSA9IHRoaXM7CisgICAgCisgICAg
aWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAgICAgICBsb2dFdmVudEhlYWRl
cihlbnRyeUV2ZW50LCBtX2xvY2F0aW9uKTsKKyAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0
aW9uQ2hlY2spCisgICAgICAgICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7CisgICAgICAg
IGRhdGFMb2coIlxuIik7CisgICAgICAgIAorICAgICAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0
aW9uRXZlbnRzV2l0aFN0YWNrVHJhY2VzKQorICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNl
KCk7CisgICAgfQorfQorCitFeGNlcHRpb25TY29wZTo6fkV4Y2VwdGlvblNjb3BlKCkKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9uU2NvcGUpOworICAgIG1fdm0ubV90
b3BFeGNlcHRpb25TY29wZSA9IG1fcHJldmlvdXNTY29wZTsKK30KKwordm9pZCBFeGNlcHRpb25T
Y29wZTo6bG9nRXZlbnQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRp
b24gbG9jYXRpb24pCit7CisgICAgbG9nRXZlbnRIZWFkZXIoZXZlbnQsIGxvY2F0aW9uKTsKKyAg
ICBkYXRhTG9nKCJcbiIpOworfQorCit2b2lkIEV4Y2VwdGlvblNjb3BlOjpsb2dFdmVudEhlYWRl
cihFeGNlcHRpb25FdmVudCBldmVudCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikK
K3sKKyAgICBkYXRhTG9nKCI8IiwgbV92bS5tX2V4Y2VwdGlvbkV2ZW50Q291bnQrKywgIj4gWyIs
IG1fZGVwdGgsICJdICIsIGV2ZW50LCAiOiAiLCBsb2NhdGlvbik7Cit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25T
Y29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvblNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXhjZXB0aW9uU2Nv
cGVfaAorI2RlZmluZSBFeGNlcHRpb25TY29wZV9oCisKKyNpbmNsdWRlICJWTS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKyAgICAKK2NsYXNzIEV4Y2VwdGlvbjsKKyAgICAKKyNpZiBFTkFCTEUoRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNzIEV4Y2VwdGlvblNjb3BlIHsK
K3B1YmxpYzoKKyAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgdW5zaWdu
ZWQgZGVwdGgoKSBjb25zdCB7IHJldHVybiBtX2RlcHRoOyB9CisgICAgRXhjZXB0aW9uKiBleGNl
cHRpb24oKQorICAgIHsKKyAgICAgICAgbV92bS5tX25lZWRFeGNlcHRpb25DaGVjayA9IGZhbHNl
OworICAgICAgICByZXR1cm4gbV92bS5leGNlcHRpb24oKTsKKyAgICB9CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgRXhjZXB0aW9uU2NvcGUoVk0mLCBFeGNlcHRpb25FdmVudCBlbnRyeUV2ZW50LCBF
eGNlcHRpb25FdmVudExvY2F0aW9uKTsKKyAgICBFeGNlcHRpb25TY29wZShjb25zdCBFeGNlcHRp
b25TY29wZSYpID0gZGVsZXRlOworICAgIEV4Y2VwdGlvblNjb3BlKEV4Y2VwdGlvblNjb3BlJiYp
ID0gZGVmYXVsdDsKKyAgICB+RXhjZXB0aW9uU2NvcGUoKTsKKworICAgIHZvaWQgbG9nRXZlbnQo
RXhjZXB0aW9uRXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOworICAgIHZvaWQgbG9nRXZl
bnRIZWFkZXIoRXhjZXB0aW9uRXZlbnQsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOworCisgICAg
Vk0mIG1fdm07CisgICAgRXhjZXB0aW9uU2NvcGUqIG1fcHJldmlvdXNTY29wZTsKKyAgICBFeGNl
cHRpb25FdmVudExvY2F0aW9uIG1fbG9jYXRpb247CisgICAgdW5zaWduZWQgbV9kZXB0aDsKK307
CisgICAgCisjZWxzZSAvLyBub3QgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04p
CisgICAgCitjbGFzcyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElO
RSBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9CisgICAgQUxXQVlTX0lOTElORSBFeGNl
cHRpb24qIGV4Y2VwdGlvbigpIHsgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7IH0KKworcHJvdGVj
dGVkOgorICAgIEFMV0FZU19JTkxJTkUgRXhjZXB0aW9uU2NvcGUoVk0mIHZtKQorICAgICAgICA6
IG1fdm0odm0pCisgICAgeyB9CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2Nv
cGUmKSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBWTSYgbV92bTsKK307CisgICAgCisjZW5kaWYgLy8gRU5BQkxFKEVYQ0VQ
VElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEV4Y2VwdGlvblNjb3BlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDcgKzEyNiw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RG
dW5jdGlvblNraXBwaW5nRXZhbEUKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN1YmNsYXNzU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
bmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPmZ1bmN0aW9uU3RydWN0dXJlKCkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIGZ1bmN0aW9uLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCksIHN1YmNsYXNzU3Ry
dWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYwLDcgKzE2MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8K
ICAgICAvLyBFbHNlIHNldCB0aGUgbGVuZ3RoIG93biBwcm9wZXJ0eSBvZiBGIHRvIDAuCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBpZiAodGFyZ2V0T2JqZWN0LT5oYXNPd25Qcm9wZXJ0
eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSkgewotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgICAgIC8vIGEuIExldCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgVGFyZ2V0IG1p
bnVzIHRoZSBsZW5ndGggb2YgQS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjA1NDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDEzICsyMTksMTYgQEAgYm9vbCBHZW5lcmljQXJn
dW1lbnRzPFR5cGU+OjpkZWZpbmVPd25QcgogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIHZvaWQg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywg
VmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgVHlwZSogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShp
ICsgb2Zmc2V0KSkKICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0g
dGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGV4ZWMtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGV4ZWMsIGkg
KyBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPnZtKCkuZXhjZXB0aW9u
KCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDE1ICs3MywxNyBAQCBHZXR0ZXJTZXR0ZXIqIEdldHRlclNldHRlcjo6
d2l0aFNldHRlcihWCiAKIEpTVmFsdWUgY2FsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gRklY
TUU6IFNvbWUgY2FsbGVycyBtYXkgaW52b2tlIGdldCgpIHdpdGhvdXQgY2hlY2tpbmcgZm9yIGFu
IGV4Y2VwdGlvbiBmaXJzdC4KICAgICAvLyBXZSB3b3JrIGFyb3VuZCB0aGF0IGJ5IGNoZWNraW5n
IGhlcmUuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gZXhl
Yy0+ZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwogCiAgICAg
SlNPYmplY3QqIGdldHRlciA9IGpzQ2FzdDxHZXR0ZXJTZXR0ZXIqPihnZXR0ZXJTZXR0ZXIpLT5n
ZXR0ZXIoKTsKIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBl
ID0gZ2V0dGVyLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBj
YWxsRGF0YSk7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CiAgICAgcmV0dXJuIGNhbGwoZXhlYywg
Z2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGJhc2UsIEFyZ0xpc3QoKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOSArODMsMTEgQEAgdm9pZCBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3Q6OmRpcwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGlu
c3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdExvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJp
bmcgdmFsdWUgPSB0YXJnZXQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGRh
dGFMb2codmFsdWUsICJcbiIpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRl
cm5hbEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDcgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogewogCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgLy8gV2UgYWxsb3cgbmV3VGFyZ2V0ID09IEpTVmFsdWUoKSBiZWNhdXNl
IHRoZSBBUEkgbmVlZHMgdG8gYmUgYWJsZSB0byBjcmVhdGUgY2xhc3NlcyB3aXRob3V0IGhhdmlu
ZyBhIHJlYWwgSlMgZnJhbWUuCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgYWxsb3cgc3ViY2xhc3Np
bmcgaW4gdGhlIEFQSSB3ZSBqdXN0IHRyZWF0IG5ld1RhcmdldCA9PSBKU1ZhbHVlKCkgYXMgbmV3
VGFyZ2V0ID09IGV4ZWMtPmNhbGxlZSgpCiAgICAgQVNTRVJUKCFuZXdUYXJnZXQgfHwgbmV3VGFy
Z2V0LmlzQ29uc3RydWN0b3IoKSk7CkBAIC0xMTIsMTMgKzExMywxMyBAQCBTdHJ1Y3R1cmUqIElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsCiAKICAgICAgICAgICAgIC8vIE5vdGUsIFJlZmxl
Y3QuY29uc3RydWN0IG1pZ2h0IGNhdXNlIHRoZSBwcm9maWxlIHRvIGNodXJuIGJ1dCB3ZSBkb24n
dCBjYXJlLgogICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5ld1RhcmdldC5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgICAgICAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgICAgIGlmIChKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHByb3RvdHlwZVZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0RnVuY3Rpb24t
PnJhcmVEYXRhKHZtKS0+Y3JlYXRlSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25TdHJ1Y3R1cmVG
cm9tQmFzZSh2bSwgcHJvdG90eXBlLCBiYXNlQ2xhc3MpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IG5ld1RhcmdldC5nZXQoZXhlYywgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGlmIChK
U09iamVjdCogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHByb3RvdHlwZVZh
bHVlKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgb25seSBoYXBwZW5zIGlmIHNvbWVvbmUg
UmVmbGVjdC5jb25zdHJ1Y3RzIG91ciBidWlsdGluIGNvbnN0cnVjdG9yIHdpdGggYW5vdGhlciBi
dWlsdGluIGNvbnN0cnVjdG9yIGFzIHRoZSBuZXcudGFyZ2V0LgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDkgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHNlYXJj
aExvY2FsZURhdGEoYwogCiB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgbG9jYWxlcywgSlNWYWx1ZSBvcHRpb25zVmFsdWUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICAvLyAxMC4xLjEgSW5pdGlhbGl6ZUNvbGxhdG9yIChjb2xsYXRv
ciwgbG9jYWxlcywgb3B0aW9ucykgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBjb2xsYXRv
ciBoYXMgYW4gW1tpbml0aWFsaXplZEludGxPYmplY3RdXSBpbnRlcm5hbCBzbG90IHdpdGggdmFs
dWUgdHJ1ZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgIC8vIDIuIFNldCBjb2xs
YXRvci5bW2luaXRpYWxpemVkSW50bE9iamVjdF1dIHRvIHRydWUuCkBAIC0xNjksNyArMTcyLDcg
QEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIC8vIDMuIExl
dCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAg
ICAgYXV0byByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdChzdGF0ZSwg
bG9jYWxlcyk7CiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDUuIElmIG9wdGlvbnMgaXMgdW5k
ZWZpbmVkLCB0aGVuCkBAIC0xODEsMTQgKzE4NCwxNCBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5p
dGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJlIFRvT2JqZWN0
KG9wdGlvbnMpLgogICAgICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2JqZWN0KCZzdGF0
ZSk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gNy4gTGV0IHUgYmUg
R2V0T3B0aW9uKG9wdGlvbnMsICJ1c2FnZSIsICJzdHJpbmciLCDCqyJzb3J0IiwgInNlYXJjaCLC
uywgInNvcnQiKS4KLSAgICBTdHJpbmcgdXNhZ2VTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0
YXRlLCBvcHRpb25zLCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPnVzYWdlLCB7ICJzb3J0Iiwg
InNlYXJjaCIgfSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIi
LCAic29ydCIpOworICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdlLCB7ICJzb3J0IiwgInNlYXJjaCIg
fSwgInVzYWdlIG11c3QgYmUgZWl0aGVyIFwic29ydFwiIG9yIFwic2VhcmNoXCIiLCAic29ydCIp
OwogICAgIC8vIDguIFJldHVybklmQWJydXB0KHUpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgLy8gOS4gU2V0IGNvbGxhdG9yLltbdXNhZ2VdXSB0byB1LgogICAgIGlmICh1c2Fn
ZVN0cmluZyA9PSAic29ydCIpCkBAIC0yMTIsOSArMjE1LDkgQEAgdm9pZCBJbnRsQ29sbGF0b3I6
OmluaXRpYWxpemVDb2xsYXRvcihFeAogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG9wdDsK
IAogICAgIC8vIDEzLiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywgImxvY2FsZU1h
dGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwgImJlc3QgZml0IsK7LCAiYmVzdCBmaXQiKS4K
LSAgICBTdHJpbmcgbWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0
YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3Qg
Zml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVz
dCBmaXRcIiIsICJiZXN0IGZpdCIpOworICAgIFN0cmluZyBtYXRjaGVyID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAi
bG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxv
b2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDE0LiBSZXR1cm5J
ZkFicnVwdChtYXRjaGVyKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDE1
LiBTZXQgb3B0LltbbG9jYWxlTWF0Y2hlcl1dIHRvIG1hdGNoZXIuCiAgICAgb3B0LmFkZChBU0NJ
SUxpdGVyYWwoImxvY2FsZU1hdGNoZXIiKSwgbWF0Y2hlcik7CkBAIC0yMzMsMTYgKzIzNiwxNiBA
QCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgewogICAgICAg
ICBTdHJpbmcgbnVtZXJpY1N0cmluZzsKICAgICAgICAgYm9vbCB1c2VzRmFsbGJhY2s7Ci0gICAg
ICAgIGJvb2wgbnVtZXJpYyA9IGludGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBzdGF0
ZS52bSgpLnByb3BlcnR5TmFtZXMtPm51bWVyaWMsIHVzZXNGYWxsYmFjayk7Ci0gICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgYm9vbCBudW1lcmljID0gaW50bEJvb2xl
YW5PcHRpb24oc3RhdGUsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPm51bWVyaWMsIHVzZXNG
YWxsYmFjayk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICghdXNlc0ZhbGxiYWNrKQogICAgICAgICAgICAg
bnVtZXJpY1N0cmluZyA9IEFTQ0lJTGl0ZXJhbChudW1lcmljID8gInRydWUiIDogImZhbHNlIik7
CiAgICAgICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJrbiIpLCBudW1lcmljU3RyaW5nKTsKICAg
ICB9CiAgICAgewotICAgICAgICBTdHJpbmcgY2FzZUZpcnN0ID0gaW50bFN0cmluZ09wdGlvbihz
dGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVw
cGVyIiwgImxvd2VyIiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0IG11c3QgYmUgZWl0aGVyIFwidXBw
ZXJcIiwgXCJsb3dlclwiLCBvciBcImZhbHNlXCIiLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBTdHJpbmcgY2FzZUZpcnN0ID0gaW50bFN0cmlu
Z09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+Y2FzZUZpcnN0LCB7ICJ1
cHBlciIsICJsb3dlciIsICJmYWxzZSIgfSwgImNhc2VGaXJzdCBtdXN0IGJlIGVpdGhlciBcInVw
cGVyXCIsIFwibG93ZXJcIiwgb3IgXCJmYWxzZVwiIiwgbnVsbHB0cik7CisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJrZiIpLCBjYXNlRmlyc3QpOwogICAgIH0KQEAgLTI3Nyw5
ICsyODAsOSBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAg
bV9udW1lcmljID0gKHJlc3VsdC5nZXQoQVNDSUlMaXRlcmFsKCJrbiIpKSA9PSAidHJ1ZSIpOwog
CiAgICAgLy8gMjQuIExldCBzIGJlIEdldE9wdGlvbihvcHRpb25zLCAic2Vuc2l0aXZpdHkiLCAi
c3RyaW5nIiwgwqsiYmFzZSIsICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IsK7LCB1bmRlZmlu
ZWQpLgotICAgIFN0cmluZyBzZW5zaXRpdml0eVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3Rh
dGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+c2Vuc2l0aXZpdHksIHsgImJh
c2UiLCAiYWNjZW50IiwgImNhc2UiLCAidmFyaWFudCIgfSwgInNlbnNpdGl2aXR5IG11c3QgYmUg
ZWl0aGVyIFwiYmFzZVwiLCBcImFjY2VudFwiLCBcImNhc2VcIiwgb3IgXCJ2YXJpYW50XCIiLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgc2Vuc2l0aXZpdHlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9u
KHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIs
ICJhY2NlbnQiLCAiY2FzZSIsICJ2YXJpYW50IiB9LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRo
ZXIgXCJiYXNlXCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxw
dHIpOwogICAgIC8vIDI1LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIDI2LiBJZiBzIGlzIHVuZGVmaW5lZCwgdGhlbgogICAgIC8vIGEuIElm
IHUgaXMgInNvcnQiLCB0aGVuIGxldCBzIGJlICJ2YXJpYW50Ii4KQEAgLTMwMCwxMSArMzAzLDEx
IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKIAogICAgIC8vIDI4
LiBMZXQgaXAgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJpZ25vcmVQdW5jdHVhdGlvbiIsICJib29s
ZWFuIiwgdW5kZWZpbmVkLCBmYWxzZSkuCiAgICAgYm9vbCB1c2VzRmFsbGJhY2s7Ci0gICAgYm9v
bCBpZ25vcmVQdW5jdHVhdGlvbiA9IGludGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBz
dGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPmlnbm9yZVB1bmN0dWF0aW9uLCB1c2VzRmFsbGJhY2sp
OworICAgIGJvb2wgaWdub3JlUHVuY3R1YXRpb24gPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0ZSwg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+aWdub3JlUHVuY3R1YXRpb24sIHVzZXNGYWxsYmFj
ayk7CiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAgaWdub3JlUHVuY3R1YXRpb24gPSBm
YWxzZTsKICAgICAvLyAyOS4gUmV0dXJuSWZBYnJ1cHQoaXApLgotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAgICAgLy8gMzAuIFNldCBjb2xsYXRvci5bW2lnbm9yZVB1bmN0dWF0aW9uXV0g
dG8gaXAuCiAgICAgbV9pZ25vcmVQdW5jdHVhdGlvbiA9IGlnbm9yZVB1bmN0dWF0aW9uOwpAQCAt
MzE4LDExICszMjEsMTMgQEAgdm9pZCBJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihF
eAogCiB2b2lkIEludGxDb2xsYXRvcjo6Y3JlYXRlQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICBBU1NFUlQoIW1fY29sbGF0b3IpOwogCiAgICAgaWYgKCFtX2lu
aXRpYWxpemVkQ29sbGF0b3IpIHsKICAgICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKHN0YXRlLCBq
c1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgfQogCiAgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CkBA
IC00MTYsNiArNDIxLDkgQEAgY29uc3QgY2hhciogSW50bENvbGxhdG9yOjpzZW5zaXRpdml0eVN0
cgogCiBKU09iamVjdCogSW50bENvbGxhdG9yOjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBz
dGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEwLjMuNSBJbnRsLkNvbGxhdG9yLnByb3Rv
dHlwZS5yZXNvbHZlZE9wdGlvbnMoKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIFRoZSBmdW5jdGlv
biByZXR1cm5zIGEgbmV3IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFuZCBhdHRyaWJ1dGVzIGFy
ZSBzZXQgYXMgaWYKICAgICAvLyBjb25zdHJ1Y3RlZCBieSBhbiBvYmplY3QgbGl0ZXJhbCBhc3Np
Z25pbmcgdG8gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgdGhlCkBAIC00MjcsMTAg
KzQzNSw5IEBAIEpTT2JqZWN0KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucygKIAogICAg
IGlmICghbV9pbml0aWFsaXplZENvbGxhdG9yKSB7CiAgICAgICAgIGluaXRpYWxpemVDb2xsYXRv
cihzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCgh
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2Nv
cGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAg
SlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwogICAgIG9w
dGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBqc1N0cmluZygm
c3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT51c2FnZSwganNOb250cml2aWFsU3RyaW5nKCZzdGF0ZSwgQVNDSUlMaXRlcmFsKHVz
YWdlU3RyaW5nKG1fdXNhZ2UpKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MywxNCArODMsMTYgQEAgdm9pZCBJbnRs
Q29sbGF0b3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRsQ29sbGF0b3IoRXhlY1N0YXRlKiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgLy8gMTAuMS4yIEludGwuQ29sbGF0b3IgKFtsb2NhbGVzIFssIG9w
dGlvbnNdXSkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBJZiBOZXdUYXJnZXQgaXMgdW5kZWZp
bmVkLCBsZXQgbmV3VGFyZ2V0IGJlIHRoZSBhY3RpdmUgZnVuY3Rpb24gb2JqZWN0LCBlbHNlIGxl
dCBuZXdUYXJnZXQgYmUgTmV3VGFyZ2V0LgogICAgIC8vIDIuIExldCBjb2xsYXRvciBiZSBPcmRp
bmFyeUNyZWF0ZUZyb21Db25zdHJ1Y3RvcihuZXdUYXJnZXQsICVDb2xsYXRvclByb3RvdHlwZSUp
LgogICAgIC8vIDMuIFJldHVybklmQWJydXB0KGNvbGxhdG9yKS4KICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRl
LCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGpzQ2FzdDxJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvcio+KHN0
YXRlLT5jYWxsZWUoKSktPmNvbGxhdG9yU3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsQ29sbGF0
b3IqIGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVy
ZSk7CisgICAgSW50bENvbGxhdG9yKiBjb2xsYXRvciA9IEludGxDb2xsYXRvcjo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChjb2xsYXRvcik7CiAKICAgICAvLyA0LiBSZXR1cm4g
SW5pdGlhbGl6ZUNvbGxhdG9yKGNvbGxhdG9yLCBsb2NhbGVzLCBvcHRpb25zKS4KQEAgLTEzNCwx
MyArMTM2LDE1IEBAIENhbGxUeXBlIEludGxDb2xsYXRvckNvbnN0cnVjdG9yOjpnZXRDYWwKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JDb25zdHJ1Y3RvckZ1bmNT
dXBwb3J0ZWRMb2NhbGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
Ly8gMTAuMi4yIEludGwuQ29sbGF0b3Iuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0
aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBi
ZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMp
LgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBwb3J0ZWRMb2NhbGVzKCVDb2xsYXRvciUuW1th
dmFpbGFibGVMb2NhbGVzXV0sIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMpLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bENvbGxhdG9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw4IEBAIHZvaWQgSW50bENvbGxhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGkKIAogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bENvbGxhdG9yRnVuY0NvbXBhcmUoRXhl
Y1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTAuMy40IENvbGxhdG9yIENv
bXBhcmUgRnVuY3Rpb25zIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gTGV0IGNvbGxhdG9yIGJl
IHRoZSB0aGlzIHZhbHVlLgogICAgIC8vIDIuIEFzc2VydDogVHlwZShjb2xsYXRvcikgaXMgT2Jq
ZWN0IGFuZCBjb2xsYXRvciBoYXMgYW4gW1tpbml0aWFsaXplZENvbGxhdG9yXV0gaW50ZXJuYWwg
c2xvdCB3aG9zZSB2YWx1ZSBpcyB0cnVlLgpAQCAtODgsMTMgKzkwLDEzIEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGwKICAgICAvLyA1LiBMZXQgWCBiZSBUb1N0cmlu
Zyh4KS4KICAgICBKU1N0cmluZyogeCA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0
ZSk7CiAgICAgLy8gNi4gUmV0dXJuSWZBYnJ1cHQoWCkuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNy4gTGV0IFkg
YmUgVG9TdHJpbmcoeSkuCiAgICAgSlNTdHJpbmcqIHkgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9T
dHJpbmcoc3RhdGUpOwogICAgIC8vIDguIFJldHVybklmQWJydXB0KFkpLgotICAgIGlmIChzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8v
IDkuIFJldHVybiBDb21wYXJlU3RyaW5ncyhjb2xsYXRvciwgWCwgWSkuCkBAIC0xMjIsNyArMTI0
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0bwogCiAgICAgICAg
IC8vIGMuIExldCBiYyBiZSBCb3VuZEZ1bmN0aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4K
ICAgICAgICAgYm91bmRDb21wYXJlID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRl
LCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVjdCwgY29sbGF0b3IsIG51bGxwdHIsIDIsIEFTQ0lJ
TGl0ZXJhbCgiY29tcGFyZSIpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgICAgICAvLyBkLiBTZXQgY29sbGF0b3IuW1ti
b3VuZENvbXBhcmVdXSB0byBiYy4KICAgICAgICAgY29sbGF0b3ItPnNldEJvdW5kQ29tcGFyZSh2
bSwgYm91bmRDb21wYXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxEYXRlVGltZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSw3IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9w
dGlvbnNBbnlEYXQKIHsKICAgICAvLyAxMi4xLjEgVG9EYXRlVGltZU9wdGlvbnMgYWJzdHJhY3Qg
b3BlcmF0aW9uIChFQ01BLTQwMiAyLjApCiAgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDEuIElmIG9wdGlv
bnMgaXMgdW5kZWZpbmVkLCB0aGVuIGxldCBvcHRpb25zIGJlIG51bGwsIGVsc2UgbGV0IG9wdGlv
bnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0aW9u
cykuCkBAIC0yMjQsNyArMjI1LDcgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9u
c0FueURhdAogICAgICAgICBvcHRpb25zID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmV4ZWMsIGV4
ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpLT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkp
OwogICAgIGVsc2UgewogICAgICAgICBKU09iamVjdCogb3JpZ2luYWxUb09iamVjdCA9IG9yaWdp
bmFsT3B0aW9ucy50b09iamVjdCgmZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dCgmZXhlYywgb3JpZ2luYWxUb09iamVjdCk7CiAgICAgfQpAQCAtMjQxLDI1ICsyNDIsMjUgQEAg
c3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAogICAgIC8vIGlpaS4gUmV0
dXJuSWZBYnJ1cHQodmFsdWUpLgogICAgIC8vIGl2LiBJZiB2YWx1ZSBpcyBub3QgdW5kZWZpbmVk
LCB0aGVuIGxldCBuZWVkRGVmYXVsdHMgYmUgZmFsc2UuCiAgICAgSlNWYWx1ZSB3ZWVrZGF5ID0g
b3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT53ZWVrZGF5KTsKLSAgICBpZiAo
ZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXdlZWtkYXkuaXNVbmRlZmluZWQo
KSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHllYXIgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnllYXIpOwotICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICgheWVhci5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgbW9udGggPSBvcHRpb25z
LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIW1vbnRoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBkYXkgPSBvcHRpb25zLT5nZXQo
JmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmRheSk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCFkYXkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1
bHRzID0gZmFsc2U7CkBAIC0yNzMsMTkgKzI3NCwxOSBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0
ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgLy8gaWlpLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCiAg
ICAgLy8gaXYuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gbGV0IG5lZWREZWZhdWx0
cyBiZSBmYWxzZS4KICAgICBKU1ZhbHVlIGhvdXIgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPmhvdXIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIGlmICghaG91ci5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxz
ZTsKIAogICAgIEpTVmFsdWUgbWludXRlID0gb3B0aW9ucy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5taW51dGUpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGlmICghbWludXRlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNl
OwogCiAgICAgSlNWYWx1ZSBzZWNvbmQgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5
TmFtZXMtPnNlY29uZCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
aWYgKCFzZWNvbmQuaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7
CkBAIC0yOTksMTUgKzMwMCwxNSBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25z
QW55RGF0CiAgICAgICAgIEpTU3RyaW5nKiBudW1lcmljID0ganNOb250cml2aWFsU3RyaW5nKCZl
eGVjLCBBU0NJSUxpdGVyYWwoIm51bWVyaWMiKSk7CiAKICAgICAgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCBudW1lcmljKTsKLSAgICAgICAgaWYgKGV4
ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBvcHRpb25zLT5wdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1vbnRoLCBudW1lcmljKTsKLSAgICAgICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBvcHRpb25zLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmRheSwgbnVtZXJpYyk7Ci0gICAgICAgIGlm
IChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCkBAIC00MjgsMTMg
KzQyOSwxMyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAg
Ly8gMy4gTGV0IHJlcXVlc3RlZExvY2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2Nh
bGVzKS4KICAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXpl
TG9jYWxlTGlzdChleGVjLCBsb2NhbGVzKTsKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1
ZXN0ZWRMb2NhbGVzKSwKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA1LiBM
ZXQgb3B0aW9ucyBiZSBUb0RhdGVUaW1lT3B0aW9ucyhvcHRpb25zLCAiYW55IiwgImRhdGUiKS4K
ICAgICBKU09iamVjdCogb3B0aW9ucyA9IHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0ZShleGVjLCBv
cmlnaW5hbE9wdGlvbnMpOwogICAgIC8vIDYuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAg
IGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDcuIExldCBvcHQgYmUgYSBuZXcgUmVj
b3JkLgpAQCAtNDQzLDcgKzQ0NCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFs
aXplRGF0ZVQKICAgICAvLyA4LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywgImxv
Y2FsZU1hdGNoZXIiLCAic3RyaW5nIiwgwqsibG9va3VwIiwgImJlc3QgZml0IsK7LCAiYmVzdCBm
aXQiKS4KICAgICBTdHJpbmcgbG9jYWxlTWF0Y2hlciA9IGludGxTdHJpbmdPcHRpb24oZXhlYywg
b3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJl
c3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwi
YmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDkuIFJldHVybklmQWJydXB0KG1hdGNo
ZXIpLgotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9wdC5bW2xv
Y2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIGxvY2FsZU9wdC5hZGQodm0ucHJvcGVydHlO
YW1lcy0+bG9jYWxlTWF0Y2hlci5zdHJpbmcoKSwgbG9jYWxlTWF0Y2hlcik7CkBAIC00NzIsNyAr
NDczLDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIC8v
IDE3LiBMZXQgdHogYmUgR2V0KG9wdGlvbnMsICJ0aW1lWm9uZSIpLgogICAgIEpTVmFsdWUgdHpW
YWx1ZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dGltZVpvbmUpOwog
ICAgIC8vIDE4LiBSZXR1cm5JZkFicnVwdCh0eikuCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gMTkuIElmIHR6IGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTQ4MSw3ICs0
ODIsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgICAg
IC8vIGEuIExldCB0eiBiZSBUb1N0cmluZyh0eikuCiAgICAgICAgIFN0cmluZyBvcmlnaW5hbFR6
ID0gdHpWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgICAgIC8vIGIuIFJldHVybklmQWJy
dXB0KHR6KS4KLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IC8vIGMuIElmIHRoZSByZXN1bHQgb2YgSXNWYWxpZFRpbWVab25lTmFtZSh0eikgaXMgZmFsc2Us
IHRoZW4gaS4gVGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICAgICAgLy8gZC4gTGV0
IHR6IGJlIENhbm9uaWNhbGl6ZVRpbWVab25lTmFtZSh0eikuCkBAIC01MTQsNyArNTE1LDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIGF1dG8gc2hvcnRM
b25nID0geyAic2hvcnQiLCAibG9uZyIgfTsKIAogICAgIFN0cmluZyB3ZWVrZGF5ID0gaW50bFN0
cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT53ZWVrZGF5LCBuYXJy
b3dTaG9ydExvbmcsICJ3ZWVrZGF5IG11c3QgYmUgXCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBc
ImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IXdlZWtkYXkuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHdlZWtkYXkgPT0gIm5hcnJvdyIpCkBA
IC01MjYsNyArNTI3LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRl
VAogICAgIH0KIAogICAgIFN0cmluZyBlcmEgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPmVyYSwgbmFycm93U2hvcnRMb25nLCAiZXJhIG11c3QgYmUg
XCJuYXJyb3dcIiwgXCJzaG9ydFwiLCBvciBcImxvbmdcIiIsIG51bGxwdHIpOwotICAgIGlmIChl
eGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWVyYS5pc051bGwoKSkgewogICAgICAgICBpZiAo
ZXJhID09ICJuYXJyb3ciKQpAQCAtNTM4LDcgKzUzOSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJpbmcgeWVhciA9IGludGxTdHJp
bmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+eWVhciwgdHdvRGlnaXRO
dW1lcmljLCAieWVhciBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0
cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgheWVhci5pc051bGwoKSkg
ewogICAgICAgICBpZiAoeWVhciA9PSAiMi1kaWdpdCIpCkBAIC01NDgsNyArNTQ5LDcgQEAgdm9p
ZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmlu
ZyBtb250aCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+bW9udGgsIHR3b0RpZ2l0TnVtZXJpY05hcnJvd1Nob3J0TG9uZywgIm1vbnRoIG11c3QgYmUg
XCIyLWRpZ2l0XCIsIFwibnVtZXJpY1wiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9u
Z1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghbW9u
dGguaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1vbnRoID09ICIyLWRpZ2l0IikKQEAgLTU2NCw3
ICs1NjUsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAg
fQogCiAgICAgU3RyaW5nIGRheSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+ZGF5LCB0d29EaWdpdE51bWVyaWMsICJkYXkgbXVzdCBiZSBcIjItZGln
aXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIWRheS5pc051bGwoKSkgewogICAgICAgICBpZiAoZGF5ID09ICIyLWRpZ2l0
IikKQEAgLTU3NCw3ICs1NzUsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6
ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIGhvdXIgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMs
IG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIsIHR3b0RpZ2l0TnVtZXJpYywgImhvdXIg
bXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChl
eGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG5lZWQgaG91cjEyIHRvIG1ha2UgdGhlIGhv
dXIgc2tlbGV0b24gcGF0dGVybiBkZWNpc2lvbiwgc28gZG8gdGhpcyBlYXJseS4KQEAgLTU4Miw3
ICs1ODMsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAg
Ym9vbCBpc0hvdXIxMlVuZGVmaW5lZDsKICAgICBib29sIGhyMTIgPSBpbnRsQm9vbGVhbk9wdGlv
bihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5ob3VyMTIsIGlzSG91cjEyVW5kZWZp
bmVkKTsKICAgICAvLyAzMy4gUmV0dXJuSWZBYnJ1cHQoaHIxMikuCi0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFob3VyLmlzTnVsbCgpKSB7CkBAIC02MDUsNyArNjA2LDcg
QEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAg
IFN0cmluZyBtaW51dGUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPm1pbnV0ZSwgdHdvRGlnaXROdW1lcmljLCAibWludXRlIG11c3QgYmUgXCIyLWRp
Z2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFtaW51dGUuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1pbnV0ZSA9PSAi
Mi1kaWdpdCIpCkBAIC02MTUsNyArNjE2LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6Omlu
aXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyBzZWNvbmQgPSBpbnRsU3RyaW5nT3B0
aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPnNlY29uZCwgdHdvRGlnaXROdW1l
cmljLCAic2Vjb25kIG11c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRy
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFzZWNvbmQuaXNOdWxsKCkp
IHsKICAgICAgICAgaWYgKHNlY29uZCA9PSAiMi1kaWdpdCIpCkBAIC02MjUsNyArNjI2LDcgQEAg
dm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAgIH0KIAogICAgIFN0
cmluZyB0aW1lWm9uZU5hbWUgPSBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnBy
b3BlcnR5TmFtZXMtPnRpbWVab25lTmFtZSwgc2hvcnRMb25nLCAidGltZVpvbmVOYW1lIG11c3Qg
YmUgXCJzaG9ydFwiIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGlmICghdGltZVpvbmVOYW1lLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmICh0
aW1lWm9uZU5hbWUgPT0gInNob3J0IikKQEAgLTYzOSw3ICs2NDAsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMjYuIExldCBtYXRjaGVyIGJlIEdl
dE9wdGlvbihvcHRpb25zLCAiZm9ybWF0TWF0Y2hlciIsICJzdHJpbmciLCDCqyJiYXNpYyIsICJi
ZXN0IGZpdCLCuywgImJlc3QgZml0IikuCiAgICAgaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRp
b25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5mb3JtYXRNYXRjaGVyLCB7ICJiYXNpYyIsICJiZXN0IGZp
dCIgfSwgImZvcm1hdE1hdGNoZXIgbXVzdCBiZSBlaXRoZXIgXCJiYXNpY1wiIG9yIFwiYmVzdCBm
aXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDI3LiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4K
LSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBbHdheXMgdXNlIElDVSBkYXRl
IGZvcm1hdCBnZW5lcmF0b3IsIHJhdGhlciB0aGFuIG91ciBvd24gcGF0dGVybiBsaXN0IGFuZCBt
YXRjaGVyLgpAQCAtODM0LDE1ICs4MzUsMTcgQEAgY29uc3QgY2hhciogSW50bERhdGVUaW1lRm9y
bWF0Ojp0aW1lWm9uZQogCiBKU09iamVjdCogSW50bERhdGVUaW1lRm9ybWF0OjpyZXNvbHZlZE9w
dGlvbnMoRXhlY1N0YXRlJiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxMi4zLjUgSW50
bC5EYXRlVGltZUZvcm1hdC5wcm90b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIu
MCkKICAgICAvLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVy
dGllcyBhbmQgYXR0cmlidXRlcyBhcmUgc2V0IGFzIGlmIGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVj
dCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0
aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgc2xvdCBvZiB0aGlzIERhdGVU
aW1lRm9ybWF0IG9iamVjdCAoc2VlIDEyLjQpOiBsb2NhbGUsIGNhbGVuZGFyLCBudW1iZXJpbmdT
eXN0ZW0sIHRpbWVab25lLCBob3VyMTIsIHdlZWtkYXksIGVyYSwgeWVhciwgbW9udGgsIGRheSwg
aG91ciwgbWludXRlLCBzZWNvbmQsIGFuZCB0aW1lWm9uZU5hbWUuIFByb3BlcnRpZXMgd2hvc2Ug
Y29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90cyBhcmUgbm90IHByZXNlbnQgYXJlIG5vdCBhc3Np
Z25lZC4KICAgICAvLyBOb3RlOiBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIEVDTUFTY3JpcHQgMjAx
NSBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEksIHRoZSB0aW1lWm9uZSBwcm9wZXJ0eSB3aWxsIGJl
IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IHRpbWUgem9uZSBpZiBubyB0aW1lWm9uZSBwcm9wZXJ0
eSB3YXMgcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0IHByb3ZpZGVkIHRvIHRoZSBJbnRs
LkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yLiBUaGUgcHJldmlvdXMgdmVyc2lvbiBsZWZ0IHRo
ZSB0aW1lWm9uZSBwcm9wZXJ0eSB1bmRlZmluZWQgaW4gdGhpcyBjYXNlLgogICAgIGlmICghbV9p
bml0aWFsaXplZERhdGVUaW1lRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVEYXRlVGltZUZv
cm1hdChleGVjLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgQVNTRVJU
KCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNj
b3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYgdm0gPSBleGVjLnZtKCk7CiAgICAg
SlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYyk7CiAgICAgb3B0
aW9ucy0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzTm9udHJpdmlh
bFN0cmluZygmZXhlYywgbV9sb2NhbGUpKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmNhbGVuZGFyLCBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIG1fY2Fs
ZW5kYXIpKTsKQEAgLTg4OSw3ICs4OTIsNyBAQCBKU1ZhbHVlIEludGxEYXRlVGltZUZvcm1hdDo6
Zm9ybWF0KEV4ZWNTCiAgICAgLy8gMTIuMy40IEZvcm1hdERhdGVUaW1lIGFic3RyYWN0IG9wZXJh
dGlvbiAoRUNNQS00MDIgMi4wKQogICAgIGlmICghbV9pbml0aWFsaXplZERhdGVUaW1lRm9ybWF0
KSB7CiAgICAgICAgIGluaXRpYWxpemVEYXRlVGltZUZvcm1hdChleGVjLCBqc1VuZGVmaW5lZCgp
LCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgLy8gMS4g
SWYgeCBpcyBub3QgYSBmaW5pdGUgTnVtYmVyLCB0aGVuIHRocm93IGEgUmFuZ2VFcnJvciBleGNl
cHRpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVG
b3JtYXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDE0ICs4MywxNiBAQCB2b2lkIElu
dGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjpmaW5pCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxEYXRlVGltZUZvcm1hdChFeGVjU3RhdGUqIHN0
YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMi4xLjIgSW50bC5EYXRlVGltZUZvcm1hdCAo
W2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1Rh
cmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBv
YmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IGRh
dGVUaW1lRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5ld1RhcmdldCwg
JURhdGVUaW1lRm9ybWF0UHJvdG90eXBlJSkuCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGF0
ZVRpbWVGb3JtYXQpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdUYXJnZXQoKSwganND
YXN0PEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+ZGF0
ZVRpbWVGb3JtYXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEludGxEYXRlVGltZUZvcm1hdCogZGF0
ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3Ry
dWN0dXJlKTsKKyAgICBJbnRsRGF0ZVRpbWVGb3JtYXQqIGRhdGVUaW1lRm9ybWF0ID0gSW50bERh
dGVUaW1lRm9ybWF0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgQVNTRVJUKGRhdGVUaW1l
Rm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQoZGF0
ZVRpbWVGb3JtYXQsIGxvY2FsZXMsIG9wdGlvbnMpLgpAQCAtMTM0LDYgKzEzNiw4IEBAIENhbGxU
eXBlIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yOjoKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2Nh
bGVzT2YoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTIuMi4yIElu
dGwuRGF0ZVRpbWVGb3JtYXQuc3VwcG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10p
IChFQ01BLTQwMiAyLjApCiAKICAgICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlRGF0
ZVRpbWVGb3JtYXQlLltbYXZhaWxhYmxlTG9jYWxlc11dLgpAQCAtMTQyLDcgKzE0Niw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAogICAgIC8vIDIuIExldCBy
ZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qo
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIFJldHVybiBTdXBw
b3J0ZWRMb2NhbGVzKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlvbnMp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9ybWF0
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0UHJvdG90eXBlOjpmaW5pc2gKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50bERhdGVUaW1lRm9ybWF0RnVuY0Zvcm1hdERhdGVUaW1lKEV4ZWNTdGF0ZSogc3RhdGUp
CiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEyLjMuNCBEYXRlVGltZSBGb3JtYXQgRnVuY3Rpb25z
IChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gTGV0IGR0ZiBiZSB0aGUgdGhpcyB2YWx1ZS4KICAg
ICAvLyAyLiBBc3NlcnQ6IFR5cGUoZHRmKSBpcyBPYmplY3QgYW5kIGR0ZiBoYXMgYW4gW1tpbml0
aWFsaXplZERhdGVUaW1lRm9ybWF0XV0gaW50ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSBpcyB0cnVl
LgpAQCAtOTksNyArMTAxLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50bAogICAgICAgICAvLyBhLiBMZXQgeCBiZSBUb051bWJlcihkYXRlKS4KICAgICAgICAgdmFs
dWUgPSBkYXRlLnRvTnVtYmVyKHN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQo
eCkuCi0gICAgICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTM4LDcgKzE0MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bERhdGVUaW0KIAogICAgICAgICAvLyBjLiBMZXQgYmYg
YmUgQm91bmRGdW5jdGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5k
Rm9ybWF0ID0gSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHRhcmdldE9iamVjdCwgZHRmLCBib3VuZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0Iikp
OwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBkdGYuW1tib3VuZEZvcm1hdF1dIHRvIGJmLgogICAg
ICAgICBkdGYtPnNldEJvdW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAkocmV2
aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJl
ckZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEludGxO
dW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExv
Y2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBhdXRvIHJlcXVl
c3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKICAg
ICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4K
QEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1i
ZXJGCiAgICAgICAgIC8vIGEuIExldCBvcHRpb25zIGJlIFRvT2JqZWN0KG9wdGlvbnMpLgogICAg
ICAgICBvcHRpb25zID0gb3B0aW9uc1ZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7CiAgICAgICAgIC8v
IGIuIFJldHVybklmQWJydXB0KG9wdGlvbnMpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODYsNyArMTg2LDcgQEAgdm9pZCBJbnRsTnVtYmVy
Rm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDguIExldCBtYXRjaGVyIGJlIEdldE9w
dGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyJsb29rdXAiLCAiYmVz
dCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0cmluZyBtYXRjaGVyID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlTWF0Y2hlciwgeyAi
bG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImxv
b2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIpOwogICAgIC8vIDkuIFJldHVybklm
QWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTAu
IFNldCBvcHQuW1tsb2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJ
TGl0ZXJhbCgibG9jYWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsKQEAgLTIwNyw3ICsyMDcsNyBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMTYuIExldCBz
IGJlIEdldE9wdGlvbihvcHRpb25zLCAic3R5bGUiLCAic3RyaW5nIiwgwqsgImRlY2ltYWwiLCAi
cGVyY2VudCIsICJjdXJyZW5jeSLCuywgImRlY2ltYWwiKS4KICAgICBTdHJpbmcgc3R5bGVTdHJp
bmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgInN0eWxlIiksIHsgImRlY2ltYWwiLCAicGVyY2VudCIsICJjdXJyZW5jeSIgfSwg
InN0eWxlIG11c3QgYmUgZWl0aGVyIFwiZGVjaW1hbFwiLCBcInBlcmNlbnRcIiwgb3IgXCJjdXJy
ZW5jeVwiIiwgImRlY2ltYWwiKTsKICAgICAvLyAxNy4gUmV0dXJuSWZBYnJ1cHQocykuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxOC4gU2V0IG51bWJlckZvcm1hdC5bW3N0
eWxlXV0gdG8gcy4KICAgICBpZiAoc3R5bGVTdHJpbmcgPT0gImRlY2ltYWwiKQpAQCAtMjIyLDcg
KzIyMiw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAv
LyAxOS4gTGV0IGMgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJjdXJyZW5jeSIsICJzdHJpbmciLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCkuCiAgICAgU3RyaW5nIGN1cnJlbmN5ID0gaW50bFN0cmluZ09w
dGlvbihzdGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjdXJyZW5j
eSIpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIpOwogICAgIC8vIDIwLiBSZXR1cm5JZkFicnVwdChj
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDIxLiBJZiBjIGlzIG5vdCB1
bmRlZmluZWQsIHRoZW4KICAgICBpZiAoIWN1cnJlbmN5LmlzTnVsbCgpKSB7CkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8v
IDI0LiBMZXQgY2QgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJjdXJyZW5jeURpc3BsYXkiLCAic3Ry
aW5nIiwgwqsiY29kZSIsICJzeW1ib2wiLCAibmFtZSLCuywgInN5bWJvbCIpLgogICAgIFN0cmlu
ZyBjdXJyZW5jeURpc3BsYXlTdHJpbmcgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25z
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5RGlzcGxheSIpLCB7ICJjb2Rl
IiwgInN5bWJvbCIsICJuYW1lIiB9LCAiY3VycmVuY3lEaXNwbGF5IG11c3QgYmUgZWl0aGVyIFwi
Y29kZVwiLCBcInN5bWJvbFwiLCBvciBcIm5hbWVcIiIsICJzeW1ib2wiKTsKICAgICAvLyAyNS4g
UmV0dXJuSWZBYnJ1cHQoY2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8g
MjYuIElmIHMgaXMgImN1cnJlbmN5Iiwgc2V0IG51bWJlckZvcm1hdC5bW2N1cnJlbmN5RGlzcGxh
eV1dIHRvIGNkLgogICAgIGlmIChtX3N0eWxlID09IFN0eWxlOjpDdXJyZW5jeSkgewpAQCAtMjcx
LDcgKzI3MSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAg
ICAvLyAyOC4gUmV0dXJuSWZBYnJ1cHQobW5pZCkuCiAgICAgLy8gMjkuIFNldCBudW1iZXJGb3Jt
YXQuW1ttaW5pbXVtSW50ZWdlckRpZ2l0c11dIHRvIG1uaWQuCiAgICAgdW5zaWduZWQgbWluaW11
bUludGVnZXJEaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1pbmltdW1JbnRlZ2VyRGlnaXRzIiksIDEsIDIxLCAxKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWluaW11bUludGVnZXJEaWdpdHMg
PSBtaW5pbXVtSW50ZWdlckRpZ2l0czsKIApAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgSW50bE51
bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzMi4gUmV0dXJuSWZBYnJ1cHQo
bW5mZCkuCiAgICAgLy8gMzMuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtRnJhY3Rpb25EaWdp
dHNdXSB0byBtbmZkLgogICAgIHVuc2lnbmVkIG1pbmltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxO
dW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bWluaW11bUZyYWN0aW9uRGlnaXRzIiksIDAsIDIwLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHNEZWZh
dWx0KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fbWluaW11bUZyYWN0aW9u
RGlnaXRzID0gbWluaW11bUZyYWN0aW9uRGlnaXRzOwogCkBAIC0yOTksMjAgKzI5OSwyMCBAQCB2
b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMzYuIFJldHVy
bklmQWJydXB0KG14ZmQpLgogICAgIC8vIDM3LiBTZXQgbnVtYmVyRm9ybWF0LltbbWF4aW11bUZy
YWN0aW9uRGlnaXRzXV0gdG8gbXhmZC4KICAgICB1bnNpZ25lZCBtYXhpbXVtRnJhY3Rpb25EaWdp
dHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIpLCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMs
IDIwLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHNEZWZhdWx0KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gbWF4aW11bUZyYWN0aW9uRGln
aXRzOwogCiAgICAgLy8gMzguIExldCBtbnNkIGJlIEdldChvcHRpb25zLCAibWluaW11bVNpZ25p
ZmljYW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1
ZSA9IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWlu
aW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAgIC8vIDM5LiBSZXR1cm5JZkFicnVwdChtbnNk
KS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gNDAuIExldCBteHNkIGJl
IEdldChvcHRpb25zLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikuCiAgICAgSlNWYWx1ZSBt
YXhpbXVtU2lnbmlmaWNhbnREaWdpdHNWYWx1ZSA9IG9wdGlvbnMtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIikpOwogICAg
IC8vIDQxLiBSZXR1cm5JZkFicnVwdChteHNkKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gNDIuIElmIG1uc2QgaXMgbm90IHVuZGVmaW5lZCBvciBteHNkIGlzIG5vdCB1
bmRlZmluZWQsIHRoZW4KQEAgLTMyMCwxMiArMzIwLDEyIEBAIHZvaWQgSW50bE51bWJlckZvcm1h
dDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAgICAgLy8gYS4gTGV0IG1uc2QgYmUgR2V0TnVtYmVy
T3B0aW9uKG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMiLCAxLCAyMSwgMSkuCiAg
ICAgICAgIHVuc2lnbmVkIG1pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IGludGxOdW1iZXJPcHRp
b24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWluaW11bVNp
Z25pZmljYW50RGlnaXRzIiksIDEsIDIxLCAxKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1
cHQobW5zZCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgLy8gYy4gTGV0IG14c2QgYmUgR2V0TnVtYmVyT3B0aW9uKG9wdGlvbnMsICJtYXhpbXVtU2ln
bmlmaWNhbnREaWdpdHMiLCBtbnNkLCAyMSwgMjEpLgogICAgICAgICB1bnNpZ25lZCBtYXhpbXVt
U2lnbmlmaWNhbnREaWdpdHMgPSBpbnRsTnVtYmVyT3B0aW9uKHN0YXRlLCBvcHRpb25zLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm1heGltdW1TaWduaWZpY2FudERpZ2l0cyIpLCBtaW5p
bXVtU2lnbmlmaWNhbnREaWdpdHMsIDIxLCAyMSk7CiAgICAgICAgIC8vIGQuIFJldHVybklmQWJy
dXB0KG14c2QpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIC8vIGUuIFNldCBudW1iZXJGb3JtYXQuW1ttaW5pbXVtU2lnbmlmaWNhbnREaWdpdHNdXSB0
byBtbnNkLgogICAgICAgICBtX21pbmltdW1TaWduaWZpY2FudERpZ2l0cyA9IG1pbmltdW1TaWdu
aWZpY2FudERpZ2l0czsKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6
OmluaXRpYWxpemVOdW1iZXJGCiAgICAgaWYgKHVzZXNGYWxsYmFjaykKICAgICAgICAgdXNlR3Jv
dXBpbmcgPSB0cnVlOwogICAgIC8vIDQ0LiBSZXR1cm5JZkFicnVwdChnKS4KLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIC8vIDQ1LiBTZXQgbnVtYmVyRm9ybWF0LltbdXNlR3JvdXBp
bmddXSB0byBnLgogICAgIG1fdXNlR3JvdXBpbmcgPSB1c2VHcm91cGluZzsKQEAgLTM2MSwxMSAr
MzYxLDE0IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKIAogdm9p
ZCBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGVOdW1iZXJGb3JtYXQoRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCghbV9udW1iZXJGb3JtYXQpOwogCiAgICAgaWYg
KCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KSB7CiAgICAgICAgIGluaXRpYWxpemVOdW1iZXJG
b3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NF
UlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwg
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBVTnVtYmVyRm9ybWF0U3R5bGUgc3R5
bGU7CkBAIC00NzksNiArNDgyLDkgQEAgY29uc3QgY2hhciogSW50bE51bWJlckZvcm1hdDo6Y3Vy
cmVuY3lEaQogCiBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpb25zKEV4
ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxMS4zLjUgSW50bC5OdW1i
ZXJGb3JtYXQucHJvdG90eXBlLnJlc29sdmVkT3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAg
Ly8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBuZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5k
IGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgogICAgIC8vIGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVj
dCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0
aGUKQEAgLTQ5MCwxMCArNDk2LDkgQEAgSlNPYmplY3QqIEludGxOdW1iZXJGb3JtYXQ6OnJlc29s
dmVkT3B0aQogCiAgICAgaWYgKCFtX2luaXRpYWxpemVkTnVtYmVyRm9ybWF0KSB7CiAgICAgICAg
IGluaXRpYWxpemVOdW1iZXJGb3JtYXQoc3RhdGUsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0KiBvcHRpb25zID0gY29uc3RydWN0RW1wdHlP
YmplY3QoJnN0YXRlKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxvY2FsZSwganNTdHJpbmcoJnN0YXRlLCBtX2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJudW1iZXJpbmdTeXN0ZW0i
KSwganNTdHJpbmcoJnN0YXRlLCBtX251bWJlcmluZ1N5c3RlbSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MywxNCArODMsMTYgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3I6OmZp
bmlzaAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RJbnRs
TnVtYmVyRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDEx
LjEuMiBJbnRsLk51bWJlckZvcm1hdCAoW2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNNQS00MDIg
Mi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdUYXJnZXQg
YmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBiZSBOZXdU
YXJnZXQuCiAgICAgLy8gMi4gTGV0IG51bWJlckZvcm1hdCBiZSBPcmRpbmFyeUNyZWF0ZUZyb21D
b25zdHJ1Y3RvcihuZXdUYXJnZXQsICVOdW1iZXJGb3JtYXRQcm90b3R5cGUlKS4KICAgICAvLyAz
LiBSZXR1cm5JZkFicnVwdChudW1iZXJGb3JtYXQpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRl
LT5uZXdUYXJnZXQoKSwganNDYXN0PEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcio+KHN0YXRl
LT5jYWxsZWUoKSktPm51bWJlckZvcm1hdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgSW50bE51bWJl
ckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZvcm1hdDo6Y3JlYXRlKHN0YXRlLT52
bSgpLCBzdHJ1Y3R1cmUpOworICAgIEludGxOdW1iZXJGb3JtYXQqIG51bWJlckZvcm1hdCA9IElu
dGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICBBU1NFUlQobnVtYmVy
Rm9ybWF0KTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplTnVtYmVyRm9ybWF0KG51bWJl
ckZvcm1hdCwgbG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzQsNiArMTM2LDggQEAgQ2FsbFR5cGUg
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yOjpnZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3RvckZ1bmNTdXBwb3J0ZWRMb2NhbGVzT2Yo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMi4yIEludGwuTnVt
YmVyRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihsb2NhbGVzIFssIG9wdGlvbnNdKSAoRUNNQS00
MDIgMi4wKQogCiAgICAgLy8gMS4gTGV0IGF2YWlsYWJsZUxvY2FsZXMgYmUgJU51bWJlckZvcm1h
dCUuW1thdmFpbGFibGVMb2NhbGVzXV0uCkBAIC0xNDIsNyArMTQ2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRgogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExv
Y2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3Ry
aW5nPiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2Fs
ZXMoYXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVy
Rm9ybWF0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDYgKzgwLDggQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlOjpmaW5p
c2hDcgogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsTnVtYmVyRm9y
bWF0RnVuY0Zvcm1hdE51bWJlcihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAvLyAxMS4zLjQgRm9ybWF0IE51bWJlciBGdW5jdGlvbnMgKEVDTUEtNDAyIDIuMCkKICAgICAv
LyAxLiBMZXQgbmYgYmUgdGhlIHRoaXMgdmFsdWUuCiAgICAgLy8gMi4gQXNzZXJ0OiBUeXBlKG5m
KSBpcyBPYmplY3QgYW5kIG5mIGhhcyBhbiBbW2luaXRpYWxpemVkTnVtYmVyRm9ybWF0XV0gaW50
ZXJuYWwgc2xvdCB3aG9zZSB2YWx1ZSAgdHJ1ZS4KQEAgLTg5LDcgKzkxLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bAogICAgIC8vIDQuIExldCB4IGJlIFRvTnVt
YmVyKHZhbHVlKS4KICAgICBkb3VibGUgbnVtYmVyID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvTnVt
YmVyKHN0YXRlKTsKICAgICAvLyA1LiBSZXR1cm5JZkFicnVwdCh4KS4KLSAgICBpZiAoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA2
LiBSZXR1cm4gRm9ybWF0TnVtYmVyKG5mLCB4KS4KQEAgLTEyNiw3ICsxMjgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGCiAKICAgICAgICAgLy8gYy4gTGV0IGJm
IGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3Vu
ZEZvcm1hdCA9IEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCB0YXJnZXRPYmplY3QsIG5mLCBib3VuZEFyZ3MsIDEsIEFTQ0lJTGl0ZXJhbCgiZm9ybWF0Iikp
OwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBuZi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAg
ICAgIG5mLT5zZXRCb3VuZEZvcm1hdCh2bSwgYm91bmRGb3JtYXQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjQsNiArMTI0LDkgQEAgdm9pZCBjb252ZXJ0SUNVTG9jYWxlVG9CQ1A0N0xh
bmd1YWdlVGFnKAogCiBib29sIGludGxCb29sZWFuT3B0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgb3B0aW9ucywgUHJvcGVydHlOYW1lIHByb3BlcnR5LCBib29sJiB1c2VzRmFsbGJhY2sp
CiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICAvLyA5LjIuOSBHZXRPcHRpb24gKG9wdGlvbnMsIHByb3Bl
cnR5LCB0eXBlLCB2YWx1ZXMsIGZhbGxiYWNrKQogICAgIC8vIEZvciB0eXBlPSJib29sZWFuIi4g
dmFsdWVzIGlzIGFsd2F5cyB1bmRlZmluZWQuCiAKQEAgLTEzMSwxNCArMTM0LDE0IEBAIGJvb2wg
aW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwKICAgICBKU09iamVjdCogb3B0cyA9
IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9w
dHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyAzLiBMZXQg
dmFsdWUgYmUgR2V0KG9wdHMsIHByb3BlcnR5KS4KICAgICBKU1ZhbHVlIHZhbHVlID0gb3B0cy0+
Z2V0KCZzdGF0ZSwgcHJvcGVydHkpOwogCiAgICAgLy8gNC4gUmV0dXJuSWZBYnJ1cHQodmFsdWUp
LgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyA1LiBJZiB2YWx1
ZSBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC0xNzMsMTQgKzE3NiwxNCBAQCBTdHJpbmcgaW50
bFN0cmluZ09wdGlvbihFeGVjU3RhdGUmIHN0YXRlCiAgICAgSlNPYmplY3QqIG9wdHMgPSBvcHRp
b25zLnRvT2JqZWN0KCZzdGF0ZSk7CiAKICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRzKS4K
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBi
ZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0
YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3Qg
dW5kZWZpbmVkLCB0aGVuCkBAIC0xOTMsNyArMTk2LDcgQEAgU3RyaW5nIGludGxTdHJpbmdPcHRp
b24oRXhlY1N0YXRlJiBzdGF0ZQogICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOwogCiAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdCh2YWx1
ZSkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAg
ICAgLy8gZC4gSWYgdmFsdWVzIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTIyMSwxNCArMjI0
LDE0IEBAIHVuc2lnbmVkIGludGxOdW1iZXJPcHRpb24oRXhlY1N0YXRlJiBzdGEKICAgICBKU09i
amVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3QoJnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVy
bklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8v
IDMuIExldCB2YWx1ZSBiZSBHZXQob3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUg
PSBvcHRzLT5nZXQoJnN0YXRlLCBwcm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVw
dCh2YWx1ZSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gNS4gSWYg
dmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjM2LDcgKzIzOSw3IEBAIHVuc2lnbmVk
IGludGxOdW1iZXJPcHRpb24oRXhlY1N0YXRlJiBzdGEKICAgICAgICAgLy8gYS4gTGV0IHZhbHVl
IGJlIFRvTnVtYmVyKHZhbHVlKS4KICAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQodmFsdWUpLgot
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgLy8gMS4g
SWYgdmFsdWUgaXMgTmFOIG9yIGxlc3MgdGhhbiBtaW5pbXVtIG9yIGdyZWF0ZXIgdGhhbiBtYXhp
bXVtLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgICAgICBpZiAoIShkb3VibGVW
YWx1ZSA+PSBtaW5pbXVtICYmIGRvdWJsZVZhbHVlIDw9IG1heGltdW0pKSB7CkBAIC01NTcsMTYg
KzU2MCwxNiBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAg
fQogCiAgICAgLy8gNS4gUmV0dXJuSWZBYnJ1cHQoTykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgLy8gNi4gTGV0IGxlbiBiZSBUb0xlbmd0aChH
ZXQoTywgImxlbmd0aCIpKS4KICAgICBKU1ZhbHVlIGxlbmd0aFByb3BlcnR5ID0gbG9jYWxlc09i
amVjdC0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICBkb3VibGUgbGVuZ3RoID0g
bGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAvLyBLZWVwIHRyYWNrIG9mIGxvY2FsZXMgdGhh
dCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3QuCkBAIC01ODIsNyArNTg1LDcgQEAgVmVjdG9y
PFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChFeAogICAgICAgICBib29sIGtQcmVzZW50
ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoJnN0YXRlLCBrKTsKIAogICAgICAgICAvLyBj
LiBSZXR1cm5JZkFicnVwdChrUHJlc2VudCkuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgICAgIC8vIGQuIElmIGtQcmVzZW50
IGlzIHRydWUsIHRoZW4KQEAgLTU5MSw3ICs1OTQsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmlj
YWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgICAgICBKU1ZhbHVlIGtWYWx1ZSA9IGxvY2FsZXNP
YmplY3QtPmdldCgmc3RhdGUsIGspOwogCiAgICAgICAgICAgICAvLyBpaS4gUmV0dXJuSWZBYnJ1
cHQoa1ZhbHVlKS4KLSAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgICAgIC8vIGlpaS4gSWYgVHlwZShr
VmFsdWUpIGlzIG5vdCBTdHJpbmcgb3IgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvciBleGNlcHRp
b24uCkBAIC02MDQsNyArNjA3LDcgQEAgVmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxl
TGlzdChFeAogICAgICAgICAgICAgSlNTdHJpbmcqIHRhZyA9IGtWYWx1ZS50b1N0cmluZygmc3Rh
dGUpOwogCiAgICAgICAgICAgICAvLyB2LiBSZXR1cm5JZkFicnVwdCh0YWcpLgotICAgICAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKIAogICAgICAgICAgICAgLy8gdmkuIElmIElzU3RydWN0dXJhbGx5VmFsaWRMYW5ndWFnZVRh
Zyh0YWcpIGlzIGZhbHNlLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgpAQCAtOTM0LDYg
KzkzNyw3IEBAIEpTVmFsdWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKIHsKICAg
ICAvLyA5LjIuOCBTdXBwb3J0ZWRMb2NhbGVzIChhdmFpbGFibGVMb2NhbGVzLCByZXF1ZXN0ZWRM
b2NhbGVzLCBvcHRpb25zKQogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cmluZyBtYXRjaGVyOwogCiAgICAg
Ly8gMS4gSWYgb3B0aW9ucyBpcyBub3QgdW5kZWZpbmVkLCB0aGVuCkBAIC05NDEsNyArOTQ1LDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAgICAgICAvLyBh
LiBMZXQgbWF0Y2hlciBiZSBHZXRPcHRpb24ob3B0aW9ucywgImxvY2FsZU1hdGNoZXIiLCAic3Ry
aW5nIiwgwqsgImxvb2t1cCIsICJiZXN0IGZpdCIgwrssICJiZXN0IGZpdCIpLgogICAgICAgICBt
YXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1l
cy0+bG9jYWxlTWF0Y2hlciwgeyAibG9va3VwIiwgImJlc3QgZml0IiB9LCAibG9jYWxlTWF0Y2hl
ciBtdXN0IGJlIGVpdGhlciBcImxvb2t1cFwiIG9yIFwiYmVzdCBmaXRcIiIsICJiZXN0IGZpdCIp
OwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtYXRjaGVyKS4KLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gMi4gRWxzZSwgbGV0IG1hdGNoZXIgYmUgImJlc3QgZml0Ii4KQEAgLTk2MSw3ICs5
NjUsNyBAQCBKU1ZhbHVlIHN1cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAg
IHN1cHBvcnRlZExvY2FsZXMgPSBsb29rdXBTdXBwb3J0ZWRMb2NhbGVzKHN0YXRlLCBhdmFpbGFi
bGVMb2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzKTsKICAgICB9CiAKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAvLyA2LiBMZXQgc3Vic2V0IGJlIENyZWF0
ZUFycmF5RnJvbUxpc3Qoc3VwcG9ydGVkTG9jYWxlcykuCkBAIC05NzAsNyArOTc0LDcgQEAgSlNW
YWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAgIC8vIDcuIExldCBrZXlz
IGJlIHN1YnNldC5bW093blByb3BlcnR5S2V5c11dKCkuCiAgICAgUHJvcGVydHlOYW1lQXJyYXkg
a2V5cygmc3RhdGUsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwogICAgIHN1cHBvcnRlZExv
Y2FsZXMtPmdldE93blByb3BlcnR5TmFtZXMoc3VwcG9ydGVkTG9jYWxlcywgJnN0YXRlLCBrZXlz
LCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2M7CkBAIC05ODcsNyArOTkxLDcg
QEAgSlNWYWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogICAgICAgICBzdXBw
b3J0ZWRMb2NhbGVzLT5kZWZpbmVPd25Qcm9wZXJ0eShzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUs
IGtleXNbaV0sIGRlc2MsIHRydWUpOwogCiAgICAgICAgIC8vIGMuIEFzc2VydDogc3RhdHVzIGlz
IG5vdCBhYnJ1cHQgY29tcGxldGlvbi4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDE1ICs0MCwxNyBAQCBKU1ZhbHVlIGNvbnN0cnVjdEludGxJbnN0
YW5jZVdpdGhXb3JrYXJvCiAgICAgLy8gRklYTUU6IFdvcmthcm91bmQgdG8gcHJvdmlkZSBjb21w
YXRpYmlsaXR5IHdpdGggRUNNQS00MDIgMS4wIGNhbGwvYXBwbHkgcGF0dGVybnMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzY3OQogICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEludGxJbnN0YW5jZSo+KHRoaXNWYWx1ZSkpIHsK
ICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBjYWxsZWUtPmdldERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlKTsKICAgICAgICAgaWYgKEpTT2JqZWN0OjpkZWZhdWx0SGFz
SW5zdGFuY2UoJnN0YXRlLCB0aGlzVmFsdWUsIHByb3RvdHlwZSkpIHsKICAgICAgICAgICAgIEpT
T2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgICAgICAgICBJbnRsSW5zdGFuY2UqIGluc3RhbmNlID0gZmFjdG9yeSh2bSk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmludGxTdWJzdGl0dXRlVmFsdWVQcml2YXRlTmFtZSgp
LCBpbnN0YW5jZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRv
ck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVj
LCBKUwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
Pm5leHQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwpAQCAtNTMsNyArNTMsNyBAQCBKU1ZhbHVl
IGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpCiAgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgIEpT
VmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxU
eXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50
cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYg
KCFyZXN1bHQuaXNPYmplY3QoKSkKQEAgLTgwLDExICs4MCwxNCBAQCBib29sIGl0ZXJhdG9yQ29t
cGxldGUoRXhlY1N0YXRlKiBleGVjLCBKCiAKIEpTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYm9vbCBkb25lID0gaXRlcmF0b3JDb21wbGV0
ZShleGVjLCByZXN1bHQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICBpZiAoZG9uZSkKICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CkBAIC05
NywxMiArMTAwLDEzIEBAIHZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBFeGNlcHRp
b24qIGV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
KyAgICAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
ICAgIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIGNhdGNoU2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAgICAgSlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9
IGl0ZXJhdG9yLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5yZXR1cm5LZXl3b3JkKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJldHVybkZ1bmN0aW9uLmlzVW5k
ZWZpbmVkKCkpIHsKQEAgLTEyOSw3ICsxMzMsNyBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpbm5lclJlc3VsdC5pc09iamVjdCgpKSB7CkBAIC0x
NjcsNyArMTcxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSogcwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKICAgICBKU1Zh
bHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoc3RhdGUsIHN0YXRlLT5wcm9wZXJ0
eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7CkBA
IC0xNzksNyArMTgzLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSog
cwogCiAgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzOwogICAgIEpTVmFsdWUg
aXRlcmF0b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9u
Q2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVu
Y3Rpb25Bcmd1bWVudHMpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
IAogICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIw
NTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJUaHJvd1Njb3BlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyMCArNDgsMjIgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IENhbGxCYWNrVHlwZT4KIHZvaWQgZm9yRWFjaEluSXRlcmFibGUoRXhlY1N0YXRlKiBzdGF0ZSwg
SlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tUeXBlJiBjYWxsYmFjaykKIHsKICAgICBh
dXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBpdGVyYXRvckZvckl0ZXJhYmxlKHN0
YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICB3aGlsZSAodHJ1ZSkg
ewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoc3RhdGUsIGl0ZXJhdG9yKTsK
LSAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpIHx8IHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAobmV4dC5pc0ZhbHNlKCkgfHwgVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1
ZShzdGF0ZSwgbmV4dCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBjYWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1ZSk7Ci0gICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDcgKzY1NCw3IEBAIEpTVmFs
dWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBpbmRleCA9IGdl
dEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IGlu
ZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgLy8gQ2FsbCB0aGUgW1tEZWxldGVd
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgogICAg
IGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewpAQCAtNzA2
LDcgKzcwNiw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAg
ICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAgICAg
ICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZhbHVl
LCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52
YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC03MjYsNyArNzI2LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YQogICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewogICAg
ICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0aCwg
dmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dF
eGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVj
LCBKU1ZhCiAgICAgICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVYKSB7
CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgbGVu
Z3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxp
dGVyYWwoIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAgICAg
ICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRlcmNl
cHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFsdWUsIHRydWUsIHB1dFJlc3Vs
dCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgb2xkTGVuZ3Ro
IDwgMHhGRkZGRkZGRnUpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIG9s
ZExlbmd0aCA8IDB4RkZGRkZGRkZ1KQogICAgICAgICAgICAgICAgIHNldExlbmd0aChleGVjLCBv
bGRMZW5ndGggKyAxLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
Nzk0LDcgKzc5NCw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4gTUFYX0FSUkFZX0lOREVYKSB7CiAgICAg
ICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFnZS0+
bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgIC8vIFBlciBFUzUuMSAxNS40LjQu
NyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC0xMjU3LDYgKzEyNTcsOSBAQCB2b2lkIEpTQXJyYXk6OmZp
bGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5zaWdu
ZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKICAgICB1
bnNpZ25lZCB2ZWN0b3JFbmQ7CkBAIC0xMzIxLDcgKzEzMjQsNyBAQCB2b2lkIEpTQXJyYXk6OmNv
cHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsr
aSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9IGdl
dChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgbGVuZ3RoID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzYXkgc28s
IGl0IGlzIGluIGZhY3QgY29ycmVjdCB0byBzYXkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBTdHJ1
Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGNvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU0FycmF5QnVmZmVyKiBy
ZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGFycmF5QnVmZmVyU3RydWN0dXJlLCBX
VEZNb3ZlKGJ1ZmZlcikpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
NTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTbGljZSByZXF1aXJlcyBhdCBsZWFzdCBv
bmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1bWVu
dCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGludDMyX3QgZW5kOwogICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBlbmQgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0gZWxzZQog
ICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAkocmV2aXNp
b24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjQgKzcwLDI2IEBAIGlubGluZSBib29sIEpTQXJy
YXk6OmNhbkZhc3RDb3B5KFZNJiB2bSwKIAogQUxXQVlTX0lOTElORSB1bnNpZ25lZCBnZXRMZW5n
dGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlm
IChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+
bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgbGVuZ3Ro
VmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIHJldHVybiBsZW5ndGhWYWx1
ZS50b1VJbnQzMihleGVjKTsKIH0KIAogQUxXQVlTX0lOTElORSBkb3VibGUgdG9MZW5ndGgoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChpc0pT
QXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVuZ3Ro
KCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgbGVuZ3RoVmFsdWUg
PSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvTGVuZ3Ro
KGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1
bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
OCArMTI2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBoYXNJbnN0YW5jZQogCiBp
bmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFyZ2V0
RnVuY3Rpb24pCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVuY3Rpb24tPmdldFByb3RvdHlwZSh2bSwg
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBKU0Z1
bmN0aW9uKiB0YXJnZXRKU0Z1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odGFy
Z2V0RnVuY3Rpb24pOwogCkBAIC0xNTgsNiArMTU5LDcgQEAgaW5saW5lIFN0cnVjdHVyZSogZ2V0
Qm91bmRGdW5jdGlvblN0cnVjdAogCiBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlvbjo6
Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0FycmF5
KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IEpTQzo6Z2V0Q29u
c3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgYm9vbCBjYW5D
b25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmU7CkBAIC0xNzAs
NyArMTcyLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZQogICAg
ICAgICBjYW5Db25zdHJ1Y3QgPyAoc2xvd0Nhc2UgPyBib3VuZEZ1bmN0aW9uQ29uc3RydWN0IDog
Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QpIDogY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IsCiAgICAgICAgIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0
Qm91bmRGdW5jdGlvblN0cnVjdHVyZSh2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LCB0YXJnZXRGdW5j
dGlvbik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBKU0Jv
dW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNCb3Vu
ZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywgYm91bmRBcmdzKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9u
IDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBKU1ZhbHVlOjpwdXRUb1By
aW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAKICAgICAgICAgcHJvdG90eXBlID0gb2Jq
LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBi
cmVhazsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlQnlJ
bmRleChFeGVjCiAgICAgCiAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHN5bnRoZXNpemVQcm90
b3R5cGUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAgIEFT
U0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYm9vbCBwdXRSZXN1bHQg
PSBmYWxzZTsKQEAgLTM4MSwxMSArMzgxLDExIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0cmlu
Z1Nsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7CiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlmICh2
bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3QoKSk7
CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmICh2
bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBpbmxpbmUg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJlCiAgICAgfQogCiAgICAgU3RyaW5nSW1w
bCogaGludFN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KHZhbHVlKS0+dmFsdWUoZXhlYykuaW1w
bCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTm9QcmVmZXJlbmNlOwogCiAgICAgaWYg
KFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1bHQiKSkKQEAgLTc4NCw4ICs3ODQsOSBAQCBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpy
ZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0
eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9IGdldFByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQsIHNsb3QpOwogfQpAQCAtODk3LDYgKzg5
OCw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFsKEV4ZWNTdGF0ZSogZXgKIEFMV0FZU19J
TkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkbyB7CiAgICAgICAg
IGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4g
djEuYXNOdW1iZXIoKSA9PSB2Mi5hc051bWJlcigpOwpAQCAtOTI0LDcgKzkyNiw3IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMKICAgICAgICAgICAgIGlmICh2Mi5p
c09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKICAgICAgICAgICAg
IEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgdjEgPSBw
MTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQpAQCAtOTM0
LDcgKzkzNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMKIAog
ICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBwMiA9IHYy
LnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MiA9IHAyOwogICAgICAgICAgICAg
aWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmlld1By
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxNCArMTMzLDE0IEBAIEVuY29kZWRK
U1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IG9uZSBhcmd1
bWVudCAodGhlIGJ5dGVPZmZzZXQpIikpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAKICAg
ICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXplID0g
c2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+IDEg
JiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKICAgICAgICAgbGl0dGxlRW5kaWFuID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIH0KICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRh
KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBieXRl
T2Zmc2V0IGFuZCB2YWx1ZSkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY29uc3Qg
dW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CkBAIC0x
OTEsMTQgKzE5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICB9IHU7CiAKICAgICB1LnZhbHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4oZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wgbGl0dGxl
RW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlwZW5h
bWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5hcmd1
bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVu
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsNiArNTkyLDggQEAgU3RyaW5nIGdldENh
bGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIAogdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5jdGlv
bk5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gVGhlICJuYW1lIiBwcm9wZXJ0eSBtYXkgaGF2ZSBiZWVuIGFscmVhZHkgYmVlbiBkZWZp
bmVkIGFzIHBhcnQgb2YgYSBwcm9wZXJ0eSBsaXN0IGluIGFuCiAgICAgLy8gb2JqZWN0IGxpdGVy
YWwgKGFuZCB0aGVyZWZvcmUgcmVpZmllZCkuCiAgICAgaWYgKGhhc1JlaWZpZWROYW1lKCkpCkBA
IC02MDgsMTAgKzYxMCwxMCBAQCB2b2lkIEpTRnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZShFeGVj
U3RhCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygmdWlkKSwgJ10n
KTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBuYW1l
ID0ganNTdHItPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIHJlaWZ5TmFtZSh2bSwgZXhlYywgbmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
LmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gdG9OYXRpdmVGcm9tVmFs
dWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlzaW9u
IDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE0ICs4
OSwxNCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBK
U1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAobmV4dC5p
c0ZhbHNlKCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBKU1ZhbHVlIG5leHRJdGVt
ID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc3RvcmFnZS5hcHBlbmQobmV4dEl0ZW0p
OwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5lcmlj
VHlwZWRBcgogCiAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBzdG9yYWdlLnNpemUoKSk7CiAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2Uuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3JhZ2UuYXQoaSkpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgQVNT
RVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSBKU09iamVjdCogY29uc3Ry
dWN0R2VuZXJpY1R5cGVkQXIKICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgbGVuZ3RoU2xvdCk7CiAKICAgICAgICAgICAg
IEpTVmFsdWUgaXRlcmF0b3JGdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JTeW1ib2wpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gV2Ugd291bGQgbGlrZSBu
b3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVsbHkgc2xvdy4gRm9ydHVuYXRlbHks
IHVubGVzcwpAQCAtMTgzLDIxICsxODMsMjEgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RH
ZW5lcmljVHlwZWRBcgogCiAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJndW1lbnRzOwog
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRv
ckZ1bmMsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmd1bWVudHMpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0
R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZpZXdDbGFzcz4oZXhlYywgc3RydWN0
dXJlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxlbmd0aCA9IGxl
bmd0aFNsb3QuaXNVbnNldCgpID8gMCA6IGxlbmd0aFNsb3QuZ2V0VmFsdWUoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAogICAg
ICAgICAKICAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgICAgICBpZiAoIXJlc3VsdCkg
ewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTIzNSw3ICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24g
PSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFN0cnVjdHVyZSogcGFy
ZW50U3RydWN0dXJlID0gZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3RydWN0
dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMs
IGV4ZWMtPm5ld1RhcmdldCgpLCBwYXJlbnRTdHJ1Y3R1cmUpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBzaXplX3QgYXJnQ291
bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0yNTIsMTIgKzI1MiwxMiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IGxlbmd0aCA9IE51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+
KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAgICAgICBvZmZzZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
ICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgICAgICBsZW5ndGggPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBz
cGVjaWVzQ29uc3RydQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBleGVtcGxhci0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCkBAIC02MiwxNCAr
NjIsMTQgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3RydQogICAgIH0K
IAogICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgaWYgKHNwZWNpZXMuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuIGRlZmF1bHRDb25zdHJ1Y3RvcigpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb25z
dHJ1Y3QoZXhlYywgc3BlY2llcywgYXJncywgInNwZWNpZXMgaXMgbm90IGEgY29uc3RydWN0b3Ii
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoSlNBcnJh
eUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4ocmVz
dWx0KSkgewpAQCAtMTQ3LDcgKzE0Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhpbihW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMjIuMi4z
LjUKQEAgLTE1NywxMyArMTU2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKIAogICAgIGxvbmcgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAgICAg
bG9uZyB0byA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVu
Z3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgbG9uZyBm
cm9tID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5ndGgp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZpbmFs
ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBsZW5ndGgsIGxl
bmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYg
KGZpbmFsIDwgZnJvbSkKQEAgLTE4Myw3ICsxODIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0luY2x1
ZGVzKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBWaWV3
Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVlKCkp
OwpAQCAtMTk4LDcgKzE5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhl
YywgMSwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0yMDks
NyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAg
IGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3QtPmlz
TmV1dGVyZWQoKSk7CiAKICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+KCp0
YXJnZXRPcHRpb24pKSkgewpAQCAtMjMwLDcgKzIyOCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jSW5k
ZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8g
MjIuMi4zLjEzCkBAIC0yNDUsNyArMjQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBnZW5lcmljVHlwZQogCiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFs
dWUoKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0yNTUsNyArMjUy
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGF1dG8g
dGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWVXaXRob3V0
Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Ci0gICAgQVNTRVJUKCF2bS5leGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXggPCBs
ZW5ndGg7ICsraW5kZXgpIHsKQEAgLTI2OSw3ICsyNjYsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0pv
aW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZpZXdD
bGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUoKSk7
CkBAIC0yODIsMTEgKzI3OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVy
aWNUeXBlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgpOwog
CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9yLCBsZW5ndGgp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKICAgICAgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIHRoaXNPYmplY3QtPmdl
dEluZGV4UXVpY2tseShpKSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhlYykpOwpAQCAt
Mjk5LDcgKzI5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICB9CiAKICAgICBKU1N0cmluZyogc2VwYXJhdG9yU3RyaW5nID0gc2VwYXJhdG9yVmFsdWUu
dG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpA
QCAtMzEwLDcgKzMwNiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2YoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4xNgpAQCAt
MzM4LDcgKzMzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUK
ICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUpOwog
ICAgIH0KIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtMzQ5LDcgKzM0NCw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUgVmlld0NsYXNz
OjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwotICAgIEFT
U0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwogCiAgICAgZm9y
ICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAgLTQzMiw3ICs0MjcsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAvLyAyMi4yLjMuMjYKQEAgLTQ0NSwxMCArNDM5LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhpc09i
amVjdC0+bGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZElu
ZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgdGhpc0xlbmd0aCwgdGhpc0xlbmd0aCk7Ci0g
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNPYmpl
Y3QtPmlzTmV1dGVyZWQoKSkKQEAgLTQ2Nyw3ICs0NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2Fs
bGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5cGVk
QXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNyZWF0ZVVuaW5p
dGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBBU1NFUlQo
IXJlc3VsdC0+aXNOZXV0ZXJlZCgpKTsKQEAgLTUxOCw3ICs1MTIsNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1ByaXZh
dGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgLy8gMjIuMi4zLjIzCkBAIC01MzcsOSArNTMwLDkgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEFTU0VSVChleGVjLT5hcmd1bWVudCgw
KS5pc051bWJlcigpKTsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQo
KSB8fCBleGVjLT5hcmd1bWVudCgxKS5pc051bWJlcigpKTsKICAgICB1bnNpZ25lZCBiZWdpbiA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0aCk7
Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZtLmV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIFJFTEVB
U0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwogCkBAIC01NzIsNyArNTY1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGFyZ3MuYXBw
ZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0cnVj
dChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAK
ICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHJlc3VsdCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJl
dmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNC0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04MTUsMTIgKzgx
NSwxNCBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTCiAKIGlubGlu
ZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5z
aWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgpKQog
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgaWYg
KGluaXRpYWxMZW5ndGggPj0gTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkK
ICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLCBuZXdU
YXJnZXQpOwogICAgIGVsc2UKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1Rh
cmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJu
IEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2ZpbGUs
IEpTQXJyYXk6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgpKTsK
QEAgLTgzMyw4ICs4MzUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJyYXko
RXhlYwogIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhlYywg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFsdWUo
KSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMs
IHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2NhdGlv
bkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcykpOwog
fQpAQCAtODQ2LDggKzg1MCwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXkoRXhl
Y1N0YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoLCBKU1ZhbHVlIG5l
d1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJp
bmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1
cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1
Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CkBAIC04NTksOCArODY1LDEwIEBAIGlubGluZSBK
U0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0
cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSlNW
YWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1
ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24oZXhl
YywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0
aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHN0cnVj
dHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlz
aW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICB9CiAKICAgICBTdHJpbmcg
cyA9IHgudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKHMuaXM4Qml0
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0pvYi5jcHAJKHJldmlz
aW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBSZWY8TWljcm90YXNrPiBjcmVhdGVKU0pv
YihWTSYgdm0sIEpTVmFsCiAKIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBDYWxsRGF0YSBoYW5kbGVyQ2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgaGFuZGxlckNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9qb2IuZ2V0KCksIGhhbmRs
ZXJDYWxsRGF0YSk7CiAgICAgQVNTRVJUKGhhbmRsZXJDYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9u
ZSk7CkBAIC03MCw3ICs3Myw3IEBAIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihFeGVjU3RhdGUq
IGV4ZWMKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMCwgbGVuZ3RoID0gbV9hcmd1bWVudHMt
Pmxlbmd0aCgpOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKICAgICAgICAgaGFuZGxlckFyZ3Vt
ZW50cy5hcHBlbmQobV9hcmd1bWVudHMtPkpTQXJyYXk6OmdldChleGVjLCBpbmRleCkpOwogICAg
IHByb2ZpbGVkQ2FsbChleGVjLCBQcm9maWxpbmdSZWFzb246Ok1pY3JvdGFzaywgbV9qb2IuZ2V0
KCksIGhhbmRsZXJDYWxsVHlwZSwgaGFuZGxlckNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBoYW5k
bGVyQXJndW1lbnRzKTsKLSAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50
LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE3ICs3OCwxOSBA
QCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAKIGJvb2wgSlNNb2R1
bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBFeGVjU3Rh
dGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBKU01vZHVsZVJlY29yZDo6UmVz
b2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29sdmVJ
bXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0aW9u
OjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBXaGVuIHJlc29sdmVJbXBvcnQgcmVzb2x2
ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBtb2R1bGUgZW52aXJvbm1lbnQgbXVzdCBo
YXZlIHRoZSBiaW5kaW5nLgogICAgICAgICBKU01vZHVsZUVudmlyb25tZW50KiBpbXBvcnRlZE1v
ZHVsZUVudmlyb25tZW50ID0gcmVzb2x1dGlvbi5tb2R1bGVSZWNvcmQtPm1vZHVsZUVudmlyb25t
ZW50KCk7CiAgICAgICAgIFByb3BlcnR5U2xvdCByZWRpcmVjdFNsb3QoaW1wb3J0ZWRNb2R1bGVF
bnZpcm9ubWVudCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0gICAg
ICAgIGJvb2wgcmVzdWx0ID0gaW1wb3J0ZWRNb2R1bGVFbnZpcm9ubWVudC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50
LCBleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZSh2bSktPmdl
dE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBleGVjLCByZXNvbHV0
aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVChyZWRpcmVjdFNsb3QuaXNWYWx1ZSgpKTsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlZGlyZWN0U2xvdC5nZXRWYWx1ZShleGVjLCByZXNvbHV0
aW9uLmxvY2FsTmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHJlZGlyZWN0U2xvdC5hdHRyaWJ1dGVzKCksIHZh
bHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjA1NDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDksMTMgKzE0OSwxNSBAQCBKU0ludGVybmFsUHJvbWlzZSogSlNN
b2R1bGVMb2FkZXI6OmZldGNoCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbZmV0Y2hdICIsIHBy
aW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJsZSgp
LT5tb2R1bGVMb2FkZXJGZXRjaCkKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2goZ2xvYmFsT2JqZWN0LCBleGVj
LCB0aGlzLCBrZXksIGluaXRpYXRvcik7CiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCog
ZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0KTsKICAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGRlZmVycmVkLT5yZWpl
Y3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpK
U01vZHVsZU5hbWVzcGEKIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNNb2R1
bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgY29uc3QgSWRlbnRpZmllclNldCYgZXhwb3J0cykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogCkBAIC03Nyw3ICs3OCw3IEBAIHZvaWQgSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3Q6OmZpbmlzaENyZWEKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25h
bC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1p
c2V4dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNt
YS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1wcmV2ZW50ZXh0
ZW5zaW9ucwogICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnModGhpcywgZXhl
Yyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNF
RChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KIAogdm9pZCBKU01vZHVsZU5hbWVzcGFj
ZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xMzIsNyArMTMzLDcgQEAgYm9vbCBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAogICAgICAgICBBU1NFUlRfVU5VU0VE
KGZvdW5kLCBmb3VuZCk7CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRyYW1wb2xpbmVTbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAg
ICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgZmlsbGVkIHdpdGggVERaIHZhbHVlLCB0aHJvdyBhIHJl
ZmVyZW5jZSBlcnJvci4KICAgICAgICAgaWYgKCF2YWx1ZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NzUsNyArNzc1LDcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6
aW5zdGFudGlhdGVEZWNsYXJhdAogICAgICAgICBKU01vZHVsZVJlY29yZCogaW1wb3J0ZWRNb2R1
bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIGltcG9ydEVudHJ5Lm1vZHVsZVJl
cXVlc3QpOwogICAgICAgICBpZiAoaW1wb3J0RW50cnkuaXNOYW1lc3BhY2Uodm0pKSB7CiAgICAg
ICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbmFtZXNwYWNlT2JqZWN0ID0gaW1wb3J0
ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYm9vbCBwdXRSZXN1
bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50U2V0
KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRyeS5sb2NhbE5hbWUsIG5hbWVzcGFj
ZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25vcmVS
ZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjAsMTYgKzIyMCwxOCBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0YXRl
KiBleGVjCiAgICAgLCBtX3JlcGxhY2VyQ2FsbFR5cGUoQ2FsbFR5cGU6Ok5vbmUpCiAgICAgLCBt
X2dhcChnYXAoZXhlYywgc3BhY2UuZ2V0KCkpKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmICghbV9y
ZXBsYWNlci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZXBsYWNl
ci5hc09iamVjdCgpLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKSB7CiAgICAgICAgIG1fdXNp
bmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0PiBhcnJheSA9
IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
PmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIoZXhl
Yyk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG5hbWUgPSBhcnJh
eS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKG5hbWUuaXNPYmplY3QoKSkgewpAQCAtMjQ4
LDM2ICsyNTAsMzkgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwog
CiBMb2NhbDxVbmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3duPiB2
YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdChtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc051bGwoKSk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIExvY2FsPFVu
a25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwg
ZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRlbnRp
Zmllcik7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBtX2V4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5nZXQoKSk7CisgICAgUHJvcGVy
dHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKHZtLnByb3BlcnR5TmFtZXMt
PmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOwogCiAgICAgU3RyaW5nQnVpbGRl
ciByZXN1bHQ7CiAgICAgaWYgKGFwcGVuZFN0cmluZ2lmaWVkVmFsdWUocmVzdWx0LCB2YWx1ZS5n
ZXQoKSwgb2JqZWN0LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5naWZ5U3VjY2VlZGVkKQot
ICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1VuZGVmaW5lZCgp
KTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIExvY2Fs
PFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gTG9jYWw8
VW5rbm93bj4odm0sIGpzVW5kZWZpbmVkKCkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNOdWxsKCkpOwog
Ci0gICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNTdHJpbmcobV9leGVj
LCByZXN1bHQudG9TdHJpbmcoKSkpOworICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNT
dHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZhbHVlLCBjb25zdCBQcm9wZXJ0eU5h
bWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoIW1fZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBWTSYg
dm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICBpZiAoIW9iamVjdC0+Z2V0UHJv
cGVydHlTbG90KG1fZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9KU09OLCBzbG90KSkKICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogCiAgICAgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiA9IHNsb3QuZ2V0
VmFsdWUobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pOwotICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJuIHRvSlNPTkltcGwodmFsdWUsIHRvSlNPTkZ1bmN0
aW9uLCBwcm9wZXJ0eU5hbWUpOwogfQpAQCAtMzAxLDcgKzMwNiw3IEBAIFN0cmluZ2lmaWVyOjpT
dHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIC8vIENhbGwgdGhlIHRvSlNPTiBmdW5j
dGlvbi4KICAgICB2YWx1ZSA9IHRvSlNPTih2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAgIC8vIENhbGwgdGhlIHJlcGxhY2Vy
IGZ1bmN0aW9uLgpAQCAtMzEwLDcgKzMxNSw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1
bHQgU3RyaW5naWZpZXIKICAgICAgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1lLnZhbHVlKG1f
ZXhlYykpOwogICAgICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHZhbHVlID0gY2Fs
bChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFjZXJDYWxsVHlwZSwgbV9yZXBsYWNl
ckNhbGxEYXRhLCBob2xkZXIsIGFyZ3MpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIH0KIApAQCAtMzI0LDcgKzMyOSw3IEBAIFN0cmluZ2lm
aWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIHZhbHVlID0gdW53cmFwQm94
ZWRQcmltaXRpdmUobV9leGVjLCB2YWx1ZSk7CiAKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
Z2lmeUZhaWxlZDsKIAogICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewpAQCAtMzc3LDE0ICsz
ODIsMTQgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogCiAgICAg
Ym9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5KCk7CiAgICAg
bV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKHZtLCBtX2V4ZWMsIG9iamVjdCkpOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKICAgICBpZiAoIWhvbGRl
clN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAKICAg
ICBkbyB7CiAgICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNrLmxhc3QoKS5hcHBlbmROZXh0UHJv
cGVydHkoKnRoaXMsIGJ1aWxkZXIpKSB7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbV9ob2xk
ZXJTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC00MzYsNiArNDQxLDggQEAgYm9vbCBTdHJpbmdpZmll
cjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIEFTU0VSVChtX2luZGV4IDw9IG1fc2l6ZSk7
CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdHJpbmdpZmllci5tX2V4ZWM7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUuCiAgICAgaWYgKCFtX2lu
ZGV4KSB7CkBAIC00NDQsNyArNDUxLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBl
bmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKG1faXNKU0FycmF5KQogICAgICAgICAgICAgICAg
IG1fc2l6ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5sZW5ndGgoKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAgICAg
ICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnWycpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdBcnJheVJl
cGxhY2VyKQpAQCAtNDUyLDcgKzQ1OSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6YXBw
ZW5kTmV4dFByb3AKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFByb3BlcnR5
TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncyk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blBy
b3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9iamVjdFByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7CiAg
ICAgICAgICAgICB9CkBAIC00ODYsNyArNDkzLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVy
OjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShl
eGVjLCBpbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTUwNCw3ICs1MTEsNyBA
QCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgIGlmICgh
bV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChtX29iamVjdC5nZXQo
KSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgcm9sbEJhY2tQb2ludCA9IGJ1aWxkZXIubGVuZ3RoKCk7CkBAIC02NDAsNyArNjQ3LDcgQEAg
TkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5WYWx1ZSA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjU4LDcgKzY2NSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgYXJyYXkt
Pm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChhcnJheSwgbV9leGVjLCBpbmRl
eFN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSwgZmlsdGVy
ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIGluZGV4U3RhY2su
bGFzdCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7CkBA
IC02NzUsNyArNjgyLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFs
dQogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywgUHJvcGVydHlO
YW1lTW9kZTo6U3RyaW5ncykpOwogICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5sYXN0
KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKQEAgLTY5OCw3
ICs3MDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAg
ICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGhvbGRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIHJldml2ZXIgZnVuY3Rpb24g
c28gYW55IGxvb2t1cCBtYXkgdGhyb3cKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoaW5WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC03MTcsNyArNzI0LDcgQEAgTkVWRVJf
SU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9leGVjLCBwcm9w
KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0
aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgbV9leGVjLCBwcm9wLCBmaWx0ZXJlZFZhbHVlLCBzbG90
KTsKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0KCkr
KzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CkBAIC03NTQs
NyArNzYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQogICAg
IGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkpTT04ucGFyc2Ug
cmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKSk7CiAgICAgSlNTdHJpbmc6OlNhZmVW
aWV3IHNvdXJjZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52
aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKIAogICAgIEpTVmFsdWUgdW5maWx0ZXJlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUxLDYgKzM1MSw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlMK
ICAgICAvLyAzLiBFUzYgUHJveHkuCiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogY3VycmVu
dCA9IG9iamVjdDsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb3duRGVzY3JpcHRvcjsKICAgICB3
aGlsZSAodHJ1ZSkgewpAQCAtMzYyLDEzICszNjMsMTMgQEAgYm9vbCBvcmRpbmFyeVNldFNsb3co
RXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgIC8vIDkuMS45LjEtMiBMZXQgb3duRGVzYyBi
ZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgogICAgICAgICBib29sIG93bkRlc2NyaXB0b3JG
b3VuZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5h
bWUsIG93bkRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghb3duRGVzY3JpcHRvckZvdW5kKSB7CiAgICAg
ICAgICAgICAvLyA5LjEuOS4xLTMtYSBMZXQgcGFyZW50IGJlID8gTy5bW0dldFByb3RvdHlwZU9m
XV0oKS4KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+Z2V0UHJvdG90
eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gOS4xLjkuMS0zLWIgSWYgcGFy
ZW50IGlzIG5vdCBudWxsLCB0aGVuCkBAIC00MDAsNyArNDAxLDcgQEAgYm9vbCBvcmRpbmFyeVNl
dFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBKU09iamVjdCogcmVjZWl2ZXJPYmpl
Y3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBleGlz
dGluZ0Rlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZXhpc3RpbmdEZXNjcmlwdG9yRm91bmQgPSBy
ZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyA5LjEuOS4xLTQtZCBJZiBleGlzdGluZ0Rl
c2NyaXB0b3IgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMTI5Miw3ICsxMjkzLDcgQEAgYm9v
bCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlYwogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewpA
QCAtMTU1Miw3ICsxNTUzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsVG9Q
cmltaQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpT
VmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgaWYgKGZ1bmN0aW9uLmlz
VW5kZWZpbmVkKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2VzSGludCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKQEAgLTE1ODAsNyArMTU4MSw3IEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgY2FsbFRvUHJpbWkKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2JqZWN0Kj4ob2Jq
ZWN0KSwgY2FsbEFyZ3MpOwogICAgIEFTU0VSVCghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkpOwot
ICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgaWYgKHJlc3Vs
dC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGludE1vZGU6OkRvZXNO
b3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5lZCBhbiBvYmplY3QiKSk7CkBAIC0x
NjE4LDcgKzE2MTksNyBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlKEV4
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTm8gZGVmYXVs
dCB2YWx1ZSIpKTsKIH0KQEAgLTE3MTgsNyArMTcxOSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1
bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFs
dWUpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgb2JqZWN0VmFsdWUgPSBv
YmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghb2JqZWN0VmFsdWUuaXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NDAsMTIgKzE3NDEsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcml2YQogdm9pZCBKU09iamVjdDo6
Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYg
KG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1NywxMCArMTc1OSwx
MCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZtKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBu
ZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJvdG8u
aXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NTgsMTYgKzE4NjAsMjAgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogCiBkb3VibGUgSlNPYmplY3Q6
OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4gTm9k
ZXMuY3BwCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgLy8gc2hvdWxkIGJl
IHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAogICAgICAgICByZXR1cm4gMC4wOwogICAgIHJl
dHVybiBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiB9CiAKIEpTU3RyaW5nKiBKU09iamVjdDo6
dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIHByaW1p
dGl2ZS50b1N0cmluZyhleGVjKTsKIH0KQEAgLTMwNzYsMTUgKzMwODIsMTggQEAgYm9vbCB2YWxp
ZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKAogCiBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93RXhj
ZXB0aW9uKQogeworICAgIFZNJiB2bSAgPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gVHJhY2sgb24gdGhlIGdsb2Jh
bGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5IERl
ZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4gdGhl
eSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdpbmcg
YXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFibGUg
KGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZvciBu
b3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgotICAgIFZNOjpEZWxl
dGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZShleGVjLT52bSgpLCBWTTo6RGVsZXRlUHJvcGVydHlN
b2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVTY29w
ZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxlKTsK
ICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKICAgICBib29sIGlzQ3VycmVudERlZmlu
ZWQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJyZW50
KTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3BlcnR5
TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50
LCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBAIC0zMTg0LDEyICszMTkzLDEzIEBAIHZvaWQgSlNPYmpl
Y3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMKIHZvaWQgSlNPYmplY3Q6OmdldEdlbmVyaWNQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2JqZWN0
UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChuZXh0UHJvdG8u
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMDEsMTAgKzMyMTEsMTAgQEAgdm9pZCBK
U09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3Bl
cnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbmV4dFBy
b3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobmV4dFByb3RvLmlzTnVs
bCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjIwLDcgKzMyMzAsNyBAQCBKU1ZhbHVlIEpT
T2JqZWN0OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBtZXRob2QgPSBnZXQoZXhlYywgaWRlbnQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlmICgh
bWV0aG9kLmlzQ2VsbCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDE2ICs0MCwxNiBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNTdGF0ZSogCiAg
ICAgCiAgICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKICAgICBKU1ZhbHVlIGxlbmd0aFByb3Bl
cnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBkb3VibGUgbGVuZ3RoQXNEb3VibGUgPSBsZW5n
dGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJF
TEVBU0VfQVNTRVJUKGxlbmd0aEFzRG91YmxlID49IDAuMCAmJiBsZW5ndGhBc0RvdWJsZSA9PSBz
dGQ6OnRydW5jKGxlbmd0aEFzRG91YmxlKSk7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KGxlbmd0aEFzRG91YmxlKTsKICAgICBmb3IgKHVpbnQ2NF90IGluZGV4
ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgSlNWYWx1ZSBuZXh0ID0g
YXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1bnRpbWVU
eXBlRm9yVmFsdWUobmV4dCk7CkBAIC05Niw4ICs5NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHR5cGVu
YW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4
Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tX
aGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNhbGxiYWNrKSBjb25z
dAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgZm91bmQgPSBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2so
Zm91bmQsIHNsb3QpOwogfQpAQCAtMTA1LDYgKzEwNyw3IEBAIEFMV0FZU19JTkxJTkUgdHlwZW5h
bWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJsZSA9
IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlz
OwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJv
dG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTExMiwxNCArMTE1LDE0IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICAgICAgU3RydWN0dXJl
JiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgp
KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CiAgICAgICAgIGlm
IChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUg
PT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQogICAgICAgICAgICAg
cHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
LSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0xMzQsNiArMTM3
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAgIEFTU0VS
VCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8mIHN0
cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKTsKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25Q
dHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CkBAIC0xNDUs
NyArMTQ5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0
aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTE1Myw3ICsxNTcsNyBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJv
dG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
NTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RydWN0dXJlKiBwcm9taXNlU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTUHJvbWlzZSog
cHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZtLCBwcm9taXNlU3RydWN0dXJlKTsKICAgICBw
cm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXhlYy0+YXJndW1lbnQoMCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgcHJpdmF0ZToKIGlubGluZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQzMl90IGluZGV4ZWRMZW5ndGggPSBi
YXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywgYmFzZSk7CiAK
QEAgLTExOSwxOCArMTIwLDE4IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHBy
b3BlcnQKIAogICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5Rm9y
RW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09IGJhc2UtPmdldEFycmF5TGVuZ3RoKCkp
IHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0eU5h
bWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAg
ICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSBwcm9w
ZXJ0eU5hbWVzLnNpemUoKTsKIAogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEdl
bmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEdl
bmVyaWMgcHJvcGVydHkgbmFtZXMgdmVjdG9yIGNvbnRhaW5zIGFsbCBpbmRleGVkIHByb3BlcnR5
IG5hbWVzLgogICAgICAgICAvLyBTbyBkaXNhYmxlIGluZGV4ZWQgcHJvcGVydHkgZW51bWVyYXRp
b24gcGhhc2UgYnkgc2V0dGluZyB8aW5kZXhlZExlbmd0aHwgdG8gMC4KICAgICAgICAgaW5kZXhl
ZExlbmd0aCA9IDA7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVydHlO
YW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsOCArNTUsMTAgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQcm9w
ZXJ0eU5hbWVJdAogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmpl
Y3QqIGl0ZXJhdGVkT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgaXRlcmF0
ZWRPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1
cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAw
LDE2ICsyMDAsMTggQEAgSlNPYmplY3QqIEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoSlNTY29wZQog
Ly8gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJsZSBi
ZWNvbWVzIGZhbHNlLgogc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzY29wZS0+dHlwZSgpICE9IFdp
dGhTY29wZVR5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdW5zY29w
YWJsZXMgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5zY29wYWJs
ZXNTeW1ib2wpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
ZiAoIXVuc2NvcGFibGVzLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBK
U1ZhbHVlIGJsb2NrZWQgPSBqc0Nhc3Q8SlNPYmplY3QqPih1bnNjb3BhYmxlcyktPmdldChleGVj
LCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIGJsb2NrZWQudG9Cb29sZWFuKGV4ZWMpOwpAQCAtMjE4LDYgKzIyMCw3IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc1Vuc2NvcGFibGUoRXhlY1N0YXQKIEpTT2JqZWN0KiBKU1Njb3BlOjpy
ZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVuZCA9
IHNjb3BlLT5lbmQoKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXQgPSBzY29wZS0+YmVnaW4o
KTsKICAgICB3aGlsZSAoMSkgewpAQCAtMjQwLDcgKzI0Myw3IEBAIEpTT2JqZWN0KiBKU1Njb3Bl
OjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG9iamVjdC0+aGFzUHJvcGVydHko
ZXhlYywgaWRlbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWlzVW5zY29wYWJsZShleGVjLCBzY29w
ZSwgb2JqZWN0LCBpZGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAg
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpLCAiV2hlbiBh
biBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJsZSBiZWNvbWVzIGZh
bHNlIik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRCh0aHJvd1Njb3Bl
LCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSwgIldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycywgdGhl
IHJlc3VsdCBvZiBpc1Vuc2NvcGFibGUgYmVjb21lcyBmYWxzZSIpOwogICAgICAgICB9CiAgICAg
fQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAko
cmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCwxMSBAQCB2b2lkIEpTU3RyaW5nOjpk
dW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsCiAKIGJvb2wgSlNTdHJpbmc6OmVxdWFsU2xvd0Nhc2Uo
RXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogb3RoZXIpIGNvbnN0CiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgU3RyaW5nIHN0cjEgPSB2YWx1ZShleGVjKTsKICAgICBTdHJpbmcgc3RyMiA9IG90aGVyLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBXVEY6OmVxdWFsKCpzdHIxLmltcGwoKSwgKnN0cjIuaW1wbCgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAJKHJldmlz
aW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9p
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIEpTVmFsdWUgSlNTdHJp
bmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUoKSA8
PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBqb2luZWRM
ZW5ndGgoc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NzIsNiArNTcyLDggQEAgVG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhlcgog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJU
eXBlPjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQogeworICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAg
ICAgUGFyc2VyU3RhdGUgc3RhdGUgPSBpbml0aWFsU3RhdGU7CiAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgb2JqZWN0U3RhY2s7CiAgICAgSlNWYWx1ZSBsYXN0VmFsdWU7CkBAIC01ODMsNyArNTg1
LDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAgICAg
ICAgc3RhcnRQYXJzZUFycmF5OgogICAgICAgICAgICAgY2FzZSBTdGFydFBhcnNlQXJyYXk6IHsK
ICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkobV9l
eGVjLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgICAgICBv
YmplY3RTdGFjay5hcHBlbmQoYXJyYXkpOwogICAgICAgICAgICAgfQpAQCAtNjgxLDcgKzY4Myw3
IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0U3Rh
Y2subGFzdCgpKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVudGlm
aWVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgIT0gU3RyaWN0SlNP
TiAmJiBpZGVudCA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3Rv
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50ID09
IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoIXZpc2l0ZWRVbmRlcnNjb3JlUHJvdG8uYWRkKG9iamVjdCkuaXNOZXdFbnRyeSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eSIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTY5Myw3ICs2OTUsNyBAQCBKU1Zh
bHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICAgICAgICAg
IGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KGlkZW50KSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRleC52
YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIGlkZW50LCBsYXN0
VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdCh2bSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnR5cGUgPT0gVG9rQ29tbWEpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9i
amVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6
Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9i
amVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhl
YywgbWFwU3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQo
MCk7CkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXApOwogCiAgICAgSlNWYWx1
ZSBhZGRlckZ1bmN0aW9uID0gbWFwLT5KU09iamVjdDo6Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5zZXQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRkZXJGdW5jdGlvbkNhbGxEYXRhOwpA
QCAtNzgsMTcgKzc4LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNv
bnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSkpOwogCiAgICAgZm9yRWFjaEluSXRlcmFibGUoZXhlYywgaXRlcmFibGUsIFsmXShWTSYg
dm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBuZXh0SXRlbSkgeworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGlmICghbmV4dEl0ZW0uaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBrZXkgPSBuZXh0
SXRlbS5nZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDApKTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBuZXh0SXRlbS5n
ZXQoZXhlYywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEpKTsKLSAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDggKzE2MiwxMCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWF0aFByb3RvRnVuY0NsejMyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICB1aW50MzJfdCB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoY2x6MzIodmFsdWUpKSk7CiB9CkBAIC0xODUs
MTMgKzE4NywxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0h5cG90KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1bnNpZ25lZCBhcmdzQ291bnQgPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CiAgICAgZG91YmxlIG1heCA9IDA7CiAgICAgVmVjdG9yPGRvdWJsZSwg
OD4gYXJnczsKICAgICBhcmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJnc0NvdW50KTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnc0NvdW50OyArK2kpIHsKICAgICAgICAgYXJn
cy51bmNoZWNrZWRBcHBlbmQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoaSkudG9OdW1iZXIoZXhl
YykpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKICAgICAgICAgaWYgKHN0ZDo6aXNpbmYoYXJnc1tpXSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzRG91YmxlTnVtYmVyKCtzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKQEAgLTI5Miw4ICsyOTYsMTAgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNJTXVsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBpbnQzMl90IGxlZnQgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAg
ICBpbnQzMl90IHJpZ2h0ID0gZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGxlZnQgKiByaWdodCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVMb2FkZXJQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTEg
KzExMiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgY29uc3QgSWRlbnRp
ZmllciBtb2R1bGVLZXkgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgU3RyaW5nIHNvdXJjZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9IG1ha2VTb3Vy
Y2Uoc291cmNlLCBtb2R1bGVLZXkuaW1wbCgpKTsKQEAgLTE0MiwxMiArMTQyLDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtb2R1bGVMb2FkZXJQcm90b3R5cGVSZXF1ZXN0ZWRNb2R1bGVzKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3Jk
ID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29yZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAg
ICBpZiAoIW1vZHVsZVJlY29yZCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpKTsKIAogICAgIEpTQXJyYXkqIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgbW9kdWxlUmVjb3JkLT5yZXF1ZXN0
ZWRNb2R1bGVzKCkuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBzaXplX3QgaSA9IDA7CiAgICAgZm9yIChh
dXRvJiBrZXkgOiBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKSkKQEAgLTE1OCw2ICsx
NjAsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGVyUHJvdG90eXBlTW9kdWxlRGVjbGFy
YXRpb25JbnN0YW50aWF0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U01vZHVsZVJlY29yZCogbW9kdWxlUmVjb3JkID0ganNEeW5hbWljQ2FzdDxKU01vZHVsZVJlY29y
ZCo+KGV4ZWMtPmFyZ3VtZW50KDApKTsKICAgICBpZiAoIW1vZHVsZVJlY29yZCkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTE2Niw3ICsxNzAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgICAgIGRhdGFM
b2coIkxvYWRlciBbbGlua10gIiwgbW9kdWxlUmVjb3JkLT5tb2R1bGVLZXkoKSwgIlxuIik7CiAK
ICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
NTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2MywxMSBAQCB2b2lkIE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3I6OnZpc2l0Q2hpbGRyCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5h
cmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5j
dGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGpz
Q2FzdDxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5lcnJvclN0cnVj
dHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwogICAgIEFTU0VSVChlcnJvclN0cnVjdHVyZSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3Nh
Z2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwxMSBAQCB2b2lkIE51bWJlckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhdGlvbihWCiAvLyBFQ01BIDE1LjcuMQogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0V2l0aE51bWJlckNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkb3VibGUgbiA9IGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA/IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpIDogMDsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgTnVtYmVyT2JqZWN0KiBv
YmplY3QgPSBOdW1iZXJPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDgg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNvbnN0cnVjdAogewogICAgIE9iamVj
dENvbnN0cnVjdG9yKiBvYmplY3RDb25zdHJ1Y3RvciA9IGpzQ2FzdDxPYmplY3RDb25zdHJ1Y3Rv
cio+KGV4ZWMtPmNhbGxlZSgpKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
b2JqZWN0Q29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIG5ld1RhcmdldCBjb25kaXRpb24gaW4gdGhpcyBjYWxs
ZXIgc2lkZSBpbnN0ZWFkIG9mIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0
dXJlIHNpZGUuCiAgICAgLy8gU2luY2UgaWYgd2UgZm91bmQgdGhpcyBjb25kaXRpb24gaXMgbWV0
LCB3ZSBzaG91bGQgbm90IGZhbGwgaW50byB0aGUgdHlwZSBjb252ZXJzaW9uIGluIHRoZSBzdGVw
IDMuCkBAIC0xMjksNyArMTMxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIGNv
bnN0cnVjdAogICAgIGlmIChuZXdUYXJnZXQgJiYgbmV3VGFyZ2V0ICE9IG9iamVjdENvbnN0cnVj
dG9yKSB7CiAgICAgICAgIC8vIGEuIFJldHVybiA/IE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVj
dG9yKE5ld1RhcmdldCwgIiVPYmplY3RQcm90b3R5cGUlIikuCiAgICAgICAgIFN0cnVjdHVyZSog
b2JqZWN0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgbmV3VGFyZ2V0LCBnbG9iYWxPYmplY3QtPm9iamVjdFN0cnVjdHVyZUZvck9iamVj
dENvbnN0cnVjdG9yKCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIG9iamVj
dFN0cnVjdHVyZSk7CiAgICAgfQpAQCAtMjExLDggKzIxMywxMCBAQCBKU1ZhbHVlIG9iamVjdENv
bnN0cnVjdG9yR2V0UHJvdG90eXBlT2YoCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
b2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29uc3RydWN0b3JH
ZXRQcm90b3R5cGVPZihleGVjLCBvYmplY3QpKTsKIH0KQEAgLTIzMSw3ICsyMzUsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBvYmpl
Y3RWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmplY3RWYWx1ZSk7CiAKICAgICBpZiAoIWNoZWNrUHJvdG9TZXR0ZXJBY2Nl
c3NBbGxvd2VkKGV4ZWMsIG9iamVjdCkpIHsKQEAgLTI0MSwxNiArMjQ1LDE4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogICAgIGJvb2wgc2hvdWxkVGhyb3dJ
ZkNhbnRTZXQgPSB0cnVlOwogICAgIGJvb2wgZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQ
cm90b3R5cGUodm0sIGV4ZWMsIHByb3RvVmFsdWUsIHNob3VsZFRocm93SWZDYW50U2V0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3RvdHlwZSwgdm0uZXhjZXB0aW9uKCkgfHwgZGlkU2V0
UHJvdG90eXBlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGRpZFNldFByb3RvdHlwZSwgc2NvcGUuZXhj
ZXB0aW9uKCkgfHwgZGlkU2V0UHJvdG90eXBlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KG9iamVjdFZhbHVlKTsKIH0KIAogSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3Bl
cnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKICAgICBpZiAoIW9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RPYmplY3RGcm9tUHJvcGVydHlEZXNjcmlw
dG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwpAQCAtMjYxLDE5ICsyNjcsMjEgQEAgSlNWYWx1ZSBvYmpl
Y3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RAogCiBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9y
R2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmpl
Y3QpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVj
LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRo
b2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHBy
b3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRl
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51
bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIEpTT2JqZWN0KiBkZXNjcmlwdG9ycyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGZv
ciAoYXV0byYgcHJvcGVydHlOYW1lIDogcHJvcGVydGllcykgewogICAgICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlw
dG9yKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQpAQCAtMjg1LDcgKzI5Myw3IEBA
IEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eUQKIAogICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChkZXNjcmlwdG9ycyk7CiAgICAgICAgIGRlc2NyaXB0b3JzLT5wdXRP
d25EYXRhUHJvcGVydHlNYXlCZUluZGV4KGV4ZWMsIHByb3BlcnR5TmFtZSwgZnJvbURlc2NyaXB0
b3IsIHNsb3QpOwotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRlc2Ny
aXB0b3JzOwpAQCAtMjkzLDE5ICszMDEsMjMgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1By
b3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29u
c3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBwcm9wZXJ0eU5h
bWUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlEZXNjcmlwdG9ycyhleGVjLCBvYmplY3QpKTsKIH0KQEAgLTMxMyw4ICszMjUsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVz
ZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqIGV4ZWMpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhleGVj
LCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGllc01v
ZGU6OkluY2x1ZGUpKTsKIH0KQEAgLTMyMiw4ICszMzYsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBvYmplY3RDb25zdAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2Fj
aGUuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3du
UHJvcGVydHlTeW1ib2xzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlO
YW1lTW9kZTo6U3ltYm9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogfQpA
QCAtMzMxLDE2ICszNDcsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogLy8gRklYTUU6IFVzZSB0aGUgZW51bWVyYXRpb24gY2FjaGUuCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yS2V5cyhFeGVjU3RhdGUqIGV4ZWMpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
T2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG93blByb3BlcnR5S2V5cyhl
eGVjLCBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MsIERvbnRFbnVtUHJvcGVydGll
c01vZGU6OkV4Y2x1ZGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvd25F
bnVtZXJhYmxlUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMsIERvbnRFbnVtUHJvcGVydGllc01vZGU6
OkV4Y2x1ZGUpKTsKIH0KQEAgLTM2MCw0MCArMzgwLDQwIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGUKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHko
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpKSB7CiAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5l
bnVtZXJhYmxlKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBkZXNjLnNldEVudW1lcmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVs
c2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24t
Pmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpKSB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5jb25maWd1cmFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0Q29uZmlndXJhYmxlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICB9IGVsc2UgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZTsKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGRlc2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlKTsKLSAg
ICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZXNjLnNldFZh
bHVlKHZhbHVlKTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS53cml0YWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBkZXNjLnNldFdyaXRhYmxlKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7Ci0gICAgfSBlbHNlIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICB9
IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuZ2V0KSkgewogICAgICAgICBKU1ZhbHVlIGdldCA9IGRlc2NyaXB0aW9uLT5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdldCk7Ci0gICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFnZXQuaXNVbmRlZmluZWQoKSkgewog
ICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC00MDMsMTIgKzQyMywxMiBAQCBib29s
IHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgZGVzYy5zZXRHZXR0ZXIoZ2V0KTsKLSAgICB9IGVsc2UgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24tPmhhc1Byb3BlcnR5
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpKSB7CiAgICAgICAgIEpTVmFsdWUgc2V0
ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsKLSAg
ICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIXNldC5p
c1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTQxOCw3
ICs0MzgsNyBAQCBib29sIHRvUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVzYy5zZXRTZXR0ZXIoc2V0KTsKLSAgICB9
IGVsc2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWRlc2MuaXNB
Y2Nlc3NvckRlc2NyaXB0b3IoKSkKQEAgLTQ0NSw3ICs0NjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3BlcnRpZXMgY2FuIG9ubHkgYmUgZGVmaW5l
ZCBvbiBPYmplY3RzLiIpKTsKICAgICBKU09iamVjdCogb2JqID0gYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Q
cm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAg
YXV0byBzdWNjZXNzID0gdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQo
MiksIGRlc2NyaXB0b3IpOwpAQCAtNDUzLDcgKzQ3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIEFTU0VSVCgoZGVzY3JpcHRvci5hdHRyaWJ1
dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkp
KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICBvYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVy
dHkob2JqLCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIHRydWUpOwogICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CkBAIC00NjEsMTYg
KzQ4MSwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIHN0
YXRpYyBKU1ZhbHVlIGRlZmluZVByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b2JqZWN0LCBKU09iamVjdCogcHJvcGVydGllcykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
c0FuZFN5bWJvbHMpOwotICAgIGFzT2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZShleGVj
LT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGFz
T2JqZWN0KHByb3BlcnRpZXMpLT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
YXNPYmplY3QocHJvcGVydGllcyksIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpFeGNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgIHNpemVfdCBu
dW1Qcm9wZXJ0aWVzID0gcHJvcGVydHlOYW1lcy5zaXplKCk7CiAgICAgVmVjdG9yPFByb3BlcnR5
RGVzY3JpcHRvcj4gZGVzY3JpcHRvcnM7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbWFya0J1
ZmZlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykgewog
ICAgICAgICBKU1ZhbHVlIHByb3AgPSBwcm9wZXJ0aWVzLT5nZXQoZXhlYywgcHJvcGVydHlOYW1l
c1tpXSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsK
ICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGlmICghdG9Q
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcCwgZGVzY3JpcHRvcikpCkBAIC00OTAsOCArNTEz
LDggQEAgc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdAogICAgICAgICBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZXNbaV07CiAgICAgICAgIGlmIChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcml2YXRlTmFtZShwcm9wZXJ0eU5hbWUpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9y
c1tpXSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yc1tpXSwgdHJ1ZSk7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
fQogICAgIHJldHVybiBvYmplY3Q7CkBAIC01MzEsNiArNTU0LDkgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0cnVjdG9yU2VhbChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiBPLgogICAgIEpTVmFs
dWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAg
LTUzOCwxNCArNTY0LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29u
c3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pT
RmluYWxPYmplY3Qob2JqZWN0KSkgewotICAgICAgICBvYmplY3QtPnNlYWwoZXhlYy0+dm0oKSk7
CisgICAgICAgIG9iamVjdC0+c2VhbCh2bSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUob2JqKTsKICAgICB9CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkg
bmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJs
ZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRp
ZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhv
ZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMs
IEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShvYmopOwogICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBwcm9wZXJ0aWVzLmVuZCgpOwogICAgIGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
QEAgLTU1OSwxNCArNTg1LDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0
Q29uc3QKICAgICAgICAgLy8gYi4gSWYgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIGlzIHRydWUsIHNl
dCBkZXNjLltbQ29uZmlndXJhYmxlXV0gdG8gZmFsc2UuCiAgICAgICAgIGRlc2Muc2V0Q29uZmln
dXJhYmxlKGZhbHNlKTsKICAgICAgICAgLy8gYy4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggUCwgZGVzYywgYW5kIHRydWUgYXMgYXJndW1l
bnRzLgotICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWZpbmVPd25Q
cm9wZXJ0eShvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2
bSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0
cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKICAgICB9CiAKICAgICAvLyAzLiBTZXQg
dGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0gICAg
b2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0
LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPnByZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gNC4gUmV0dXJuIE8uCkBAIC01NzUsMTUgKzYwMSwxOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIEpTT2JqZWN0KiBv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3Qp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoaXNKU0ZpbmFsT2JqZWN0KG9iamVjdCkgJiYgIWhh
c0luZGV4ZWRQcm9wZXJ0aWVzKG9iamVjdC0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAgIG9i
amVjdC0+ZnJlZXplKGV4ZWMtPnZtKCkpOworICAgICAgICBvYmplY3QtPmZyZWV6ZSh2bSk7CiAg
ICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQg
b3duIHByb3BlcnR5IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRp
ZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6
SW5jbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
b2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVj
LCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5j
bHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBvYmplY3Q7CiAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpA
QCAtNjAxLDE0ICs2MzAsMTQgQEAgSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4
ZWNTdAogICAgICAgICAvLyBjLiBJZiBkZXNjLltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0
IGRlc2MuW1tDb25maWd1cmFibGVdXSB0byBmYWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1
cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBkLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5
XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVu
dHMuCi0gICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blBy
b3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZt
KS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRy
dWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKICAgICAvLyAzLiBTZXQgdGhlIFtbRXh0ZW5zaWJs
ZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8gdG8gZmFsc2UuCi0gICAgb2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPnBy
ZXZlbnRFeHRlbnNpb25zKG9iamVjdCwgZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyA0LiBSZXR1cm4g
Ty4KQEAgLTYxNywxMiArNjQ2LDE0IEBAIEpTT2JqZWN0KiBvYmplY3RDb25zdHJ1Y3RvckZyZWV6
ZShFeGVjU3QKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMS4gSWYgVHlw
ZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gTy4KICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFy
Z3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqKTsKICAgICBKU09iamVjdCogcmVzdWx0ID0gb2JqZWN0Q29uc3RydWN0
b3JGcmVlemUoZXhlYywgYXNPYmplY3Qob2JqKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CkBAIC02MzksNiArNjcwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RDb25zdAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENv
bnN0cnVjdG9ySXNTZWFsZWQoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
Ly8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCByZXR1cm4gdHJ1ZS4KICAgICBKU1ZhbHVl
IG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCkBAIC02
NDYsMTIgKzY4MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9iaik7CiAKICAgICBpZiAoaXNKU0Zp
bmFsT2JqZWN0KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKG9iamVjdC0+aXNTZWFsZWQoZXhlYy0+dm0oKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZCh2bSkpKTsKIAogICAgIC8vIDIu
IEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1i
b2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgUHJv
cGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAg
ICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRp
ZXMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNjcwLDEzICs3MDQsMTYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIC8vIDMuIElmIHRo
ZSBbW0V4dGVuc2libGVdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBPIGlzIGZhbHNlLCB0aGVuIHJl
dHVybiB0cnVlLgogICAgIC8vIDQuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlLgogICAgIGJvb2wg
aXNFeHRlbnNpYmxlID0gb2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbighaXNFeHRlbnNpYmxlKSk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc0Zyb3plbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3Qs
IHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAg
aWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY4NCwxMiArNzIxLDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc0Zyb3plbihleGVjLT52bSgp
KSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3QtPmlz
RnJvemVuKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5IG5h
bWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVz
LCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgb2JqZWN0LT5tZXRob2RU
YWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBF
bnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CkBAIC03MDksMTkgKzc0NiwyMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9i
amVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3Bl
cnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAgLy8gNC4gT3RoZXJ3aXNl
LCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5z
aWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4dGVu
c2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1
Y3RvcklzRXh0ZW5zaWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0g
b2JqZWN0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTczNSwxMyArNzc0LDE0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIEpTQXJyYXkqIG93blByb3BlcnR5S2V5
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIFByb3BlcnR5TmFtZU1vZGUgcHJv
cGVydHlOYW1lTW9kZSwgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZSBkb250RW51bVByb3BlcnRpZXNN
b2RlKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhl
YywgcHJvcGVydHlOYW1lTW9kZSk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUo
ZG9udEVudW1Qcm9wZXJ0aWVzTW9kZSkpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBKU0FycmF5KiBrZXlzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgc3dp
dGNoIChwcm9wZXJ0eU5hbWVNb2RlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVj
dChFeGVjU3RhCiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIGRlc2NyaXB0aW9uID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgaWYgKCFkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTIgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmplY3QpCkBAIC0x
MDEsNiArMTA0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBl
T2YoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgaWYgKCF0aGlz
T2JqKQpAQCAtMTA5LDkgKzExNSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgdiA9IGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDAp
KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CkBAIC0x
MjAsNyArMTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwog
ICAgICAgICBpZiAodiA9PSB0aGlzT2JqKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogICAgICAgICB2ID0gYXNPYmplY3QodiktPmdldFByb3Rv
dHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMTMxLDcgKzEzNiw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIEpTVmFsdWUgZ2V0ID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xNDAs
NyArMTQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJp
bnZhbGlkIGdldHRlciB1c2FnZSIpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwpAQCAtMTYwLDcgKzE2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgb2JqZWN0UHJvdG8KICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
c2V0ID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xNjksNyArMTc0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJpbnZhbGlkIHNldHRlciB1c2FnZSIpKTsK
IAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtl
eShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTg1
LDEyICsxOTAsMTUgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwog
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVj
dChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMCku
dG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXNPYmpl
Y3QsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CkBA
IC0yMTIsMTIgKzIyMCwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jTG9va3Vw
U2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRv
T2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
c09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5
KTsKQEAgLTIzOSwxMiArMjUwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQ
cm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRv
VGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBib29sIGVudW1lcmFibGUgPSB0aGlzT2JqZWN0LT5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKSAm
JiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKTsKQEAgLTI1NCw5ICsyNjgsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogLy8gMTUuMi40LjMgT2JqZWN0LnByb3Rv
dHlwZS50b0xvY2FsZVN0cmluZygpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVj
dFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIC8vIDEuIExldCBPIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBUb09iamVjdCBwYXNz
aW5nIHRoZSB0aGlzIHZhbHVlIGFzIHRoZSBhcmd1bWVudC4KICAgICBKU09iamVjdCogb2JqZWN0
ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgLy8gMi4gTGV0IHRvU3RyaW5nIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyBwYXNzaW5nICJ0b1N0cmluZyIgYXMg
dGhlIGFyZ3VtZW50LgpAQCAtMjkyLDcgKzMwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0UHJvdG8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3Qt
PmdldFByb3BlcnR5U2xvdChleGVjLCB0b1N0cmluZ1RhZ1N5bWJvbCwgWyZdIChib29sIGZvdW5k
LCBQcm9wZXJ0eVNsb3QmIHRvU3RyaW5nVGFnU2xvdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgIGlm
IChmb3VuZCkgewogICAgICAgICAgICAgSlNWYWx1ZSBzdHJpbmdUYWcgPSB0b1N0cmluZ1RhZ1Ns
b3QuZ2V0VmFsdWUoZXhlYywgdG9TdHJpbmdUYWdTeW1ib2wpOwotICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgICAgICBpZiAoc3RyaW5nVGFnLmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgICAgICBKU1Jv
cGVTdHJpbmc6OlJvcGVCdWlsZGVyIHJvcGVCdWlsZGVyKHZtKTsKQEAgLTMwNyw3ICszMjQsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIH0KIAog
ICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSkt
PnRvU3RyaW5nTmFtZSh0aGlzT2JqZWN0LCBleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgU3RyaW5nIG5ld1N0cmluZyA9IFdURjo6dHJ5
TWFrZVN0cmluZygiW29iamVjdCAiLCBXVEZNb3ZlKHRhZyksICJdIik7CiAgICAgICAgIGlmICgh
bmV3U3RyaW5nKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCwxMSArNDQsMTIgQEAgTkVWRVJfSU5MSU5FIEpT
VmFsdWUganNBZGRTbG93Q2FzZShDYWxsRgogewogICAgIC8vIGV4Y2VwdGlvbiBmb3IgdGhlIERh
dGUgZXhjZXB0aW9uIGluIGRlZmF1bHRWYWx1ZSgpCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1Zh
bHVlIHAxID0gdjEudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBwMiA9IHYyLnRvUHJpbWl0aXZlKGNh
bGxGcmFtZSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogCiAg
ICAgaWYgKHAxLmlzU3RyaW5nKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDExIEBAIHZvaWQgUHJvcGVydHlEZXNjcmlwdG9yOjpz
ZXRVbmRlZmluZWQoKQogR2V0dGVyU2V0dGVyKiBQcm9wZXJ0eURlc2NyaXB0b3I6OnNsb3dHZXR0
ZXJTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKICAgICBH
ZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
bV9nZXR0ZXIgJiYgIW1fZ2V0dGVyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIGdldHRlclNldHRl
ci0+c2V0R2V0dGVyKHZtLCBnbG9iYWxPYmplY3QsIGpzQ2FzdDxKU09iamVjdCo+KG1fZ2V0dGVy
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDIzICs1
NSwyMyBAQCBQcm94eUNvbnN0cnVjdG9yOjpQcm94eUNvbnN0cnVjdG9yKFZNJiB2CiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VSZXZvY2FibGVQcm94eShFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+
dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlByb3h5LnJldm9jYWJsZSBuZWVkcyB0byBiZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiB0
aGUgdGFyZ2V0IGFuZCB0aGUgaGFuZGxlciIpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgQXJnTGlzdCBhcmdzKGV4ZWMpOwogICAgIEpTVmFsdWUgdGFyZ2V0ID0gYXJncy5hdCgw
KTsKICAgICBKU1ZhbHVlIGhhbmRsZXIgPSBhcmdzLmF0KDEpOwogICAgIFByb3h5T2JqZWN0KiBw
cm94eSA9IFByb3h5T2JqZWN0OjpjcmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCB0YXJnZXQsIGhhbmRsZXIpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgUHJveHlSZXZva2UqIHJldm9rZSA9IFByb3h5UmV2b2tlOjpj
cmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJveHlSZXZva2VTdHJ1Y3R1
cmUoKSwgcHJveHkpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBKU09iamVjdCogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJwcm94eSIpLCBwcm94
eSwgTm9uZSk7CiAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIG1ha2VJZGVudGlmaWVyKHZtLCAi
cmV2b2tlIiksIHJldm9rZSwgTm9uZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDEyICs1MywxMyBAQCBQcm94eU9iamVjdDo6UHJveHlPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1CiBT
dHJpbmcgUHJveHlPYmplY3Q6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0LCBF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgY29uc3QgUHJveHlPYmplY3QqIHBy
b3h5ID0ganNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4ob2JqZWN0KTsKICAgICB3aGlsZSAocHJv
eHkpIHsKICAgICAgICAgY29uc3QgSlNPYmplY3QqIHRhcmdldCA9IHByb3h5LT50YXJnZXQoKTsK
ICAgICAgICAgaWYgKGlzQXJyYXkoZXhlYywgdGFyZ2V0KSkKICAgICAgICAgICAgIHJldHVybiB0
YXJnZXQtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50b1N0cmluZ05hbWUodGFyZ2V0LCBleGVj
KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgcHJveHkgPSBq
c0R5bmFtaWNDYXN0PGNvbnN0IFByb3h5T2JqZWN0Kj4odGFyZ2V0KTsKQEAgLTE0Myw3ICsxNDQs
NyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAgQ2FsbERh
dGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBnZXRIYW5k
bGVyID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJv
cGVydHlOYW1lcy0+Z2V0LCBBU0NJSUxpdGVyYWwoIidnZXQnIHByb3BlcnR5IG9mIGEgUHJveHkn
cyBoYW5kbGVyIG9iamVjdCBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKGdldEhhbmRsZXIuaXNVbmRlZmlu
ZWQoKSkKQEAgLTE1NCw3ICsxNTUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQo
RXhlY1N0YXRlCiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNW
YWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY2VpdmVyKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQg
PSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJn
dW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKQEAgLTE2OCw3ICsxNjksNyBAQCBzdGF0
aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlHZXQoRXhlY1N0YXRlCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICByZXR1cm4g
dHJhcFJlc3VsdDsKQEAgLTE3Niw4ICsxNzcsMTAgQEAgc3RhdGljIEpTVmFsdWUgcGVyZm9ybVBy
b3h5R2V0KEV4ZWNTdGF0ZQogCiBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0KEV4ZWNTdGF0
ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybVByb3h5R2V0KGV4ZWMs
IHRoaXMsIHNsb3QudGhpc1ZhbHVlKCksIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB1bnNpZ25lZCBpZ25vcmVkQXR0cmlidXRlcyA9IDA7CiAg
ICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBpZ25vcmVkQXR0cmlidXRlcywgcmVzdWx0KTsKQEAgLTIx
MSw3ICsyMTQsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1
ZSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldE93blByb3BlcnR5
RGVzY3JpcHRvciIpLCBBU0NJSUxpdGVyYWwoIidnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InIHBy
b3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3JNZXRob2QuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIHBlcmZvcm1EZWZhdWx0
R2V0T3duUHJvcGVydHkoKTsKQEAgLTIyMCw3ICsyMjMsNyBAQCBib29sIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtSW50ZXJuYWxNZXRob2RHCiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50
aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0
cmFwUmVzdWx0ID0gY2FsbChleGVjLCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0LmlzVW5kZWZpbmVkKCkgJiYg
IXRyYXBSZXN1bHQuaXNPYmplY3QoKSkgewpAQCAtMjMwLDcgKzIzMyw3IEBAIGJvb2wgUHJveHlP
YmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciB0
YXJnZXRQcm9wZXJ0eURlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldFByb3BlcnR5RGVzY3Jp
cHRvckRlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9w
ZXJ0eU5hbWUsIHRhcmdldFByb3BlcnR5RGVzY3JpcHRvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0LmlzVW5kZWZpbmVkKCkpIHsKQEAg
LTI0Myw3ICsyNDYsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRob2RH
CiAgICAgICAgIC8vIEZJWE1FOiB0aGlzIGRvZXNuJ3Qgd29yayBpZiAndGFyZ2V0JyBpcyBhbm90
aGVyIFByb3h5LiBXZSBkb24ndCBoYXZlIGlzRXh0ZW5zaWJsZSBpbXBsZW1lbnRlZCBpbiBhIHdh
eSB0aGF0IGZpdHMgdy8gUHJveHlzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0Mzc1CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFy
Z2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSB0ZXN0IGZvciB0aGlzIGVycm9yLiBJJ20gbm90IHN1
cmUgaG93IHRvIGJlY2F1c2UKQEAgLTI1NywxMSArMjYwLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6
OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICB9CiAKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9
IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3I7CiAg
ICAgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgdHJhcFJlc3VsdCwgdHJhcFJlc3VsdEFzRGVz
Y3JpcHRvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHRo
cm93RXhjZXB0aW9uID0gZmFsc2U7CiAgICAgYm9vbCB2YWxpZCA9IHZhbGlkYXRlQW5kQXBwbHlQ
cm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgbnVsbHB0ciwgcHJvcGVydHlOYW1lLCBpc0V4dGVuc2li
bGUsCkBAIC0yODAsNyArMjgzLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFs
TWV0aG9kRwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNBY2Nlc3NvckRlc2Ny
aXB0b3IoKSkgewogICAgICAgICBHZXR0ZXJTZXR0ZXIqIGdldHRlclNldHRlciA9IHRyYXBSZXN1
bHRBc0Rlc2NyaXB0b3Iuc2xvd0dldHRlclNldHRlcihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBzbG90LnNldEdldHRlclNsb3Qo
dGhpcywgdHJhcFJlc3VsdEFzRGVzY3JpcHRvci5hdHRyaWJ1dGVzKCksIGdldHRlclNldHRlcik7
CiAgICAgfSBlbHNlIGlmICh0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3Io
KSAmJiAhdHJhcFJlc3VsdEFzRGVzY3JpcHRvci52YWx1ZSgpLmlzRW1wdHkoKSkKQEAgLTMxOSw3
ICszMjIsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAg
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBo
YXNNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2
bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIEFTQ0lJTGl0ZXJhbCgiJ2hhcycgcHJvcGVydHkgb2YgYSBQ
cm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGhhc01ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICByZXR1cm4gcGVyZm9ybURlZmF1bHRIYXNQcm9wZXJ0eSgpOwpAQCAtMzI4LDE3ICszMzEsMTcg
QEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogICAgIGFyZ3VtZW50
cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQ
dWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVp
ZCgpKSkpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaGFzTWV0aG9kLCBj
YWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1
bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpIHsKICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgaXNQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkID0g
dGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKTsgCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKGlzUHJvcGVydHlEZXNjcmlwdG9yRGVmaW5lZCkgewogICAgICAgICAgICAg
aWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKSB7CkBAIC0zNDYsNyArMzQ5LDcgQEAgYm9v
bCBQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KEV4ZQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxl
ID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJQcm94eSAnaGFzJyBtdXN0IHJldHVybiAndHJ1ZScgZm9yIGEgbm9uLWV4
dGVuc2libGUgJ3RhcmdldCcgb2JqZWN0IHdpdGggYSBjb25maWd1cmFibGUgcHJvcGVydHkiKSk7
CkBAIC00MTksNyArNDIyLDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVB1dChFeGVjU3Rh
dGUqIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAg
IEpTVmFsdWUgc2V0TWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBj
YWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+c2V0LCBBU0NJSUxpdGVyYWwoIidzZXQnIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKICAgICBpZiAoc2V0TWV0aG9kLmlzVW5kZWZpbmVkKCkpCkBAIC00MzEsMTAgKzQz
NCwxMCBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSogCiAgICAgYXJn
dW1lbnRzLmFwcGVuZChwdXRWYWx1ZSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzVmFsdWUp
OwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgc2V0TWV0aG9kLCBjYWxsVHlw
ZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9v
bGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
dHJhcFJlc3VsdEFzQm9vbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDcyLDggKzQ3NSw5
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWMKIGJvb2wgUHJveHlP
YmplY3Q6OnB1dEJ5SW5kZXhDb21tb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHRoaXNWYWx1
ZSwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHB1dFZhbHVlLCBib29sIHNob3VsZFRo
cm93KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb20oZXhlYywgcHJvcGVydHlOYW1lKTsgCi0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5h
bWUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBhdXRvIHBlcmZvcm1EZWZhdWx0UHV0ID0gWyZdICgpIHsKICAgICAgICAg
SlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtNTA3LDcgKzUxMSw3IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBlcmYKICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0g
aGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZp
ZXIodm0sICJhcHBseSIpLCBBU0NJSUxpdGVyYWwoIidhcHBseScgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0YXJn
ZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCkp
IHsKQEAgLTUxOCw3ICs1MjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1Y3RBcnJheShl
eGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0ciksIEFyZ0xp
c3QoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBh
cmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CkBAIC01NTcsNyArNTYxLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgY29uc3RydWN0TWV0aG9kID0gaGFuZGxl
ci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIodm0s
ICJjb25zdHJ1Y3QiKSwgQVNDSUlMaXRlcmFsKCInY29uc3RydWN0JyBwcm9wZXJ0eSBvZiBhIFBy
b3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY29uc3RydWN0aWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU09iamVj
dCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAgIGlmIChjb25zdHJ1Y3RNZXRob2QuaXNV
bmRlZmluZWQoKSkgewpAQCAtNTY4LDE0ICs1NzIsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIH0KIAogICAgIEpTQXJyYXkqIGFyZ0FycmF5ID0gY29u
c3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51
bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1
bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQoYXJnQXJyYXkpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoZXhlYy0+bmV3VGFyZ2V0KCkpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBjb25zdHJ1Y3RNZXRob2QsIGNhbGxUeXBl
LCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoIXJlc3VsdC5pc09i
amVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJSZXN1bHQgZnJvbSBQcm94eSBoYW5kbGVyJ3MgJ2NvbnN0cnVjdCcgbWV0aG9k
IHNob3VsZCBiZSBhbiBvYmplY3QiKSk7CkBAIC02MTgsNyArNjIyLDcgQEAgYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3RhdAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAg
IENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVsZXRlUHJvcGVydHlNZXRob2QgPSBo
YW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmll
cih2bSwgImRlbGV0ZVByb3BlcnR5IiksIEFTQ0lJTGl0ZXJhbCgiJ2RlbGV0ZVByb3BlcnR5JyBw
cm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhp
cy0+dGFyZ2V0KCk7CiAgICAgaWYgKGRlbGV0ZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVkKCkp
CkBAIC02MjgsMTEgKzYzMiwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVsZXRlKEV4
ZWNTdGF0CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBl
bmQoaWRlbnRpZmllclRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQo
JnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2Fs
bChleGVjLCBkZWxldGVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBi
b29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29s
KQpAQCAtNjQ2LDcgKzY1MCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhl
Y1N0YXQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5Miw3ICs2OTYsNyBAQCBib29sIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtUHJldmVudEV4dGVuc2lvCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZCA9
IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlm
aWVyKHZtLCAicHJldmVudEV4dGVuc2lvbnMiKSwgQVNDSUlMaXRlcmFsKCIncHJldmVudEV4dGVu
c2lvbnMnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJn
ZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAocHJldmVudEV4dGVuc2lvbnNNZXRob2QuaXNV
bmRlZmluZWQoKSkKQEAgLTcwMSwxNiArNzA1LDE2IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZv
cm1QcmV2ZW50RXh0ZW5zaW8KICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAg
ICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgcHJldmVudEV4dGVuc2lvbnNNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFu
ZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNC
b29sKSB7CiAgICAgICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdwcmV2ZW50RXh0
ZW5zaW9ucycgdHJhcCByZXR1cm5lZCB0cnVlIGV2ZW4gdGhvdWdoIGl0cyB0YXJnZXQgaXMgZXh0
ZW5zaWJsZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFsc2UiKSk7CkBAIC03NDUsNyArNzQ5
LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJsZShFeAogICAgIENhbGxE
YXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgaXNFeHRl
bnNpYmxlTWV0aG9kID0gaGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgbWFrZUlkZW50aWZpZXIodm0sICJpc0V4dGVuc2libGUiKSwgQVNDSUlMaXRlcmFsKCInaXNF
eHRlbnNpYmxlJyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFi
bGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTT2JqZWN0
KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTc1NSwxNSArNzU5LDE1IEBAIGJvb2wgUHJv
eHlPYmplY3Q6OnBlcmZvcm1Jc0V4dGVuc2libGUoRXgKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUg
dHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgaXNFeHRlbnNpYmxlTWV0aG9kLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIGlz
VGFyZ2V0RXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodHJhcFJlc3VsdEFzQm9vbCAhPSBp
c1RhcmdldEV4dGVuc2libGUpIHsKQEAgLTgxMiwxNCArODE2LDE0IEBAIGJvb2wgUHJveHlPYmpl
Y3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBD
YWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGRlZmluZVByb3BlcnR5TWV0aG9kID0gaGFu
ZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1l
cy0+ZGVmaW5lUHJvcGVydHksIEFTQ0lJTGl0ZXJhbCgiJ2RlZmluZVByb3BlcnR5JyBwcm9wZXJ0
eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZWZpbmVQcm9wZXJ0eU1ldGhvZC5pc1VuZGVm
aW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHREZWZpbmVPd25Qcm9wZXJ0eSgp
OwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0b3JPYmplY3QgPSBjb25zdHJ1Y3RPYmplY3RGcm9t
UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGRlc2NyaXB0b3IpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC04Mjcs
MTEgKzgzMSwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3duUHJvcGVyCiAg
ICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRl
bnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBhcmd1bWVu
dHMuYXBwZW5kKGRlc2NyaXB0b3JPYmplY3QpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgZGVmaW5lUHJvcGVydHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxl
ciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0
cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkKQEAgLTgzOSwx
MSArODQzLDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKIAog
ICAgIFByb3BlcnR5RGVzY3JpcHRvciB0YXJnZXREZXNjcmlwdG9yOwogICAgIGJvb2wgaXNUYXJn
ZXREZXNjcmlwdG9yRGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4
ZWMsIHByb3BlcnR5TmFtZSwgdGFyZ2V0RGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGJvb2wgdGFyZ2V0SXNFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVu
c2libGUoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBib29sIHNldHRp
bmdDb25maWd1cmFibGVUb0ZhbHNlID0gZGVzY3JpcHRvci5jb25maWd1cmFibGVQcmVzZW50KCkg
JiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCk7CiAKQEAgLTkwMSw3ICs5MDUsNyBAQCB2b2lk
IFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBvd25LZXlzTWV0aG9kID0g
aGFuZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZp
ZXIodm0sICJvd25LZXlzIiksIEFTQ0lJTGl0ZXJhbCgiJ293bktleXMnIHByb3BlcnR5IG9mIGEg
UHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKICAgICBpZiAob3du
S2V5c01ldGhvZC5pc1VuZGVmaW5lZCgpKSB7CkBAIC05MTIsNyArOTE2LDcgQEAgdm9pZCBQcm94
eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSBh
cnJheUxpa2VPYmplY3QgPSBjYWxsKGV4ZWMsIG93bktleXNNZXRob2QsIGNhbGxUeXBlLCBjYWxs
RGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlID0gdHJhcFJlc3VsdC5tb2RlKCk7CkBA
IC05NDAsNyArOTQ0LDcgQEAgdm9pZCBQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3BlcnR5
TgogICAgICAgICAgICAgcmV0dXJuIGRvbnRFeGl0RWFybHk7CiAKICAgICAgICAgSWRlbnRpZmll
ciBpZGVudCA9IHZhbHVlLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5leGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBkb0V4aXRFYXJseTsKIAogICAgICAgICB1bmNoZWNrZWRSZXN1bHRLZXlz
LmFkZChpZGVudC5pbXBsKCkpOwpAQCAtOTQ5LDIxICs5NTMsMjEgQEAgdm9pZCBQcm94eU9iamVj
dDo6cGVyZm9ybUdldE93blByb3BlcnR5TgogICAgIH07CiAKICAgICBjcmVhdGVMaXN0RnJvbUFy
cmF5TGlrZShleGVjLCBhcnJheUxpa2VPYmplY3QsIGRvbnRUaHJvd0FuRXhjZXB0aW9uVHlwZUZp
bHRlciwgQVNDSUlMaXRlcmFsKCJQcm94eSBoYW5kbGVyJ3MgJ293bktleXMnIG1ldGhvZCBtdXN0
IHJldHVybiBhbiBhcnJheS1saWtlIG9iamVjdCBjb250YWluaW5nIG9ubHkgU3RyaW5ncyBhbmQg
U3ltYm9scyIpLCBhZGRQcm9wTmFtZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJv
b2wgdGFyZ2V0SXNFeGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKIAogICAg
IFByb3BlcnR5TmFtZUFycmF5IHRhcmdldEtleXMoJnZtLCBwcm9wZXJ0eU5hbWVNb2RlKTsKICAg
ICB0YXJnZXQtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQsIGV4
ZWMsIHRhcmdldEtleXMsIGVudW1lcmF0aW9uTW9kZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBWZWN0b3I8VW5pcXVlZFN0cmluZ0ltcGwqPiB0YXJnZXRDb25maWd1cmFibGVLZXlzOwog
ICAgIFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXM7
CiAgICAgZm9yIChjb25zdCBJZGVudGlmaWVyJiBpZGVudCA6IHRhcmdldEtleXMpIHsKICAgICAg
ICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgaXNQcm9wZXJ0
eURlZmluZWQgPSB0YXJnZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBpZGVudC5p
bXBsKCksIGRlc2NyaXB0b3IpOyAKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoaXNQcm9wZXJ0eURlZmluZWQgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxl
KCkpCiAgICAgICAgICAgICB0YXJnZXROb25Db25maWd1cmFibGVLZXlzLmFwcGVuZChpZGVudC5p
bXBsKCkpOwpAQCAtMTA1Miw3ICsxMDU2LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVNl
dFByb3RvdHlwZShFeAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlOwogICAgIEpTVmFsdWUgc2V0UHJvdG90eXBlT2ZNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgInNldFByb3Rv
dHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ3NldFByb3RvdHlwZU9mJyBwcm9wZXJ0eSBvZiBhIFBy
b3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAgLTEw
NjMsMTEgKzEwNjcsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVNldFByb3RvdHlwZShF
eAogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHBy
b3RvdHlwZSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRQcm90b3R5
cGVPZk1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0
cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIGlmICghdHJhcFJlc3VsdEFzQm9vbCkgewpAQCAtMTA3NywxMyArMTA4MSwxMyBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAgICAgfQogCiAgICAg
Ym9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2libGUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90b3R5cGUgPSB0YXJn
ZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIXNhbWVWYWx1ZShleGVjLCBwcm90b3R5cGUsIHRhcmdldFByb3RvdHlwZSkpIHsK
ICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJQcm94
eSAnc2V0UHJvdG90eXBlT2YnIHRyYXAgcmV0dXJuZWQgdHJ1ZSB3aGVuIGl0cyB0YXJnZXQgaXMg
bm9uLWV4dGVuc2libGUgYW5kIHRoZSBuZXcgcHJvdG90eXBlIHZhbHVlIGlzIG5vdCB0aGUgc2Ft
ZSBhcyB0aGUgY3VycmVudCBwcm90b3R5cGUgdmFsdWUuIEl0IHNob3VsZCBoYXZlIHJldHVybmVk
IGZhbHNlIikpOwpAQCAtMTExNyw3ICsxMTIxLDcgQEAgSlNWYWx1ZSBQcm94eU9iamVjdDo6cGVy
Zm9ybUdldFByb3RvdHlwZQogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNh
bGxUeXBlOwogICAgIEpTVmFsdWUgZ2V0UHJvdG90eXBlT2ZNZXRob2QgPSBoYW5kbGVyLT5nZXRN
ZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImdldFBy
b3RvdHlwZU9mIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldFByb3RvdHlwZU9mJyBwcm9wZXJ0eSBvZiBh
IFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAKICAgICBKU09iamVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7
CkBAIC0xMTI3LDcgKzExMzEsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJv
dG90eXBlCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50
cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdl
dFByb3RvdHlwZU9mTWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50
cyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAoIXRyYXBSZXN1
bHQuaXNPYmplY3QoKSAmJiAhdHJhcFJlc3VsdC5pc051bGwoKSkgewpAQCAtMTEzNiwxMyArMTE0
MCwxMyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlCiAgICAgfQog
CiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVj
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICBpZiAodGFyZ2V0SXNFeHRl
bnNpYmxlKQogICAgICAgICByZXR1cm4gdHJhcFJlc3VsdDsKIAogICAgIEpTVmFsdWUgdGFyZ2V0
UHJvdG90eXBlID0gdGFyZ2V0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICghc2FtZVZhbHVlKGV4ZWMsIHRhcmdldFByb3Rv
dHlwZSwgdHJhcFJlc3VsdCkpIHsKICAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJQcm94eSdzICdnZXRQcm90b3R5cGVPZicgdHJhcCBmb3IgYSBub24t
ZXh0ZW5zaWJsZSB0YXJnZXQgc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgdGFy
Z2V0J3MgcHJvdG90eXBlIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNyArMTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQog
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0pOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3QoZXhlYywg
dGFyZ2V0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmd1bWVudHMsIG5ld1Rhcmdl
dCkpOwpAQCAtMTM5LDE0ICsxMzksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZQogICAgIGlmICghdGFyZ2V0LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4g
b2JqZWN0IikpKTsKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRv
cjsKICAgICBpZiAoIXRvUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIp
LCBkZXNjcmlwdG9yKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBBU1NFUlQoKGRlc2NyaXB0b3IuYXR0cmlidXRlcygpICYgQWNjZXNzb3IpIHx8
ICghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSk7Ci0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICAvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5IHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3Igd2hl
biB0aGUgZGVmaW5lT3duUHJvcGVydHkgb3BlcmF0aW9uIGZhaWxzLgogICAgIGJvb2wgc2hvdWxk
VGhyb3cgPSBmYWxzZTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVmbGVjdC5nZXQgcmVxdWlyZXMg
dGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAKICAgICBjb25zdCBJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwog
CiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRhcmdldDsKQEAgLTIwMCw3ICsyMDAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVm
bGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50
IGJlIGFuIG9iamVjdCIpKSk7CiAKICAgICBhdXRvIGtleSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVj
dENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGFzT2JqZWN0KHRhcmdl
dCksIGtleSkpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmlzRXh0ZW5zaWJsZSByZXF1
aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGJvb2wgaXNF
eHRlbnNpYmxlID0gYXNPYmplY3QodGFyZ2V0KS0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaXNFeHRlbnNpYmxlKSk7CiB9CkBAIC0yNTcs
NyArMjU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlJlZmxlY3QucHJldmVudEV4dGVuc2lvbnMgcmVxdWlyZXMgdGhlIGZpcnN0
IGFyZ3VtZW50IGJlIGFuIG9iamVjdCIpKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2Jq
ZWN0KHRhcmdldCk7CiAgICAgYm9vbCByZXN1bHQgPSBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHJlc3VsdCkpOwogfQpAQCAtMjc0LDcgKzI3NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICBKU09iamVjdCogdGFyZ2V0T2JqZWN0
ID0gYXNPYmplY3QodGFyZ2V0KTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVjZWl2ZXIg
PSB0YXJnZXQ7CkBAIC0zMDcsNyArMzA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWZsZWN0T2JqZQogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IGZhbHNlOwog
ICAgIGJvb2wgZGlkU2V0UHJvdG90eXBlID0gb2JqZWN0LT5zZXRQcm90b3R5cGUodm0sIGV4ZWMs
IHByb3RvLCBzaG91bGRUaHJvd0lmQ2FudFNldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihkaWRTZXRQcm90b3R5cGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE2LDEzICsyMTYsMTMgQEAgaW5saW5lIFJlZ0V4cEZsYWdzIHRv
RmxhZ3MoRXhlY1N0YXRlKiBleAogICAgIGlmIChmbGFncy5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICByZXR1cm4gTm9GbGFnczsKICAgICBKU1N0cmluZyogZmxhZ3NTdHJpbmcgPSBmbGFncy50b1N0
cmluZyhleGVjKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgZmxhZ3NTdHJpbmcp
OwogICAgIGlmICghZmxhZ3NTdHJpbmcpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKTsKICAgICAgICAgcmV0dXJuIEludmFsaWRGbGFnczsKICAgICB9CiAKICAgICBSZWdF
eHBGbGFncyByZXN1bHQgPSByZWdFeHBGbGFncyhmbGFnc1N0cmluZy0+dmFsdWUoZXhlYykpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIGlmIChyZXN1bHQg
PT0gSW52YWxpZEZsYWdzKQogICAgICAgICB0aHJvd1N5bnRheEVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3VwcGxpZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9y
LiIpKTsKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShF
eGVjU3RhdGUqCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAg
ICAgU3RyaW5nIHBhdHRlcm4gPSBwYXR0ZXJuQXJnLmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmlu
ZygpIDogcGF0dGVybkFyZy50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSB0b0Zs
YWdzKGV4ZWMsIGZsYWdzQXJnKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBzdGF0aWMgSlNPYmplY3Qq
IHJlZ0V4cENyZWF0ZShFeGVjU3RhdGUqCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgcmVnRXhwLT5lcnJvck1lc3NhZ2Uo
KSkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1Y3R1cmUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcmVnRXhw
KTsKIH0KQEAgLTI1NSw2ICsyNTUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHJlZ0V4cENyZWF0ZShF
eGVjU3RhdGUqCiBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgQXJnTGlzdCYgYXJncywgIEpTT2JqZWN0
KiBjYWxsZWUsIEpTVmFsdWUgbmV3VGFyZ2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUg
cGF0dGVybkFyZyA9IGFyZ3MuYXQoMCk7CiAgICAgSlNWYWx1ZSBmbGFnc0FyZyA9IGFyZ3MuYXQo
MSk7CiAKQEAgLTI2Myw3ICsyNjQsNyBAQCBKU09iamVjdCogY29uc3RydWN0UmVnRXhwKEV4ZWNT
dGF0ZSogZXhlCiAKICAgICBpZiAobmV3VGFyZ2V0LmlzVW5kZWZpbmVkKCkgJiYgY29uc3RydWN0
QXNSZWdleHAgJiYgZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBKU1ZhbHVlIGNv
bnN0cnVjdG9yID0gcGF0dGVybkFyZy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3Ry
dWN0b3IpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgaWYgKGNhbGxlZSA9PSBjb25zdHJ1Y3RvcikgewogICAgICAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHBhdHRlcm5BcmcgaXMgYSBvYmplY3Qgb3RoZXJ3aXNlIGNvbnN0cnVjdEFzUmVnZXhwIHdv
dWxkIGJlIGZhbHNlLgpAQCAtMjc0LDcgKzI3NSw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdF
eHAoRXhlY1N0YXRlKiBleGUKICAgICBpZiAoaXNQYXR0ZXJuUmVnRXhwKSB7CiAgICAgICAgIFJl
Z0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cE9iamVjdCo+KHBhdHRlcm5BcmcpLT5yZWdFeHAo
KTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRSZWdFeHBTdHJ1Y3R1cmUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBuZXdUYXJnZXQpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAoIWZsYWdzQXJnLmlzVW5kZWZpbmVk
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDEyICsx
MzMsMTMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpyZQogCiBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNSZWdFeHAoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNP
YmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKICAgICBKU1ZhbHVlIG1hdGNoVmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5tYXRjaFN5bWJvbCk7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1hdGNoVmFsdWUuaXNVbmRlZmluZWQo
KSkKICAgICAgICAgcmV0dXJuIG1hdGNoVmFsdWUudG9Cb29sZWFuKGV4ZWMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lv
biAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgSlNWYWx1ZSBjb2xsZWN0TWF0
Y2hlcyhWTSYgdm0sIEV4ZWNTdGF0ZQogICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhTaXplRm9yRGly
ZWN0UGF0aCA9IDEwMDAwMDsKICAgICAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgbnVsbHB0cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gaXRlcmF0ZSA9IFsmXSAoKSB7CkBAIC0yMzMsMTQg
KzIzMywxNCBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVzKFZNJiB2bSwgRXhlY1N0YXRlCiAKIEpT
VmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMtPnJlZ0V4cCgpOwogCiAgICAgQVNTRVJU
KHJlZ0V4cC0+Z2xvYmFsKCkpOwogCi0gICAgVk0qIHZtID0gJmdsb2JhbE9iamVjdC0+dm0oKTsK
LQogICAgIHNldExhc3RJbmRleChleGVjLCAwKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgcyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CkBA
IC0yNDksMTQgKzI0OSwxNCBAQCBKU1ZhbHVlIFJlZ0V4cE9iamVjdDo6bWF0Y2hHbG9iYWwoRXhl
Y1N0CiAgICAgaWYgKHJlZ0V4cC0+dW5pY29kZSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0cmlu
Z0xlbmd0aCA9IHMubGVuZ3RoKCk7CiAgICAgICAgIHJldHVybiBjb2xsZWN0TWF0Y2hlcygKLSAg
ICAgICAgICAgICp2bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhw
LAorICAgICAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJl
Z0V4cCwKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6ZV90IHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gYWR2YW5jZVN0cmluZ1VuaWNvZGUocywgc3RyaW5nTGVuZ3RoLCBlbmQp
OwogICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBjb2xsZWN0TWF0Y2hl
cygKLSAgICAgICAgKnZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdF
eHAsCisgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdF
eHAsCiAgICAgICAgIFsmXSAoc2l6ZV90IGVuZCkgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJl
dHVybiBlbmQgKyAxOwogICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU5LDEzICsxNTksMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCByZWdFeHBQcm90bwogICAgICAgICByZWdFeHAgPSBhc1JlZ0V4cE9iamVjdChhcmcwKS0+cmVn
RXhwKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSAhZXhlYy0+YXJn
dW1lbnRDb3VudCgpID8gZW1wdHlTdHJpbmcoKSA6IGFyZzAudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gTm9G
bGFnczsKICAgICAgICAgaWYgKCFhcmcxLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAgIGZs
YWdzID0gcmVnRXhwRmxhZ3MoYXJnMS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgaWYgKGZsYWdzID09IEludmFsaWRG
bGFncykKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgZmxhZ3Mgc3VwcGxp
ZWQgdG8gUmVnRXhwIGNvbnN0cnVjdG9yLiIpKSk7CkBAIC0xODksMjEgKzE4OSwyMiBAQCBzdGF0
aWMgaW5saW5lIEZsYWdzU3RyaW5nIGZsYWdzU3RyaW5nKEV4CiAgICAgc3RyaW5nWzBdID0gMDsK
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBnbG9iYWxWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9iYWwpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
c3RyaW5nOwogICAgIEpTVmFsdWUgaWdub3JlQ2FzZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmlnbm9yZUNhc2UpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
c3RyaW5nOwogICAgIEpTVmFsdWUgbXVsdGlsaW5lVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0
cmluZzsKICAgICBKU1ZhbHVlIHVuaWNvZGVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS51bmljb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsK
ICAgICBKU1ZhbHVlIHN0aWNreVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnN0aWNreSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJpbmc7CiAKICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CkBAIC0yMzgsMTcgKzIzOSwxNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
ZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gdGhpc09iamVj
dC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnNvdXJjZSk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU3RyaW5nIHNvdXJjZSA9
IHNvdXJjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgZmxh
Z3NWYWx1ZSA9IHRoaXNPYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5mbGFncyk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgU3RyaW5nIGZsYWdzID0gZmxhZ3NWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
Jy8nLCBzb3VyY2UsICcvJywgZmxhZ3MpKTsKQEAgLTMzOSw3ICszNDAsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBSZWdFeHAucHJvdG90eXBlLmZs
YWdzIGdldHRlciBjYW4gb25seSBiZSBjYWxsZWQgb24gYW4gb2JqZWN0IikpOwogCiAgICAgYXV0
byBmbGFncyA9IGZsYWdzU3RyaW5nKGV4ZWMsIGFzT2JqZWN0KHRoaXNWYWx1ZSkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBmbGFncy5kYXRhKCkpKTsK
QEAgLTQ3MiwxMiArNDczLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhw
UHJvdG8KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jU2VhcmNo
RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IGFzUmVnRXhwT2Jq
ZWN0KHRoaXNWYWx1ZSktPnJlZ0V4cCgpOwogCiAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOwogICAgIFN0cmluZyBzID0gc3Ry
aW5nLT52YWx1ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3Rv
ciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKQEAg
LTU4Niw3ICs1ODgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3Rv
CiAgICAgLy8gMy4gW2hhbmRsZWQgYnkgSlMgYnVpbHRpbl0gTGV0IFMgYmUgPyBUb1N0cmluZyhz
dHJpbmcpLgogICAgIEpTU3RyaW5nKiBpbnB1dFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
U3RyaW5nKGV4ZWMpOwogICAgIFN0cmluZyBpbnB1dCA9IGlucHV0U3RyaW5nLT52YWx1ZShleGVj
KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBBU1NFUlQoIWlucHV0LmlzTnVsbCgpKTsKIApAQCAtNjAxLDcgKzYwMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAvLyAxMS4gTGV0IEEgYmUg
QXJyYXlDcmVhdGUoMCkuCiAgICAgLy8gMTIuIExldCBsZW5ndGhBIGJlIDAuCiAgICAgSlNBcnJh
eSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0gMDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNl
dFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4ZWMsIHNldFN0cnVjdHVyZSk7CiAgICAgSlNW
YWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHNldC0+Z2V0
KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hZGQpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgQ2FsbERhdGEgYWRk
ZXJGdW5jdGlvbkNhbGxEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgIGRvdWJsZSBjb2RlUG9pbnRBc0RvdWJsZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIHVpbnQzMl90
IGNvZGVQb2ludCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb2RlUG9pbnRBc0RvdWJsZSk7CkBA
IC0xMjIsMTAgKzEyMiwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RXaXRoU3Ry
aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxP
YmplY3QoKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPnN0cmlu
Z09iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsOCBAQCBzdGF0aWMgYm9v
bCBpc1N0cmluZ093blByb3BlcnR5KEV4ZWNTdGF0CiAKIGJvb2wgU3RyaW5nT2JqZWN0OjpkZWZp
bmVPd25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Ym9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBTdHJpbmdPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8U3RyaW5nT2JqZWN0Kj4ob2JqZWN0KTsKIAogICAgIGlmIChpc1N0
cmluZ093blByb3BlcnR5KGV4ZWMsIHRoaXNPYmplY3QsIHByb3BlcnR5TmFtZSkpIHsKQEAgLTEy
MCw3ICsxMjIsNyBAQCBib29sIFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPCiAg
ICAgICAgIGJvb2wgaXNDdXJyZW50RGVmaW5lZCA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnQpOwogICAgICAgICBBU1NFUlQo
aXNDdXJyZW50RGVmaW5lZCk7CiAgICAgICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpc09iamVj
dC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNj
cmlwdG9yKGV4ZWMsIG51bGxwdHIsIHByb3BlcnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlw
dG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJyZW50LCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsOSArNDc3LDExIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICBWTSYgdm0sIEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgQ2Fs
bERhdGEmIGNhbGxEYXRhLAogICAgIENhbGxUeXBlIGNhbGxUeXBlLCBTdHJpbmcmIHJlcGxhY2Vt
ZW50U3RyaW5nLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IHN0cmlu
Zy0+dmFsdWUoZXhlYyk7CiAgICAgdW5zaWduZWQgc291cmNlTGVuID0gc291cmNlLmxlbmd0aCgp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0ID0gYXNSZWdFeHBPYmplY3Qoc2Vh
cmNoVmFsdWUpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gcmVnRXhwT2JqZWN0LT5yZWdFeHAoKTsK
QEAgLTQ4OCw3ICs0OTAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBy
ZXBsCiAgICAgaWYgKGdsb2JhbCkgewogICAgICAgICAvLyBFUzUuMSAxNS41LjQuMTAgc3RlcCA4
LmEuCiAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSAmJiAhcmVw
bGFjZW1lbnRTdHJpbmcubGVuZ3RoKCkpCkBAIC01MTEsNyArNTEzLDcgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBpbnQgYXJnQ291bnQgPSByZWdF
eHAtPm51bVN1YnBhdHRlcm5zKCkgKyAxICsgMjsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuYyA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ocmVwbGFjZVZhbHVlKTsKICAgICAgICAgQ2FjaGVkQ2FsbCBj
YWNoZWRDYWxsKGV4ZWMsIGZ1bmMsIGFyZ0NvdW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
aWYgKHNvdXJjZS5pczhCaXQoKSkgewogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUz
OSw3ICs1NDEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsCiAg
ICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAgICAgICAg
ICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAg
ICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpAQCAtNTc4LDcgKzU4MCw3IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAgICAgICBj
YWNoZWRDYWxsLnNldFRoaXMoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1Jlc3VsdCA9IGNhY2hlZENhbGwuY2FsbCgpOwogICAgICAgICAgICAgICAgIHJlcGxhY2Vt
ZW50cy5hcHBlbmQoanNSZXN1bHQudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAgICAgICAgIGxhc3RJ
bmRleCA9IHJlc3VsdC5lbmQ7CkBAIC02MTgsNyArNjIwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHN0cmlu
Zyk7CiAKICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGNhbGwoZXhlYywgcmVw
bGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3MpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCByZXBsTGVu
ID0gcmVwbGFjZW1lbnRTdHJpbmcubGVuZ3RoKCk7CkBAIC02NTgsMTIgKzY2MCwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0g
ICAgCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgUmVn
RXhwKiByZWdFeHAgPSBzZWFyY2hWYWx1ZS0+cmVnRXhwKCk7CiAgICAgaWYgKHJlZ0V4cC0+Z2xv
YmFsKCkpIHsKICAgICAgICAgLy8gRVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICBz
ZWFyY2hWYWx1ZS0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICByZXR1cm4gcmVtb3ZlVXNpbmdSZWdFeHBTZWFyY2godm0sIGV4ZWMsIHRoaXNWYWx1ZSwgdGhp
c1ZhbHVlLT52YWx1ZShleGVjKSwgcmVnRXhwKTsKICAgICB9CkBAIC02ODgsMTIgKzY5MSwxNCBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0CiAKIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1JlZ0V4cFNlYXJjaChWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIHN0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwg
SlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nOwogICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVwbGFjZVZh
bHVlLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKSB7CiAg
ICAgICAgIHJlcGxhY2VtZW50U3RyaW5nID0gcmVwbGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTcwMSwxMSArNzA2LDEzIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgdm0sIGV4
ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgcmVwbGFjZW1lbnRT
dHJpbmcsIHJlcGxhY2VWYWx1ZSk7CiB9CiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRK
U1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmluZ1NlYXJjaChWTSYsIEV4ZWNTdGF0ZSogZXhlYywgSlNT
dHJpbmcqIGpzU3RyaW5nLCBKU1ZhbHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1
ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGxhY2VVc2luZ1N0cmlu
Z1NlYXJjaChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIGpzU3RyaW5nLCBKU1Zh
bHVlIHNlYXJjaFZhbHVlLCBKU1ZhbHVlIHJlcGxhY2VWYWx1ZSkKIHsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZyA9
IGpzU3RyaW5nLT52YWx1ZShleGVjKTsKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gc2VhcmNo
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgc2l6ZV90IG1hdGNo
U3RhcnQgPSBzdHJpbmcuZmluZChzZWFyY2hTdHJpbmcpOwpAQCAtNzIxLDEyICs3MjgsMTIgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICBhcmdzLmFw
cGVuZChqc051bWJlcihtYXRjaFN0YXJ0KSk7CiAgICAgICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5n
KTsKICAgICAgICAgcmVwbGFjZVZhbHVlID0gY2FsbChleGVjLCByZXBsYWNlVmFsdWUsIGNhbGxU
eXBlLCBjYWxsRGF0YSwganNVbmRlZmluZWQoKSwgYXJncyk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogCiAgICAgU3RyaW5nIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlVmFsdWUudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmlu
Zy5pbXBsKCk7CkBAIC04MTEsMTUgKzgxOCwxOCBAQCBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1Zh
bHVlIHJlcGxhY2UoCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgSlNTdHJp
bmcqIHN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gcmVw
bGFjZSh2bSwgZXhlYywgc3RyaW5nLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlVXNpbmdS
ZWdFeHAoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1
ZSBzZWFyY2hWYWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtODMxLDggKzg0MSwxMSBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBl
eGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiByZXBsYWNl
VXNpbmdTdHJpbmdTZWFyY2goZXhlYy0+dm0oKSwgZXhlYywgc3RyaW5nLCBleGVjLT5hcmd1bWVu
dCgwKSwgZXhlYy0+YXJndW1lbnQoMSkpOwpAQCAtOTQxLDcgKzk1NCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUg
ZG91YmxlUG9zaXRpb24gPSBhcmd1bWVudDAudG9JbnRlZ2VyKGV4ZWMpOwpAQCAtMTA1Myw3ICsx
MDY2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGludCBsZW4gPSBzLmxlbmd0aCgpOwpA
QCAtMTExMSwyMCArMTEyNCwyMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIHNwbGl0U3Ry
aW5nQnlPCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NwbGl0
RmFzdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQoY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSk7CiAKICAgICAvLyAzLiBMZXQgUyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
VG9TdHJpbmcsIGdpdmluZyBpdCB0aGUgdGhpcyB2YWx1ZSBhcyBpdHMgYXJndW1lbnQuCiAgICAg
Ly8gNy4gTGV0IHMgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIFMuCiAgICAgU3RyaW5n
IGlucHV0ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgQVNTRVJUKCFpbnB1dC5pc051bGwoKSk7CiAKICAgICAvLyA0LiBMZXQgQSBiZSBhIG5ldyBh
cnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheSgpCiAgICAgLy8g
ICAgd2hlcmUgQXJyYXkgaXMgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIGNvbnN0cnVjdG9yIHdpdGgg
dGhhdCBuYW1lLgogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNS4gTGV0IGxlbmd0aEEgYmUgMC4KQEAgLTExNDEsNyAr
MTE1NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAv
LyAgICBvdGhlcndpc2UgbGV0IFIgPSBUb1N0cmluZyhzZXBhcmF0b3IpLgogICAgIEpTVmFsdWUg
c2VwYXJhdG9yVmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBTdHJpbmcg
c2VwYXJhdG9yID0gc2VwYXJhdG9yVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIC8vIDEwLiBJZiBsaW0gPT0gMCwgcmV0dXJuIEEuCkBAIC0xMjUwLDcgKzEy
NjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAg
IGxlbiA9IGpzU3RyaW5nLT5sZW5ndGgoKTsKICAgICB9IGVsc2UgewogICAgICAgICB1U3RyaW5n
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICAgICAgbGVuID0gdVN0cmluZy5sZW5ndGgoKTsKICAgICB9CkBAIC0xMzAzLDcgKzEzMTcs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIEpTU3RyaW5nKiBqc1N0
cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKQEAgLTEzNzcsMTIgKzEzOTEsMTIgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUo
dGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUp
OwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJpbmcgc3Ry
ID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3IoKS5jb2xsYXRlKHMsIHN0cikpKTsKIH0KQEAgLTE0
MDMsNyArMTQxNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0b0xvY2FsZUNhc2UoRXhlY1MK
ICAgICBjb25zdCBTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShzdGF0ZSk7CiAKICAgICAvLyAzLiBS
ZXR1cm5JZkFicnVwdChTKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0
cmluZ3MuCkBAIC0xNDE0LDcgKzE0MjgsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdG9Mb2Nh
bGVDYXNlKEV4ZWNTCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxlcyA9IGNhbm9u
aWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwogCiAgICAgLy8g
NS4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gNi4gTGV0
IGxlbiBiZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHJlcXVlc3RlZExvY2FsZXMuCkBAIC0x
NDk4LDcgKzE1MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3Rv
CiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGJpZz4iLCBzLCAiPC9iaWc+Iikp
OwogfQpAQCAtMTUxMiw3ICsxNTI2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBz
ID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzbWFsbD4iLCBz
LCAiPC9zbWFsbD4iKSk7CiB9CkBAIC0xNTI2LDcgKzE1NDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVj
LCAiPGJsaW5rPiIsIHMsICI8L2JsaW5rPiIpKTsKIH0KQEAgLTE1NDAsNyArMTU1NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2Jq
ZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2
aWFsU3RyaW5nKGV4ZWMsICI8Yj4iLCBzLCAiPC9iPiIpKTsKIH0KQEAgLTE1NTQsNyArMTU2OCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNo
ZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VO
b250cml2aWFsU3RyaW5nKGV4ZWMsICI8dHQ+IiwgcywgIjwvdHQ+IikpOwogfQpAQCAtMTU2OCw3
ICsxNTgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAg
IGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxpPiIsIHMsICI8L2k+IikpOwogfQpAQCAt
MTU4Miw3ICsxNTk2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90
bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdHJpa2U+IiwgcywgIjwvc3Ry
aWtlPiIpKTsKIH0KQEAgLTE1OTYsNyArMTYxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8c3Vi
PiIsIHMsICI8L3N1Yj4iKSk7CiB9CkBAIC0xNjEwLDcgKzE2MjQsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJs
ZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhl
eGVjLCAiPHN1cD4iLCBzLCAiPC9zdXA+IikpOwogfQpAQCAtMTYyNCw3ICsxNjM4LDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmpl
Y3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
ZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAg
LTE2NDMsNyArMTY1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNjk4LDcgKzE3MTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTcxNyw3ICsxNzMx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKQEAgLTE3NjUsNyArMTc3OSw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3Ry
aW5nKEV4ZWNTdGEKICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHN0
ciA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgdW5zaWduZWQgbGVmdCA9IDA7CkBA
IC0xODIzLDE4ICsxODM3LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAg
ICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAg
IGJvb2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNS
ZWd1bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGggY2Fubm90IGJl
IGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3RyaW5nID0gYTAudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBwb3NpdGlvbkFyZyA9IGV4ZWMtPmFy
Z3VtZW50KDEpOwpAQCAtMTg0NCw3ICsxODU4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90bwogICAgIGVsc2UgewogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwogICAgICAgICBzdGFydCA9IGNsYW1wQW5kVHJ1bmNh
dGVUb1Vuc2lnbmVkKHBvc2l0aW9uQXJnLnRvSW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKQEAgLTE4NjEsMTggKzE4NzUsMTggQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CiAKICAgICBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0g
ZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgYm9vbCBpc1JlZ3VsYXJFeHByZXNzaW9uID0gaXNSZWdF
eHAodm0sIGV4ZWMsIGEwKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIGlmIChpc1JlZ3VsYXJFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSwgIkFyZ3VtZW50IHRvIFN0cmluZy5wcm90b3R5
cGUuZW5kc1dpdGggY2Fubm90IGJlIGEgUmVnRXhwIik7CiAKICAgICBTdHJpbmcgc2VhcmNoU3Ry
aW5nID0gYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKQEAgLTE4ODMsNyArMTg5Nyw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgZW5kID0g
c3RkOjptYXgoMCwgZW5kUG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAgICBlbHNlIGlmICghZW5k
UG9zaXRpb25BcmcuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBlbmQgPSBjbGFtcEFuZFRydW5j
YXRlVG9VbnNpZ25lZChlbmRQb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7
Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xODkyLDEzICsxOTA2LDE0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nSW5jbHVkZXNJbXBsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVj
LCBTdHJpbmcgc3RyaW5nVG9TZWFyY2hJbiwgU3RyaW5nIHNlYXJjaFN0cmluZywgSlNWYWx1ZSBw
b3NpdGlvbkFyZykKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgdW5zaWduZWQgc3RhcnQgPSAwOwogICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkp
CiAgICAgICAgIHN0YXJ0ID0gc3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKICAg
ICBlbHNlIHsKICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5n
dGgoKTsKICAgICAgICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlv
bkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0x
OTE1LDE4ICsxOTMwLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAg
U3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJv
b2wgaXNSZWd1bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1
bGFyRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2Nv
cGUsICJBcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzIGNhbm5vdCBiZSBhIFJl
Z0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVu
dCgxKTsKQEAgLTE5MzYsMTcgKzE5NTEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJ1aWx0aW5TdHJp
bmdJbmNsdWRlc0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGNoZWNr
T2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAgU3RyaW5nIHN0cmluZ1RvU2VhcmNo
SW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNW
YWx1ZSBhMCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgx
KTsKQEAgLTIwMDIsMTQgKzIwMTksMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIEpTU3RyaW5n
OjpTYWZlVmlldyBzb3VyY2UgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZpZXcoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBVTm9ybWFsaXphdGlvbk1vZGUgZm9ybSA9IFVOT1JNX05GQzsKICAgICAvLyBW
ZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB1bmRlZmluZWQu
CiAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIFN0
cmluZyBmb3JtU3RyaW5nID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChmb3JtU3RyaW5n
ID09ICJORkMiKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NiwxMSArOTYsMTQgQEAgQ2FsbFR5cGUgU3ltYm9sQ29uc3RydWN0b3I6OmdldENhbGxEYXRh
KAogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN5bWJvbENvbnN0cnVjdG9yRm9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmdLZXkg
PSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc3RyaW5n
ID0gc3RyaW5nS2V5LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoU3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5zeW1ib2xSZWdpc3RyeSgp
LnN5bWJvbEZvcktleShzdHJpbmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMyBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5Ojpn
ZXRUZW1wbGF0ZU9iCiAgICAgICAgIHJldHVybiBjYWNoZWQ7CiAKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICB1
bnNpZ25lZCBjb3VudCA9IHRlbXBsYXRlS2V5LmNvb2tlZFN0cmluZ3MoKS5zaXplKCk7CiAgICAg
SlNBcnJheSogdGVtcGxhdGVPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIsIGNvdW50KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IEpTQXJyYXkqIHJhd09iamVjdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwg
Y291bnQpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgewpAQCAtNTks
MTIgKzYwLDEyIEBAIEpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2IKICAg
ICB9CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCByYXdPYmplY3QpOwotICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogCiAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnJhdywgcmF3T2JqZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0
ZSk7CiAKICAgICBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7
Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAKICAgICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxh
dGVPYmplY3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Nj
b3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJv
d1Njb3BlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGhyb3dTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDM2ICsyNiwyNSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKIAorI2luY2x1ZGUg
IkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJWTS5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FU
SU9OKQotCi1uYW1lc3BhY2UgewotCi0vLyBMb2dzIGFsbCBUaHJvd1Njb3BlIGFjdGl2aXR5IHRv
IGhlbHAgZGVidWcgdGhlIHNvdXJjZSBvZiBhIHZlcmlmaWNhdGlvbiBmYWlsdXJlLgotYm9vbCB0
cmFjZU9uID0gZmFsc2U7Ci0KLS8vIEEgbW9yZSB2ZXJib3NlIGxvZ2dpbmcgb3B0aW9uIHRvIGR1
bXAgdGhlIEMrKyBzdGFjayB0cmFjZSBhdCBzdHJhdGVnaWMgcG9pbnRzIHRvIGFpZCBkZWJ1Z2dp
bmcuCi1ib29sIHRyYWNlV2l0aFN0YWNrVHJhY2VzID0gZmFsc2U7Ci0KLS8vIERpc2FibGVkIHRl
bXBvcmFyaWx5IHVudGlsIGFsbCBrbm93biB2ZXJpZmljYXRpb24gZmFpbHVyZXMgYXJlIGZpeGVk
LgotYm9vbCB2ZXJpZmljYXRpb25PbiA9IGZhbHNlOwotCi11bnNpZ25lZCB0cmFjZUNvdW50ID0g
MDsKLX07CisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAKIC8qCi0g
ICAgVGhyb3dTY29wZSB2ZXJpZmljYXRpb24gd29ya3MgdG8gc2ltdWxhdGUgZXhjZXB0aW9uIHRo
cm93cyBhbmQgY2F0Y2ggY2FzZXMgd2hlcmUKKyAgICBFeGNlcHRpb25TY29wZSB2ZXJpZmljYXRp
b24gd29ya3MgdG8gc2ltdWxhdGUgZXhjZXB0aW9uIHRocm93cyBhbmQgY2F0Y2ggY2FzZXMgd2hl
cmUKICAgICBleGNlcHRpb24gY2hlY2tzIGFyZSBtaXNzaW5nLiBUaGlzIGlzIGhvdyBpdCB3b3Jr
czoKIAogIDEuIFRoZSBWTSBoYXMgYSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQgdGhhdCBpbmRp
Y2F0ZXMgd2hlcmUgYW4gZXhjZXB0aW9uIGNoZWNrIGlzCiAgICAgbmVlZGVkLiBZb3UgY2FuIHRo
aW5rIG9mIHRoZSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQgYmVpbmcgc2V0IGFzIGEgc2ltdWxh
dGVkCiAgICAgdGhyb3cuCiAKLSAyLiBFdmVyeSB0aHJvdyBzaXRlIG11c3QgZGVjbGFyZSBhIFRo
cm93U2NvcGUgaW5zdGFuY2UgdXNpbmcgREVDTEFSRV9USFJPV19TQ09QRSBhdAorIDIuIE9ubHkg
VGhyb3dTY29wZSBtYXkgdGhyb3dFeGNlcHRpb24sIG9ubHkgQ2F0Y2hTY29wZSBtYXkgY2F0Y2hF
eGNlcHRpb24uCisKKyAgICBFdmVyeSB0aHJvdyBzaXRlIG11c3QgZGVjbGFyZSBhIFRocm93U2Nv
cGUgaW5zdGFuY2UgdXNpbmcgREVDTEFSRV9USFJPV19TQ09QRSBhdAogICAgIHRoZSB0b3Agb2Yg
aXRzIGZ1bmN0aW9uIChhcyBlYXJseSBhcyBwb3NzaWJsZSkgZS5nLgogIAogICAgICAgICB2b2lk
IGZvbyguLi4pCkBAIC02NCw3ICs1Myw3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIC4uLik7CiAgICAgICAgIH0KIAot
ICAgIE5vdGU6IFZNOjp0aHJvd0V4Y2VwdGlvbigpIG1ldGhvZHMgYXJlIHByaXZhdGUsIGFuZCBv
bmx5IGNhbGxlYWJsZWJ5IHRoZSBUaHJvd1Njb3BlCisgICAgTm90ZTogVk06OnRocm93RXhjZXB0
aW9uKCkgbWV0aG9kcyBhcmUgcHJpdmF0ZSwgYW5kIGlzIG9ubHkgY2FsbGVhYmxlIGJ5IHRoZSBU
aHJvd1Njb3BlCiAgICAgZnJpZW5kIGNsYXNzLiBBbGwgdGhyb3dzIG11c3QgZ28gdGhyb3VnaCBh
IFRocm93U2NvcGUuIEhlbmNlLCB3ZSBhcmUgZ3VhcmFudGVlZCB0aGF0CiAgICAgYW55IGZ1bmN0
aW9uIHRoYXQgY2FuIHRocm93IHdpbGwgaGF2ZSBhIFRocm93U2NvcGUuCiAKQEAgLTcyLDggKzYx
LDE3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogICAgIGluc3RlYWQgb2YgaW5zdGFudGlh
dGluZyBpdHMgb3duIFRocm93U2NvcGUuICBUaGlzIGFsbG93cyB0aGUgdGhyb3cgdG8gYmUgYXR0
cmlidXRlZAogICAgIHRvIHRoZSBjbGllbnQgY29kZSByYXRoZXIgdGhhbiB0aGUgdGhyb3cgaGVs
cGVyIGl0c2VsZi4KIAorICAgIEV2ZXJ5IGNhdGNoIHNpdGUgKGkuZS4gYSBzaXRlIHRoYXQgY2Fs
bHMgY2xlYXJFeGNlcHRpb24oKSkgbXVzdCBkZWNsYXJlIGEgQ2F0Y2hTY29wZQorICAgIGluc3Rh
bmNlIHVzaW5nIERFQ0xBUkVfQ0FUQ0hfU0NPUEUgaW4gdGhlIHNjb3BlIHRoYXQgY2FuIGNsZWFy
IHRoZSBleGNlcHRpb24uCisgCisgICAgTm90ZTogVk06OmNsZWFyRXhjZXB0aW9uKCkgaXMgcHJp
dmF0ZSwgYW5kIGlzIG9ubHkgY2FsbGVhYmxlIGJ5IHRoZSBDYXRjaFNjb3BlCisgICAgZnJpZW5k
IGNsYXNzLiBBbGwgY2xlYXJpbmcgb2YgZXhjZXB0aW9ucyBtdXN0IGdvIHRocm91Z2ggYSBDYXRj
aFNjb3BlLiBIZW5jZSwgd2UgYXJlCisgICAgZ3VhcmFudGVlZCB0aGF0IGFueSBmdW5jdGlvbiB0
aGF0IGNhbiBjbGVhciBhbiBleGNlcHRpb24gd2lsbCBoYXZlIGEgQ2F0Y2hTY29wZS4KKwogIDMu
IFZlcmlmaWNhdGlvbiBvZiBuZWVkZWQgZXhjZXB0aW9uIGNoZWNrcwogCisgICAgVGhyb3dTY29w
ZSB2ZXJpZmljYXRpb246CisKICAgICBhLiBPbiBjb25zdHJ1Y3Rpb24sIGVhY2ggVGhyb3dTY29w
ZSB3aWxsIHZlcmlmeSB0aGF0IFZNOjptX25lZWRFeGNlcHRpb25DaGVjayBpcwogICAgICAgIG5v
dCBzZXQuCiAgCkBAIC05MCw2ICs4OCwxOSBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKICAg
ICBjLiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhlIFRocm93U2NvcGUgd2lsbCB2ZXJp
ZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sKICAgICAgICBpcyBub3Qgc2V0LCB1bmxl
c3MgaXQncyBiZWVuIGFzayB0byByZXRocm93IHRoZSBzYW1lIEV4Y2VwdGlvbiBvYmplY3QuCiAK
KyAgICBDYXRjaFNjb3BlIHZlcmlmaWNhdGlvbjoKKworICAgIGEuIE9uIGRlc3RydWN0aW9uLCBl
YWNoIENhdGNoU2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sg
aXMKKyAgICAgICBub3Qgc2V0LiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8gcGVu
ZGluZyBleGNlcHRpb24uCisKKyAgICAgICBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgZXhjZXB0aW9u
cyBhcmUgaGFuZGxlZCBiZWZvcmUgd2UgZXhpdCBhIENhdGNoU2NvcGUuCisKKyAgICAgICBOb3Rl
OiBpdCBpcyB3cm9uZyB0byBhc3NlcnQgdGhhdCB0aGVyZSBpcyBubyBleGNlcHRpb24gb24gZW50
cnkgaW50byBhIENhdGNoU2NvcGUuCisgICAgICAgVGhpcyBpcyBiZWNhdXNlIGEgVGhyb3dTY29w
ZSBtYXkgZW5jbG9zZSBhIENhdGNoU2NvcGUsIGFuZCB1c2UgdGhlIENhdGNoU2NvcGUKKyAgICAg
ICB0byBjbGVhciB0aGUgZXhjZXB0aW9uIG9ubHkgaW4gc29tZSBjYXNlcy4gSGVuY2UsIHdlIG5l
ZWQgdG8gYmUgYWJsZSB0byBlbnRlcgorICAgICAgIHRoZSBDYXRjaFNjb3BlIHdpdGggYSBwZW5k
aW5nIGV4Y2VwdGlvbi4gVGhlIG9ubHkgaW52YXJpYW50IGlzIHRoYXQgd2UgbXVzdAorICAgICAg
IG5ldmVyIGV4aXQgaXQgd2l0aCBhbiBleGNlcHRpb24gc3RpbGwgcGVuZGluZy4KKwogIDQuIFNp
bXVsYXRlZCB0aHJvd3MKIAogICAgIFRocm93cyBhcmUgc2ltdWxhdGVkIGJ5IHNldHRpbmcgdGhl
IG1fbmVlZEV4Y2VwdGlvbkNoZWNrIGJpdC4KQEAgLTE1NCwxMCArMTY1LDEwIEBAIHVuc2lnbmVk
IHRyYWNlQ291bnQgPSAwOwogICAgIFRoZSBhYm92ZSB3aWxsIHJlc3VsdCBpbiBhIHZlcmlmaWNh
dGlvbiBmYWlsdXJlIGluIGdvbzIoKSdzIFRocm93U2NvcGUuICBUaGUgcHJvcGVyIHdheQogICAg
IHRvIGZpeCB0aGlzIHZlcmlmaWNhdGlvbiBpcyB0byBkbyB3aXRoZXIgKDYpIG9yICg3KSBiZWxv
dy4KICAKLSAgNi4gQ2hlY2tpbmcgZXhjZXB0aW9ucyB3aXRoIFRocm93U2NvcGU6OmV4Y2VwdGlv
bigpCisgIDYuIENoZWNraW5nIGV4Y2VwdGlvbnMgd2l0aCBUaHJvd1Njb3BlOjpleGNlcHRpb24o
KSAvIENhdGNoU2NvcGU6OmV4Y2VwdGlvbigpCiAgCi0gICAgIFRocm93U2NvcGU6OmV4Y2VwdGlv
bigpIHJldHVybnMgdGhlIHRocm93biBFeGNlcHRpb24gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSBw
ZW5kaW5nLgotICAgICBFbHNlIGl0IHJldHVybnMgbnVsbHB0ci4KKyAgICAgVGhyb3dTY29wZS9D
YXRjaFNjb3BlOjpleGNlcHRpb24oKSByZXR1cm5zIHRoZSB0aHJvd24gRXhjZXB0aW9uIG9iamVj
dCBpZiB0aGVyZSBpcyBvbmUKKyAgICAgcGVuZGluZy4gRWxzZSBpdCByZXR1cm5zIG51bGxwdHIu
CiAgCiAgICAgIEl0IGFsc28gY2xlYXJzIHRoZSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQgdGhl
cmVieSBpbmRpY2F0aW5nIHRoYXQgd2UndmUgc2F0aXNpZmVkCiAgICAgIHRoZSBuZWVkZWQgZXhj
ZXB0aW9uIGNoZWNrLgpAQCAtMTc5LDcgKzE5MCwxMCBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0g
MDsKICAKICAgICBCdXQgc29tZXRpbWVzLCBmb3Igb3B0aW1pemF0aW9uIHJlYXNvbnMsIHdlIG1h
eSBjaG9vc2UgdG8gdGVzdCB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsZWUKICAgICBmdW5jdGlvbiBp
bnN0ZWFkIGRvaW5nIGEgbG9hZCBvZiB0aGUgVk0gZXhjZXB0aW9uIHZhbHVlLiBTZWUgKDcpIGJl
bG93LgotIAorCisgICAgTm90ZTogVk06OmV4Y2VwdGlvbigpIGlzIGEgcHJpdmF0ZSwgYW5kIGlz
IG9ubHkgY2FsbGVhYmxlIHZpYSBUaHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgVGhpcyBl
bnN1cmVzIHRoYXQgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIHNlZXMgd2hlbiBhIGNsaWVudCBp
cyBjaGVja2luZyBmb3IgZXhjZXB0aW9ucy4KKwogIDcuIENoZWNraW5nIGV4Y2VwdGlvbiBieSBj
aGVja2luZyBjYWxsZWUgcmVzdWx0CiAgCiAgICAgVGhpcyBhcHByb2FjaCBzaG91bGQgb25seSBi
ZSBhcHBsaWVkIHdoZW4gaXQgbWFrZXMgYSBkaWZmZXJlbmNlIHRvIHBlcmZvcm1hbmNlLgpAQCAt
MjIwLDcgKzIzNCw3IEBAIHVuc2lnbmVkIHRyYWNlQ291bnQgPSAwOwogCiAgICAgYi4gVHVybiBv
biBUaHJvd1Njb3BlIHRyYWNpbmcKICAKLSAgICAgICBKdXN0IHNldCB0cmFjZU9uPXRydWUgYXQg
dGhlIHRvcCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJlYnVpbGQuIFRoZXJlYWZ0ZXIsIHlvdSBz
aG91bGQKKyAgICAgICBKdXN0IHNldCBWTTo6bV90cmFjZUV4Y2VwdGlvbkV2ZW50cz10cnVlIGlu
IHRoZSBWTSwgYW5kIHJlYnVpbGQuIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQKICAgICAgICBzZWUg
YSB0cmFjZSBvZiBUaHJvd1Njb3BlcyBiZWluZyBlbnRlcmVkIGFuZCBleGl0ZWQgYXMgd2VsbCBh
cyB0aGVpciBkZXB0aCBlLmcuCiAKICAgICBUaHJvd1Njb3BlIFsxXSBFbnRlcjogbGxpbnRfc2xv
d19wYXRoX2pmYWxzZSBAIC9Wb2x1bWVzL0RhdGEvd3M2L09wZW5Tb3VyY2UvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoxMDMyCkBAIC0yMzQsNyArMjQ4LDcg
QEAgdW5zaWduZWQgdHJhY2VDb3VudCA9IDA7CiAKICAgICBjLiBUdXJuIG9uIFRocm93U2NvcGUg
c3RhY2sgZHVtcHMKIAotICAgICAgIEp1c3Qgc2V0IHRyYWNlV2l0aFN0YWNrVHJhY2VzPXRydWUg
YXQgdGhlIHRvcCBvZiBUaHJvd1Njb3BlLmNwcCwgYW5kIHJlYnVpbGQuCisgICAgICAgSnVzdCBz
ZXQgVk06Om1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXM9dHJ1ZSBhdCBpbiB0
aGUgVk0sIGFuZCByZWJ1aWxkLgogICAgICAgIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQgc2VlIGEg
c3RhY2sgdHJhY2VzIGF0IHZhcmlvdXMgcmVsZXZhbnQgVGhyb3dTY29wZSBldmVudHMuCiAKICAg
ICBkLiBVc2luZyB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjaygpCkBAIC0yNDksMzMgKzI2Mywx
OCBAQCB1bnNpZ25lZCB0cmFjZUNvdW50ID0gMDsKICAgICAgICBpLmUuIHRoZSBvbmUgdGhhdCBw
cmVjZWRlZCB0aGUgdGhyb3dTY29wZVByaW50SWZOZWVkQ2hlY2soKSB0aGF0IHByaW50ZWQgYSBs
aW5lLgogKi8KIAotVGhyb3dTY29wZTo6VGhyb3dTY29wZShWTSYgdm0sIFRocm93U2NvcGVMb2Nh
dGlvbiBsb2NhdGlvbikKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3ByZXZpb3VzU2NvcGUodm0u
bV90b3BUaHJvd1Njb3BlKQotICAgICwgbV9sb2NhdGlvbihsb2NhdGlvbikKLSAgICAsIG1fZGVw
dGgobV9wcmV2aW91c1Njb3BlID8gbV9wcmV2aW91c1Njb3BlLT5tX2RlcHRoICsgMSA6IDApCitU
aHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZNJiB2bSwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2Nh
dGlvbikKKyAgICA6IEV4Y2VwdGlvblNjb3BlKHZtLCBFeGNlcHRpb25FdmVudDo6VGhyb3dTY29w
ZUVudHJ5LCBsb2NhdGlvbikKIHsKLSAgICBtX3ZtLm1fdG9wVGhyb3dTY29wZSA9IHRoaXM7Ci0K
LSAgICBpZiAodHJhY2VPbikgewotICAgICAgICBkYXRhTG9nKCI8IiwgdHJhY2VDb3VudCsrLCAi
PiBUaHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXSBFbnRlcjogIiwgbG9jYXRpb24uZnVuY3Rpb25O
YW1lLCAiIEAgIiwgbG9jYXRpb24uZmlsZSwgIjoiLCBsb2NhdGlvbi5saW5lKTsKLSAgICAgICAg
aWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0gICAgICAgICAgICBkYXRhTG9nKCIsIG5l
ZWRzIGNoZWNrIik7Ci0gICAgICAgIGRhdGFMb2coIlxuIik7Ci0KLSAgICAgICAgaWYgKHRyYWNl
V2l0aFN0YWNrVHJhY2VzKQotICAgICAgICAgICAgV1RGUmVwb3J0QmFja3RyYWNlKCk7Ci0gICAg
fQotCi0gICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6U2NvcGVF
bnRyeSk7CisgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNl
cHRpb25FdmVudDo6VGhyb3dTY29wZUVudHJ5LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKIH0KIAog
VGhyb3dTY29wZTo6flRocm93U2NvcGUoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90
b3BUaHJvd1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9uU2Nv
cGUpOwogCiAgICAgaWYgKCFtX2lzUmVsZWFzZWQpCi0gICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNo
ZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlNjb3BlRXhpdCk7CisgICAgICAgIG1fdm0udmVyaWZ5
RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQ6OlRocm93U2NvcGVF
eGl0LCBtX2RlcHRoLCBtX2xvY2F0aW9uKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSWYgd2Ug
cmVsZWFzZWQgdGhlIHNjb3BlLCB0aGF0IG1lYW5zIHdlJ3JlIGxldHRpbmcgb3VyIGNhbGxlcnMg
ZG8gdGhlCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjay4gSG93ZXZlciwgYmVjYXVzZSBvdXIg
Y2FsbGVyIG1heSBiZSBhIExMSW50IG9yIEpJVApAQCAtMjk3LDI3ICsyOTYsMjUgQEAgVGhyb3dT
Y29wZTo6flRocm93U2NvcGUoKQogICAgICAgICB3aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQgPSB0
cnVlOwogICAgIAogICAgIGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQotICAgICAgICBz
aW11bGF0ZVRocm93KCk7CisgICAgICAgIHNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQ6OlRo
cm93U2NvcGVFeGl0KTsKIAotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwi
LCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEV4aXQ6ICIsIG1f
bG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9j
YXRpb24ubGluZSk7CisgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50cykgeworICAg
ICAgICBsb2dFdmVudEhlYWRlcihFeGNlcHRpb25FdmVudDo6VGhyb3dTY29wZUV4aXQsIG1fbG9j
YXRpb24pOwogICAgICAgICBpZiAoIXdpbGxCZUhhbmRsZUJ5TExJbnRPckpJVCkKICAgICAgICAg
ICAgIGRhdGFMb2coIiwgd2l0aCByZXRocm93Iik7CiAgICAgICAgIGlmIChtX3ZtLm1fbmVlZEV4
Y2VwdGlvbkNoZWNrKQogICAgICAgICAgICAgZGF0YUxvZygiLCBuZWVkcyBjaGVjayIpOwogICAg
ICAgICBkYXRhTG9nKCJcbiIpOwogCi0gICAgICAgIGlmICh0cmFjZVdpdGhTdGFja1RyYWNlcykK
KyAgICAgICAgaWYgKG1fdm0ubV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFja1RyYWNlcykK
ICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOwogICAgIH0KLQotICAgIG1fdm0ubV90
b3BUaHJvd1Njb3BlID0gbV9wcmV2aW91c1Njb3BlOwogfQogCiB2b2lkIFRocm93U2NvcGU6OnRo
cm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CiAg
ICAgaWYgKG1fdm0uZXhjZXB0aW9uKCkgJiYgbV92bS5leGNlcHRpb24oKSAhPSBleGNlcHRpb24p
Ci0gICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlRocm93
KTsKKyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNl
cHRpb25FdmVudDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIAogICAgIG1fdm0u
dGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KQEAgLTMyNSw3ICszMjIsNyBAQCB2
b2lkIFRocm93U2NvcGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0CiBKU1ZhbHVlIFRocm93U2Nv
cGU6OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKIHsKICAg
ICBpZiAoIWVycm9yLmlzQ2VsbCgpIHx8ICFqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KGVycm9y
LmFzQ2VsbCgpKSkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQo
U2l0ZTo6VGhyb3cpOworICAgICAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9kZXB0aCwgbV9sb2NhdGlvbik7CiAgICAg
CiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3IpOwogfQpAQCAtMzMz
LDcgKzMzMCw3IEBAIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1MKIEpT
T2JqZWN0KiBUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmopCiB7CiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KG9iaikpCi0g
ICAgICAgIHZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGU6OlRocm93KTsK
KyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChFeGNlcHRp
b25FdmVudDo6VGhyb3csIG1fZGVwdGgsIG1fbG9jYXRpb24pOwogICAgIAogICAgIHJldHVybiBt
X3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIG9iaik7CiB9CkBAIC0zNDEsNTUgKzMzOCwyNCBAQCBK
U09iamVjdCogVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlCiB2b2lkIFRocm93U2NvcGU6
OnByaW50SWZOZWVkQ2hlY2soY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBm
aWxlLCB1bnNpZ25lZCBsaW5lKQogewogICAgIGlmIChtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNr
KQotICAgICAgICBkYXRhTG9nKCI8IiwgdHJhY2VDb3VudCsrLCAiPiBOZWVkIGV4Y2VwdGlvbiBj
aGVjayBhdCAiLCBmdW5jdGlvbk5hbWUsICIgQCAiLCBmaWxlLCAiOiIsIGxpbmUsICJcbiIpOwor
ICAgICAgICBsb2dFdmVudChFeGNlcHRpb25FdmVudDo6TmVlZEV4Y2VwdGlvbkNoZWNrLCBFeGNl
cHRpb25FdmVudExvY2F0aW9uKGZ1bmN0aW9uTmFtZSwgZmlsZSwgbGluZSkpOwogfQogCi12b2lk
IFRocm93U2NvcGU6OnNpbXVsYXRlVGhyb3coKQordm9pZCBUaHJvd1Njb3BlOjpzaW11bGF0ZVRo
cm93KEV4Y2VwdGlvbkV2ZW50IGV2ZW50KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90
b3BUaHJvd1Njb3BlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3ZtLm1fdG9wRXhjZXB0aW9uU2Nv
cGUpOworICAgIG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RXZlbnQgPSBldmVudDsKICAgICBt
X3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uID0gbV9sb2NhdGlvbjsKICAgICBtX3Zt
Lm1fc2ltdWxhdGVkVGhyb3dQb2ludERlcHRoID0gbV9kZXB0aDsKICAgICBtX3ZtLm1fbmVlZEV4
Y2VwdGlvbkNoZWNrID0gdHJ1ZTsKIAotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFM
b2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIFRocm93
IGZyb206ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxl
LCAiOiIsIG1fbG9jYXRpb24ubGluZSwgIlxuIik7Ci0gICAgICAgIGlmICh0cmFjZVdpdGhTdGFj
a1RyYWNlcykKKyAgICBpZiAobV92bS5tX3RyYWNlRXhjZXB0aW9uRXZlbnRzKSB7CisgICAgICAg
IGxvZ0V2ZW50KEV4Y2VwdGlvbkV2ZW50OjpUaHJvdywgbV9sb2NhdGlvbik7CisgICAgICAgIGlm
IChtX3ZtLm1fdHJhY2VFeGNlcHRpb25FdmVudHNXaXRoU3RhY2tUcmFjZXMpCiAgICAgICAgICAg
ICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKICAgICB9CiB9CiAKLXZvaWQgVGhyb3dTY29wZTo6dmVy
aWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoVGhyb3dTY29wZTo6U2l0ZSBzaXRlKQot
ewotICAgIGlmICghdmVyaWZpY2F0aW9uT24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChV
TkxJS0VMWShtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrKSkgewotICAgICAgICBhdXRvIGZhaWxE
ZXB0aCA9IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50RGVwdGg7Ci0gICAgICAgIGF1dG8mIGZh
aWxMb2NhdGlvbiA9IG1fdm0ubV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb247Ci0KLSAgICAg
ICAgYXV0byBzaXRlTmFtZSA9IFtdIChTaXRlIHNpdGUpIC0+IGNvbnN0IGNoYXIqIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAoc2l0ZSkgewotICAgICAgICAgICAgY2FzZSBTaXRlOjpTY29wZUVudHJ5
OgotICAgICAgICAgICAgICAgIHJldHVybiAiRW50cnkiOwotICAgICAgICAgICAgY2FzZSBTaXRl
OjpTY29wZUV4aXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFeGl0IjsKLSAgICAgICAgICAg
IGNhc2UgU2l0ZTo6VGhyb3c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJUaHJvdyI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZGF0YUxvZygK
LSAgICAgICAgICAgICJGQUlMRUQgZXhjZXB0aW9uIGNoZWNrIHZlcmlmaWNhdGlvbjpcbiIKLSAg
ICAgICAgICAgICIgICAgRXhjZXB0aW9uIHRocm93biBmcm9tIFRocm93U2NvcGUgWyIsIGZhaWxE
ZXB0aCwgIl0gIiwgc2l0ZU5hbWUoc2l0ZSksICI6ICIsIGZhaWxMb2NhdGlvbi5mdW5jdGlvbk5h
bWUsICIgQCAiLCBmYWlsTG9jYXRpb24uZmlsZSwgIjoiLCBmYWlsTG9jYXRpb24ubGluZSwgIlxu
IgotICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgaW4gVGhyb3dTY29wZSBbIiwgbV9kZXB0
aCwgIl06ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxl
LCAiOiIsIG1fbG9jYXRpb24ubGluZSwgIlxuIgotICAgICAgICAgICAgIlxuIik7Ci0KLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spOwotICAgIH0KLX0K
LQotI2VuZGlmIC8vIEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCisjZW5kaWYgLy8g
RU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCiAgICAgCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmgJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsODggKzI2LDY0IEBACiAjaWZuZGVmIFRocm93
U2NvcGVfaAogI2RlZmluZSBUaHJvd1Njb3BlX2gKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgot
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uU2NvcGUuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogCi0jaWYgRU5BQkxF
KFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZF
UklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29wZSB7CitjbGFzcyBUaHJvd1Njb3BlIDogcHVi
bGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBUaHJv
d1Njb3BlKFZNJiwgVGhyb3dTY29wZUxvY2F0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBU
aHJvd1Njb3BlKFZNJiwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgflRocm93U2NvcGUoKTsKIAogICAgIFRocm93U2NvcGUoY29uc3QgVGhyb3dTY29wZSYp
ID0gZGVsZXRlOwogICAgIFRocm93U2NvcGUoVGhyb3dTY29wZSYmKSA9IGRlZmF1bHQ7CiAKLSAg
ICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0KICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEV4Y2VwdGlvbiopOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0Kik7CiAKLSAgICBpbmxpbmUgRXhjZXB0aW9uKiBleGNlcHRpb24oKQotICAg
IHsKLSAgICAgICAgbV92bS5tX25lZWRFeGNlcHRpb25DaGVjayA9IGZhbHNlOwotICAgICAgICBy
ZXR1cm4gbV92bS5leGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdm9pZCByZWxlYXNl
KCkgeyBtX2lzUmVsZWFzZWQgPSB0cnVlOyB9CisgICAgdm9pZCByZWxlYXNlKCkgeyBtX2lzUmVs
ZWFzZWQgPSB0cnVlOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByaW50SWZOZWVk
Q2hlY2soY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNpZ25l
ZCBsaW5lKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNpbXVsYXRlVGhyb3coKTsKKyAgICB2b2lk
IHNpbXVsYXRlVGhyb3coRXhjZXB0aW9uRXZlbnQpOwogCi0gICAgZW51bSBjbGFzcyBTaXRlIHsK
LSAgICAgICAgU2NvcGVFbnRyeSwKLSAgICAgICAgU2NvcGVFeGl0LAotICAgICAgICBUaHJvdwot
ICAgIH07Ci0gICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChTaXRl
KTsKLQotICAgIFZNJiBtX3ZtOwotICAgIFRocm93U2NvcGUqIG1fcHJldmlvdXNTY29wZTsKLSAg
ICBUaHJvd1Njb3BlTG9jYXRpb24gbV9sb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBtX2RlcHRoOwog
ICAgIGJvb2wgbV9pc1JlbGVhc2VkIHsgZmFsc2UgfTsKIH07CiAKICNkZWZpbmUgREVDTEFSRV9U
SFJPV19TQ09QRSh2bV9fKSBcCi0gICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpUaHJv
d1Njb3BlTG9jYXRpb24oX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pKQorICAgIEpT
Qzo6VGhyb3dTY29wZSgodm1fXyksIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbihfX0ZVTkNU
SU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykpCiAKICNkZWZpbmUgdGhyb3dTY29wZVByaW50SWZO
ZWVkQ2hlY2soc2NvcGVfXykgXAogICAgIHNjb3BlX18ucHJpbnRJZk5lZWRDaGVjayhfX0ZVTkNU
SU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXykKIAotI2Vsc2UgLy8gbm90IEVOQUJMRShUSFJPV19T
Q09QRV9WRVJJRklDQVRJT04pCisjZWxzZSAvLyBub3QgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCiAKLWNsYXNzIFRocm93U2NvcGUgeworY2xhc3MgVGhyb3dTY29wZSA6IHB1
YmxpYyBFeGNlcHRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAgVGhyb3dTY29wZShWTSYgdm0pCi0g
ICAgICAgIDogbV92bSh2bSkKKyAgICBBTFdBWVNfSU5MSU5FIFRocm93U2NvcGUoVk0mIHZtKQor
ICAgICAgICA6IEV4Y2VwdGlvblNjb3BlKHZtKQogICAgIHsgfQorICAgIFRocm93U2NvcGUoY29u
c3QgVGhyb3dTY29wZSYpID0gZGVsZXRlOworICAgIFRocm93U2NvcGUoVGhyb3dTY29wZSYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBWTSYgdm0oKSBjb25zdCB7IHJldHVybiBtX3ZtOyB9Ci0gICAgCi0g
ICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbiogZXhjZXB0
aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsgfQotICAgIEpTVmFs
dWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsgfQotICAgIEpTT2JqZWN0KiB0aHJv
d0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmopIHsgcmV0dXJuIG1fdm0u
dGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsgfQotICAgIAotICAgIEV4Y2VwdGlvbiogZXhjZXB0
aW9uKCkgeyByZXR1cm4gbV92bS5leGNlcHRpb24oKTsgfQotICAgIHZvaWQgcmVsZWFzZSgpIHsg
fQotICAgIAotcHJpdmF0ZToKLSAgICBWTSYgbV92bTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikgeyBt
X3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBtX3ZtLnRocm93RXhjZXB0aW9uKGV4ZWMsIHZhbHVlKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcmVsZWFzZSgpIHsgfQogfTsKIAogI2RlZmluZSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtX18pIFwKICAgICBKU0M6OlRocm93U2NvcGUoKHZtX18pKQogCi0jZW5kaWYg
Ly8gRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbmRpZiAvLyBFTkFCTEUoRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAogQUxXQVlTX0lOTElORSB2b2lkIHRocm93RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVGhyb3dTY29wZSYgc2NvcGUsIEV4Y2VwdGlvbiogZXhj
ZXB0aW9uKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29w
ZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGhyb3dTY29wZUxvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5oCShub25leGlzdGVudCkKQEAgLTEs
NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RydWN0IFRocm93U2NvcGVMb2Nh
dGlvbiB7Ci0gICAgVGhyb3dTY29wZUxvY2F0aW9uKCkgeyB9Ci0gICAgVGhyb3dTY29wZUxvY2F0
aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmlsZSwgdW5zaWduZWQg
bGluZSkKLSAgICAgICAgOiBmdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQotICAgICAgICAsIGZp
bGUoZmlsZSkKLSAgICAgICAgLCBsaW5lKGxpbmUpCi0gICAgeyB9Ci0gICAgCi0gICAgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lIHsgbnVsbHB0ciB9OwotICAgIGNvbnN0IGNoYXIqIGZpbGUgeyBu
dWxscHRyIH07Ci0gICAgdW5zaWduZWQgbGluZSB7IDAgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04ODksNCArODg5LDI2IEBAIGJvb2wgVk06OmlzU2FmZVRvUmVjdXJzZVNvZnRDTG9v
cCgpIGNvbnMKIH0KICNlbmRpZiAvLyAhRU5BQkxFKEpJVCkKIAorI2lmIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQordm9pZCBWTTo6dmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVk
SXNTYXRpc2ZpZWQoRXhjZXB0aW9uRXZlbnQgZXZlbnQsIHVuc2lnbmVkIGRlcHRoLCBFeGNlcHRp
b25FdmVudExvY2F0aW9uJiBsb2NhdGlvbikKK3sKKyAgICBpZiAoIW1fdmVyaWZ5RXhjZXB0aW9u
RXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoVU5MSUtFTFkobV9uZWVkRXhjZXB0
aW9uQ2hlY2spKSB7CisgICAgICAgIGF1dG8gdGhyb3dFdmVudCA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludEV2ZW50OworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3NpbXVsYXRlZFRocm93UG9p
bnREZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2NhdGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQ
b2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiRkFJTEVEIGV4
Y2VwdGlvbiBjaGVjayB2ZXJpZmljYXRpb246XG4iCisgICAgICAgICAgICAiICAgIEV4Y2VwdGlv
biB0aHJvd24gZnJvbSBbIiwgdGhyb3dEZXB0aCwgIl0gIiwgdGhyb3dFdmVudCwgIjogIiwgdGhy
b3dMb2NhdGlvbiwgIlxuIgorICAgICAgICAgICAgIiAgICBpcyB1bmNoZWNrZWQgYXQgWyIsIGRl
cHRoLCAiXSAiLCBldmVudCwgIjogIiwgbG9jYXRpb24sICJcbiIKKyAgICAgICAgICAgICJcbiIp
OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAg
fQorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAi
Q29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb250cm9sRmxvd1Byb2ZpbGVyLmgiCiAj
aW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25FdmVudC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKICNpbmNsdWRlICJFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgpAQCAtNDcsNyArNDksNiBAQAogI2luY2x1ZGUgIlNtYWxsU3RyaW5n
cy5oIgogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNs
dWRlICJUaHJvd1Njb3BlTG9jYXRpb24uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
ICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNv
cmQuaCIKQEAgLTg1LDYgKzg2LDcgQEAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBD
dXN0b21HZXR0ZXJTZXR0ZXI7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBFeGNlcHRpb247Citj
bGFzcyBFeGNlcHRpb25TY29wZTsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVByb2Zp
bGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOwpAQCAtMTEyLDcgKzExNCw2IEBAIGNsYXNzIFN0
cnVjdHVyZTsKIGNsYXNzIFJlZ0V4cDsKICNlbmRpZgogY2xhc3MgU3ltYm9sOwotY2xhc3MgVGhy
b3dTY29wZTsKIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CkBAIC00NDMsMTIgKzQ0
NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc3RvcmVQcmV2aW91c0V4Y2VwdGlvbihFeGNl
cHRpb24qIGV4Y2VwdGlvbikgeyBzZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsgfQogCi0gICAgdm9p
ZCBjbGVhckV4Y2VwdGlvbigpIHsgbV9leGNlcHRpb24gPSBudWxscHRyOyB9CiAgICAgdm9pZCBj
bGVhckxhc3RFeGNlcHRpb24oKSB7IG1fbGFzdEV4Y2VwdGlvbiA9IG51bGxwdHI7IH0KIAogICAg
IEV4ZWNTdGF0ZSoqIGFkZHJlc3NPZkNhbGxGcmFtZUZvckNhdGNoKCkgeyByZXR1cm4gJmNhbGxG
cmFtZUZvckNhdGNoOyB9CiAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhjZXB0aW9uOyB9CiAgICAgSlNDZWxsKiogYWRkcmVzc09mRXhjZXB0aW9uKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0NlbGwqKj4oJm1fZXhjZXB0aW9uKTsgfQogCiAgICAg
RXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RXhjZXB0aW9u
OyB9CkBAIC02NDQsNiArNjQzLDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9leGNlcHRpb24gPSBl
eGNlcHRpb247CiAgICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgICB9Cisg
ICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbjsgfQor
ICAgIHZvaWQgY2xlYXJFeGNlcHRpb24oKSB7IG1fZXhjZXB0aW9uID0gbnVsbHB0cjsgfQogCiAj
aWYgIUVOQUJMRShKSVQpICAgIAogICAgIGJvb2wgZW5zdXJlU3RhY2tDYXBhY2l0eUZvckNMb29w
KFJlZ2lzdGVyKiBuZXdUb3BPZlN0YWNrKTsKQEAgLTY1NCw2ICs2NTUsMTAgQEAgcHJpdmF0ZToK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlv
bihFeGVjU3RhdGUqLCBKU09iamVjdCopOwogCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCisgICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmll
ZChFeGNlcHRpb25FdmVudCwgdW5zaWduZWQgZGVwdGgsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24m
KTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICBib29sIG1fY2FuVXNlQXNz
ZW1ibGVyOwogI2VuZGlmCkBAIC02NzgsMTEgKzY4MywyMyBAQCBwcml2YXRlOgogCiAgICAgRXhj
ZXB0aW9uKiBtX2V4Y2VwdGlvbiB7IG51bGxwdHIgfTsKICAgICBFeGNlcHRpb24qIG1fbGFzdEV4
Y2VwdGlvbiB7IG51bGxwdHIgfTsKLSNpZiBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9O
KQotICAgIFRocm93U2NvcGUqIG1fdG9wVGhyb3dTY29wZSB7IG51bGxwdHIgfTsKLSAgICBUaHJv
d1Njb3BlTG9jYXRpb24gbV9zaW11bGF0ZWRUaHJvd1BvaW50TG9jYXRpb247CisjaWYgRU5BQkxF
KEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgRXhjZXB0aW9uU2NvcGUqIG1fdG9w
RXhjZXB0aW9uU2NvcGUgeyBudWxscHRyIH07CisgICAgRXhjZXB0aW9uRXZlbnQgbV9zaW11bGF0
ZWRUaHJvd1BvaW50RXZlbnQ7CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBtX3NpbXVsYXRl
ZFRocm93UG9pbnRMb2NhdGlvbjsKICAgICB1bnNpZ25lZCBtX3NpbXVsYXRlZFRocm93UG9pbnRE
ZXB0aCB7IDAgfTsKICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkRXhjZXB0aW9uQ2hlY2sgeyBmYWxz
ZSB9OworCisgICAgLy8gTG9ncyBhbGwgZXhjZXB0aW9uIGFjdGl2aXR5IHRvIGhlbHAgZGVidWcg
dGhlIHNvdXJjZSBvZiBhIHZlcmlmaWNhdGlvbiBmYWlsdXJlLgorICAgIGJvb2wgbV90cmFjZUV4
Y2VwdGlvbkV2ZW50cyB7IGZhbHNlIH07CisKKyAgICAvLyBBIG1vcmUgdmVyYm9zZSBsb2dnaW5n
IG9wdGlvbiB0byBkdW1wIHRoZSBDKysgc3RhY2sgdHJhY2UgYXQgc3RyYXRlZ2ljIHBvaW50cyB0
byBhaWQgZGVidWdnaW5nLgorICAgIGJvb2wgbV90cmFjZUV4Y2VwdGlvbkV2ZW50c1dpdGhTdGFj
a1RyYWNlcyB7IGZhbHNlIH07CisKKyAgICAvLyBEaXNhYmxlZCB0ZW1wb3JhcmlseSB1bnRpbCBh
bGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFyZSBmaXhlZC4KKyAgICBib29sIG1fdmVy
aWZ5RXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fZXhjZXB0aW9u
RXZlbnRDb3VudCB7IDAgfTsKICNlbmRpZgogCiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJs
b2NrIHsgZmFsc2UgfTsKQEAgLTcwOCw2ICs3MjUsMTAgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93Q2hpY2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnk7CiAKKyAgICAvLyBGcmllbmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5
LgorICAgIGZyaWVuZCBjbGFzcyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOwor
ICAgIGZyaWVuZCBjbGFzcyBFeGNlcHRpb25TY29wZTsKICAgICBmcmllbmQgY2xhc3MgVGhyb3dT
Y29wZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0
aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFr
TWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
ZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIEpTV2Vha01hcCogd2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRlKGV4ZWMsIHdlYWtN
YXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHdlYWtNYXApOwogCiAgICAgSlNWYWx1
ZSBhZGRlckZ1bmN0aW9uID0gd2Vha01hcC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkuc2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0
YTsKQEAgLTc2LDE3ICs3NiwxOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpKTsKIAogICAgIGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0o
Vk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpZiAoIW5leHRJdGVt
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUga2V5ID0g
bmV4dEl0ZW0uZ2V0KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7Ci0gICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV4dEl0
ZW0uZ2V0KGV4ZWMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPigxKSk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVu
dHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVj
LT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVj
dHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4
ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBK
U1dlYWtTZXQqIHdlYWtTZXQgPSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0
dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02Nyw3
ICs2Nyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh3ZWFrU2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJG
dW5jdGlvbiA9IHdlYWtTZXQtPkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFkZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
SlNEb2xsYXJWTVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsMTAg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykK
IHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsK
ICAgICAgICAgU3RyaW5nIGFyZ1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgZGF0YUxvZyhh
cmdTdHIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTA2ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQg
Zm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hT
Y29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL1BsYXRmb3JtLmg6CisKIDIwMTYtMDktMDYgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEVuYWJsZSBzdHJpY3QgcnVudGltZSBzdGFjayBi
dWZmZXIgY2hlY2tzLgpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTgsOCArOTE4LDggQEAK
ICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLSNpZm5kZWYgRU5BQkxFX1RI
Uk9XX1NDT1BFX1ZFUklGSUNBVElPTgotI2RlZmluZSBFTkFCTEVfVEhST1dfU0NPUEVfVkVSSUZJ
Q0FUSU9OICghZGVmaW5lZChOREVCVUcpKQorI2lmbmRlZiBFTkFCTEVfRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTgorI2RlZmluZSBFTkFCTEVfRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElP
TiAoIWRlZmluZWQoTkRFQlVHKSkKICNlbmRpZgogCiAvKiBQaWNrIHdoaWNoIGFsbG9jYXRvciB0
byB1c2U7IHdlIG9ubHkgbmVlZCBhbiBleGVjdXRhYmxlIGFsbG9jYXRvciBpZiB0aGUgYXNzZW1i
bGVyIGlzIGNvbXBpbGVkIGluLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NDk4KQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTE1IEBA
CisyMDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlhIFRo
cm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0IGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3Ig
Y2hhbmdlIGluIGdlbmVyYWwgZXhjZXB0IGZvciAxIGJ1ZyBmaXguCisgICAgICAgIFRoYXQgYnVn
IGlzIGFscmVhZHkgY2F1Z2h0IGJ5IGV4aXN0aW5nIHRlc3RzIHdpdGggdGhlIGludHJvZHVjdGlv
biBvZiB0aGUgQ2F0Y2hTY29wZS4KKworICAgICAgICBGaXhlcyBhIGJ1ZyBpbiBKU0V2ZW50TGlz
dGVuZXI6OmhhbmRsZUV2ZW50KCkgd2hlcmUgdGhlIGV4Y2VwdGlvbiB0aHJvd24gZnJvbQorICAg
ICAgICBhIGZhaWxlZCBhdHRlbXB0IHRvIGdldCB0aGUgaGFuZGxlRXZlbnQgY2FsbGJhY2sgaXMg
bm90IGhhbmRsZWQuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0NhdGNo
U2NvcGUuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNz
aW9uQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNU2Vzc2lvbkNsZWFyS2V5Ojp1
cGRhdGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXRPckFkZCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1QdXRPckFkZCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpjYWxsU2NyaXB0KToKKyAgICAgICAgKiBNb2R1bGVz
L3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW06CisgICAgICAgIChXZWJDb3Jl
OjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6ZW5zdXJlUmVwbGFjZW1lbnRTY3JpcHRJbmpl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6aW5z
dGFsbFJlcGxhY2VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFycmF5VmFsdWU6OmdldCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvRGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5OjpnZXRPd25Q
cm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwaW5nQ29udGFj
dFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxl
dGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0F1ZGlv
VHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb1RyYWNrOjpzZXRLaW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9UcmFjazo6c2V0TGFuZ3VhZ2UpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RKU0Jsb2IpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NTU1N0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVB
UElIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEpTTGlzdGVuZXJGdW5jdGlv
bnMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFs
Z29yaXRobUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SGFzaEFsZ29yaXRobSk6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBZXNDYmNQYXJhbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQWVzS2V5R2VuUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNQ
YXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSG1hY0tleVBhcmFtcyk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVSc2FLZXlHZW5QYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlUnNhT2FlcFBhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSc2FTc2FQYXJhbXMp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZXRKU0FycmF5RnJvbUpTT04pOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0U3RyaW5nRnJvbUpTT04pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9vbGVhbkZyb21K
U09OKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6SlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5
U2VyaWFsaXphdGlvbkpXSzo6cmVjb25jaWxlVXNhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5RGF0YU9jdGV0U2VxdWVuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjprZXlEYXRhUlNBQ29tcG9u
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6Omtl
eURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGRVc2FnZXNUb0pTT04pOgorICAgICAgICAoV2ViQ29yZTo6SlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNvbnN0cnVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y29uc3RydWN0Q3VzdG9tRWxlbWVudFN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVudCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUpOgorICAgICAgICAoV2ViQ29yZTo6d2hlbkRl
ZmluZWRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
Ojp3aGVuRGVmaW5lZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnZhbHVlVG9VU1ZTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
cmVwb3J0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlcG9ydEN1cnJlbnRFeGNlcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Omhhc0l0ZXJhdG9yTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU21hbGxlckludCk6
CisgICAgICAgIChXZWJDb3JlOjp0b1NtYWxsZXJVSW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
SW50MzJFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9VSW50MzJFbmZvcmNlUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9JbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1VJbnQ2NEVuZm9yY2VSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd05v
dFN1cHBvcnRlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93SW52YWxpZFN0YXRlRXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6dGhyb3dTZWN1cml0eUVycm9yKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNTZXF1ZW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OmpzRnJvemVu
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8U3RyaW5nPjo6bmF0
aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8dW5zaWduZWQ+
OjpuYXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVWYWx1ZVRyYWl0czxmbG9h
dD46Om5hdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPGRv
dWJsZT46Om5hdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VUaGlzVHlwZUVycm9yRm9yQnVpbHRpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZUdldHRlclR5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdFRhc2suY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NSXRl
cmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Oml0ZXJhdG9yRm9yRWFjaCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlamVjdFBy
b21pc2VXaXRoRXhjZXB0aW9uSWZBbnkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5oOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbFByb21pc2VGdW5jdGlvbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01TdHJpbmdNYXA6OnB1dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dNaWNyb3Rh
c2tDYWxsYmFjazo6Y2FsbCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldExvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlUG9z
dE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldFRpbWVvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNldEludGVydmFsKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Ry
dWN0SlNEYXRhQ3VlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpyZWFkUm90YXRpb25SYXRlQXJndW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rp
b25hcnk6OmNvbnZlcnRWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5QW5kUmVz
dWx0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ZpbGVD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNGaWxlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVBvc2l0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpKU0dlb2xvY2F0aW9u
OjpnZXRDdXJyZW50UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2NhdGlvbjo6
d2F0Y2hQb3NpdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlv
bkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYWxsSFRNTEFsbENvbGxlY3Rpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0M0RDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
SFRNTENhbnZhc0VsZW1lbnQ6OnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEpTSFRNTEVsZW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnB1c2hTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQkRh
dGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNMYXp5
RXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVy
Ojppbml0aWFsaXplSlNGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhy
ZWFkRXhlY1N0YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6
OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRF
eGVjU3RhdGU6On5KU01haW5UaHJlYWRFeGVjU3RhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZUluaXRN
ZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lc3NhZ2VQb3J0QXJyYXkpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaDoKKyAgICAgICAgKFdlYkNvcmU6Omhh
bmRsZVBvc3RNZXNzYWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01vY2tDb250ZW50Rmls
dGVyU2V0dGluZ3NDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzOjpzZXREZWNpc2lvblBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvRGVj
aXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpz
ZXREZWNpc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpKU01vY2tDb250ZW50RmlsdGVyU2V0dGlu
Z3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXI6OmFj
Y2VwdE5vZGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZU9yU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvTm9kZU9yU3RyaW5nVmVjdG9yKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FM
VHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHTGVuZ3RoOjpjb252ZXJ0VG9T
cGVjaWZpZWRVbml0cyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1RleHRU
cmFjazo6c2V0TGFuZ3VhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0N1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1ZpZGVvVHJhY2s6OnNldEtpbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW5kZXhlZFBhcmFtZXRlcik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE9iamVjdFBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9WZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uZik6
CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVuY3Rpb25NYXRyaXgpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyeXB0b0tl
eUZvcm1hdEZyb21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyeXB0b0tleVVzYWdlc0Zy
b21KU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjplbmNy
eXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkZWNyeXB0KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjpzaWduKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmRpZ2VzdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dl
YktpdFN1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6aW1wb3J0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjppbXBvcnRLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6ZXhwb3J0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRT
dWJ0bGVDcnlwdG86OndyYXBLZXkpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRTdWJ0bGVD
cnlwdG86OnVud3JhcEtleSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNXb3JrZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6aW1wb3J0U2NyaXB0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V29ya2VyR2xvYmFsU2NvcGU6OnNldEludGVydmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9S
ZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6Omludm9rZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppc0NvbnRyb2xsZWRSZWFkYWJsZVN0
cmVhbUxvY2tlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29u
dHJvbGxlcjo6ZW5xdWV1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZUJhc2U6OnNob3Vs
ZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6
CisgICAgICAgICogYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZURpY3Rpb25hcnlJbXBsZW1lbnRhdGlvbkNvbnRlbnQpOgorICAgICAgICAoR2VuZXJhdGVJbXBs
ZW1lbnRhdGlvbik6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAg
IChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEdlbmVyYXRl
Q29uc3RydWN0b3JEZWZpbml0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEFj
dGl2ZURPTU9iamVjdFByb3RvdHlwZUZ1bmN0aW9uUG9zdE1lc3NhZ2UpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RDdXN0b21OYW1lZEdldHRlclByb3RvdHlwZUZ1bmN0aW9uQW5v
dGhlckZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
RXZlbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0
cnVjdG9yQ29uc3RydWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dEV2ZW50VGFyZ2V0UHJvdG90eXBlRnVuY3Rpb25JdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2YXRlQ29uZGl0
aW9uYWxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9i
YWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RJbnN0YW5jZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VG
dW5jdGlvbkVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24yKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
VGVzdEludGVyZmFjZUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JJbXBsZW1lbnRzU3RhdGljQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMyk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3RvclN1cHBsZW1lbnRhbFN0YXRpY0F0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIzKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25JbXBsZW1l
bnRzTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVG
dW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdHRyaWJ1dGVSV0N1c3RvbSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck5hbWVkQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9kZU5hbWUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRlcm1pbmlzdGljLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1p
bmlzdGljV3JpdGVhYmxlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROb25kZXRl
cm1pbmlzdGljTm9uZGV0ZXJtaW5pc3RpY0V4Y2VwdGlvbkF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNlcHRp
b25BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25k
ZXRlcm1pbmlzdGljU2V0dGVyRXhjZXB0aW9uQXR0cik6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RGlj
dGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5VGhhdFNob3VsZE5vdFRvbGVyYXRlTnVsbD4p
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFy
eVRoYXRTaG91bGRUb2xlcmF0ZU51bGw+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0
aW9uYXJ5PEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lPik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVuYWJsZWRCeVNldHRpbmdDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbnVtQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpCeXRlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPY3Rl
dEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU2hvcnRBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqRW5mb3JjZVJhbmdlU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakxvbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakxvbmdM
b25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdMb25n
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVGVzdE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqVGVzdE51bGxhYmxlT2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpM
ZW5pZW50VGVzdE9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5n
QXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9iakNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRT
dHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlN0
cmluZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkSW50ZWdy
YWxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVk
SW50ZWdyYWxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEJv
b2xlYW5BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbEF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJM
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uV2l0
aE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb25XaXRoTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJp
bmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpDdXN0b21BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9uZm9v
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak9ud2Via2l0Zm9vKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
akNvbmRpdGlvbmFsQXR0cjMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQ29uZGl0
aW9uYWxBdHRyNENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI2Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQW55QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak11dGFi
bGVQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpJbW11dGFibGVQb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iaklkKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJl
cGxhY2VhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iak51bGxh
YmxlTG9uZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9i
ak51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNUZXN0T2JqTnVsbGFibGVVU1ZTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVudW1UeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialB1dEZvcndhcmRzQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5naWZpZXJBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0
aW9uMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkVuYWJs
ZWRBdFJ1bnRpbWVPcGVyYXRpb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uVm9pZE1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQnl0ZU1ldGhvZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT2N0ZXRNZXRob2RXaXRoQXJncyk6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkxvbmdNZXRob2RXaXRoQXJn
cyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9iak1ldGhv
ZFdpdGhBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEFyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoWFBhdGhOU1Jlc29sdmVyUGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTnVs
bGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEVudW1BcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxFbnVtQXJnKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
RW51bUFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoVVNWU3RyaW5n
QXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE51bGxhYmxlVVNWU3RyaW5nQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25Qcml2YXRlTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uUHVibGljQW5kUHJpdmF0ZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0YXRlT2JqKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdFN0
YXRlT2JqRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEF0b21pY1N0cmluZ0lzTnVsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFN0cmluZ0lzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9w
dGlvbmFsQXRvbWljU3RyaW5nSXNFbXB0eVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbERvdWJsZUlzTmFOKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlv
bmFsRmxvYXRJc05hTik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8pOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0
aW9uYWxVbnNpZ25lZExvbmdMb25nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZ0lzWmVybyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbFNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2VJc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQm9vbGVhbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEJvb2xlYW5Jc0ZhbHNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJn
QW5kQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9h
ZGVkTWV0aG9kMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kNyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q5KToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEwKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDExKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zlcmxv
YWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlcjEpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1l
dGVyMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uQ2xh
c3NNZXRob2RXaXRoT3B0aW9uYWwpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3Ry
dWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpDb25zdHJ1Y3RvckZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEyKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRob2RXaXRoQ2xhbXApOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DbGFzc01ldGhvZFdp
dGhFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoVW5zaWduZWRMb25nU2VxdWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TdHJpbmdBcnJheUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEFuZFdpdGhvdXRO
dWxsYWJsZVNlcXVlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uR2V0RWxlbWVudEJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25Db252ZXJ0Myk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkNvbnZlcnQ0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uVmFyaWFkaWNTdHJpbmdNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25WYXJpYWRpY0RvdWJsZU1ldGhvZCk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkFueSk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1
bWVudFByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnRQcm9taXNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVGVzdFByb21pc2VPdmVy
bG9hZGVkRnVuY3Rpb24xUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQxKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ29uZGl0aW9uYWxPdmVybG9hZDIpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TaW5nbGVDb25kaXRpb25hbE92ZXJs
b2FkMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNpbmds
ZUNvbmRpdGlvbmFsT3ZlcmxvYWQyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uQXR0YWNoU2hhZG93Um9vdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczEpOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczIpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UxKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPdmVycmlkZUJ1aWx0aW5zUHJvdG90eXBlRnVu
Y3Rpb25OYW1lZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlQ2FjaGVkVmFs
dWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RUeXBlZGVmc0NvbnN0cnVjdG9yOjpjb25zdHJ1
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25n
QXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RUeXBlZGVmc0F0
dHJXaXRoR2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVk
ZWZzQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25GdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25TZXRTaGFkb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhTZXF1ZW5jZUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlw
ZUZ1bmN0aW9uTnVsbGFibGVTZXF1ZW5jZUFyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RU
eXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuY1dpdGhDbGFtcCk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5nU2VxdWVuY2VGdW5jdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU3RyaW5n
U2VxdWVuY2VGdW5jdGlvbjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbkNhbGxXaXRoU2VxdWVuY2VUaGF0UmVxdWlyZXNJbmNsdWRlKToKKyAgICAg
ICAgKiBicmlkZ2UvTlBfanNvYmplY3QuY3BwOgorICAgICAgICAoX05QTl9JbnZva2VEZWZhdWx0
KToKKyAgICAgICAgKF9OUE5fSW52b2tlKToKKyAgICAgICAgKF9OUE5fRXZhbHVhdGUpOgorICAg
ICAgICAoX05QTl9HZXRQcm9wZXJ0eSk6CisgICAgICAgIChfTlBOX1NldFByb3BlcnR5KToKKyAg
ICAgICAgKF9OUE5fUmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoX05QTl9IYXNQcm9wZXJ0eSk6
CisgICAgICAgIChfTlBOX0hhc01ldGhvZCk6CisgICAgICAgIChfTlBOX0VudW1lcmF0ZSk6Cisg
ICAgICAgIChfTlBOX0NvbnN0cnVjdCk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5j
cHA6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRp
b25Ub0V4ZWNTdGF0ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
OgorICAgICAgICAoV2ViQ29yZTo6YWRkRXhjZXB0aW9uVG9Db25zb2xlKToKKyAgICAgICAgKC1b
V2ViU2NyaXB0T2JqZWN0IGNhbGxXZWJTY3JpcHRNZXRob2Q6d2l0aEFyZ3VtZW50czpdKToKKyAg
ICAgICAgKC1bV2ViU2NyaXB0T2JqZWN0IGV2YWx1YXRlV2ViU2NyaXB0Ol0pOgorICAgICAgICAo
LVtXZWJTY3JpcHRPYmplY3Qgc2V0VmFsdWU6Zm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3Jp
cHRPYmplY3QgdmFsdWVGb3JLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCByZW1v
dmVXZWJTY3JpcHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBoYXNXZWJTY3Jp
cHRLZXk6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCB3ZWJTY3JpcHRWYWx1ZUF0SW5k
ZXg6XSk6CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5k
ZXg6dmFsdWU6XSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0RG9t
YWluTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0VHlwZUZs
YWdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkVHJpZ2dlcik6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEFjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEVuY29kZWRSdWxlcyk6CisgICAg
ICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRy
b2xsZXJKU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZUNhcHRpb25Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
ZW5zdXJlTWVkaWFDb250cm9sc0luamVjdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFDb250cm9sc0FmdGVyUHJlc2VudGF0
aW9uTW9kZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpnZXRD
dXJyZW50TWVkaWFDb250cm9sc1N0YXR1cyk6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6
OmRpZEFkZFVzZXJBZ2VudFNoYWRvd1Jvb3QpOgorCiAyMDE2LTA5LTA1ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW1wbGVtZW50IHJlbGF0
aXZlIGZpbGUgdXJscyBhbmQgYmVnaW4gaW1wbGVtZW50aW5nIGNoYXJhY3RlciBlbmNvZGluZyBp
biBVUkxQYXJzZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvQ2F0Y2hTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvQ2F0Y2hTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9DYXRjaFNjb3BlX2gKKyNkZWZp
bmUgV2ViQ29yZV9GV0RfQ2F0Y2hTY29wZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ2F0
Y2hTY29wZS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRl
ZG1lZGlhL0NETVNlc3Npb25DbGVhcktleS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJLZXkuY3BwCShyZXZpc2lv
biAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0NETVNl
c3Npb25DbGVhcktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMiArMTExLDEzIEBAIGJv
b2wgQ0RNU2Vzc2lvbkNsZWFyS2V5Ojp1cGRhdGUoVWludDhBcnIKIAogICAgICAgICBWTSYgdm0g
PSBjbGVhcktleVZNKCk7CiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bSwgSlNHbG9iYWxP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bSwganNOdWxsKCkpKTsKICAgICAgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2tlcihjbGVhcktleVZNKCkpOwogICAgICAgICBKU1ZhbHVlIGtleXNEYXRhT2JqZWN0
ID0gSlNPTlBhcnNlKGV4ZWMsIHJhd0tleXNTdHJpbmcpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkgfHwgIWtleXNEYXRhT2JqZWN0KSB7CisgICAgICAgIGlmIChzY29wZS5leGNl
cHRpb24oKSB8fCAha2V5c0RhdGFPYmplY3QpIHsKICAgICAgICAgICAgIExPRyhNZWRpYSwgIkNE
TVNlc3Npb25DbGVhcktleTo6dXBkYXRlKCVwKSAtIGZhaWxlZDogaW52YWxpZCBKU09OIiwgdGhp
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNiArMjM2LDkgQEAgUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXRGbwogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxJ
REJLZXk+IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgb3ZlcndyaXRl
TW9kZSwgSW5saW5lS2V5Q2hlY2sgaW5saW5lS2V5Q2hlY2ssIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0
U3RvcmU6OnB1dE9yQWRkIik7CiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCkBAIC0yNzAsOSArMjczLDkg
QEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRPcgogICAgIH0KIAogICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgLy8gQ2xlYXIgdGhlIERPTSBleGNlcHRpb24gZnJvbSB0
aGUgc2VyaWFsaXplciBzbyB3ZSBjYW4gZ2l2ZSBhIG1vcmUgdGFyZ2V0ZWQgZXhjZXB0aW9uLgot
ICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogCiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUNs
b25lRXJyb3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBz
dG9yZSByZWNvcmQgaW4gYW4gSURCT2JqZWN0U3RvcmU6IEFuIG9iamVjdCBjb3VsZCBub3QgYmUg
Y2xvbmVkLiIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMDU0
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTksNyArODU5LDkgQEAgdm9pZCBVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybVB1dE9yQWRkKAogICAgIC8vIHVzaW5nIHN0ZXBzIHRvIGFz
c2lnbiBhIGtleSB0byBhIHZhbHVlIHVzaW5nIGEga2V5IHBhdGguCiAgICAgVGhyZWFkU2FmZURh
dGFCdWZmZXIgaW5qZWN0ZWRSZWNvcmRWYWx1ZTsKICAgICBpZiAodXNlZEtleUlzR2VuZXJhdGVk
ICYmICFvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKS5pc051bGwoKSkgewotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9ja2VyKGRhdGFiYXNlVGhyZWFkVk0oKSk7CisgICAgICAgIFZNJiB2bSA9IGRh
dGFiYXNlVGhyZWFkVk0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBhdXRv
IHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZShkYXRhYmFzZVRocmVhZEV4ZWNT
dGF0ZSgpLCBvcmlnaW5hbFJlY29yZFZhbHVlLmRhdGEoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZCgpKSB7CkBAIC04NzMsNyArODc1LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFz
ZTo6cGVyZm9ybVB1dE9yQWRkKAogICAgICAgICB9CiAKICAgICAgICAgYXV0byBzZXJpYWxpemVk
VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmZGF0YWJhc2VUaHJlYWRFeGVj
U3RhdGUoKSwgdmFsdWUsIG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICBpZiAoZGF0YWJhc2VU
aHJlYWRFeGVjU3RhdGUoKS5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBwb3N0RGF0YWJhc2VUYXNrUmVwbHko
Y3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmVW5pcXVlSURCRGF0YWJhc2U6OmRpZFBlcmZv
cm1QdXRPckFkZCwgY2FsbGJhY2tJZGVudGlmaWVyLCBJREJFcnJvcihJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q29uc3RyYWludEVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJpYWxpemUg
cmVjb3JkIHZhbHVlIGFmdGVyIGluamVjdGluZyByZWNvcmQga2V5IikpLCB1c2VkS2V5KSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDIwNTQ5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTUsIDIwMTYgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MDAsMTUgKzUwMSwxNyBAQCBib29sIFNEUFByb2Nlc3Nvcjo6
Y2FsbFNjcmlwdChjb25zdCBTdHJpCiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250
cm9sbGVyID0gZG9jdW1lbnQtPmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlw
dENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KCptX2lzb2xhdGVkV29ybGQpKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHByb2JlRnVuY3Rpb25W
YWx1ZSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
ZyhleGVjLCAiZ2VuZXJhdGUiKSk7CiAgICAgaWYgKCFwcm9iZUZ1bmN0aW9uVmFsdWUuaXNGdW5j
dGlvbigpKSB7CiAgICAgICAgIFVSTCBzY3JpcHRVUkw7CiAgICAgICAgIHNjcmlwdENvbnRyb2xs
ZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUoU0RQUHJvY2Vzc29yU2NyaXB0UmVz
b3VyY2U6OnNjcmlwdFN0cmluZygpLCBzY3JpcHRVUkwpLCAqbV9pc29sYXRlZFdvcmxkKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI3LDkgKzUzMCw5IEBAIGJvb2wgU0RQUHJv
Y2Vzc29yOjpjYWxsU2NyaXB0KGNvbnN0IFN0cmkKICAgICBhcmdMaXN0LmFwcGVuZChKU0M6Ompz
U3RyaW5nKGV4ZWMsIGFyZ3VtZW50KSk7CiAKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gSlND
OjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwg
YXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0dfRVJST1IoIlNEUFByb2Nlc3Nv
ciBzY3JpcHQgdGhyZXcgaW4gZnVuY3Rpb24gJXMiLCBmdW5jdGlvbk5hbWUuYXNjaWkoKS5kYXRh
KCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50Lm1tCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3BsdWdpbnMvUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2MCwxNyArMTYwLDE5IEBAIGJvb2wgUXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6
OmVuc3VyZVIKICAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkID0gaXNvbGF0ZWRXb3JsZCgpOwog
ICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBtX3BhcmVudEVsZW1lbnQt
PmRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJv
bGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIAogICAgIEpTQzo6SlNWYWx1ZSByZXBsYWNlbWVudEZ1bmN0aW9uID0gZ2xvYmFs
T2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVh
dGVQbHVnaW5SZXBsYWNlbWVudCIpKTsKICAgICBpZiAocmVwbGFjZW1lbnRGdW5jdGlvbi5pc0Z1
bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHNjcmlwdENvbnRyb2xs
ZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUocXVpY2tUaW1lUGx1Z2luUmVwbGFj
ZW1lbnRTY3JpcHQoKSksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIExPRyhQbHVn
aW5zLCAiJXAgLSBFeGNlcHRpb24gd2hlbiBldmFsdWF0aW5nIFF1aWNrVGltZSBwbHVnaW4gcmVw
bGFjZW1lbnQgc2NyaXB0IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC0xODgsMTUgKzE5MCwxNyBAQCBib29sIFF1aWNrVGltZVBsdWdpblJl
cGxhY2VtZW50OjppbnN0YWxsCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVk
V29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gbV9wYXJl
bnRFbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNj
cmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKLSAgICAKKwogICAgIC8vIExvb2t1cCB0aGUgImNyZWF0ZVBsdWdpblJl
cGxhY2VtZW50IiBmdW5jdGlvbi4KICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlv
biA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCAiY3JlYXRlUGx1Z2luUmVwbGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVu
Y3Rpb24uaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpT
Qzo6SlNPYmplY3QqIHJlcGxhY2VtZW50T2JqZWN0ID0gcmVwbGFjZW1lbnRGdW5jdGlvbi50b09i
amVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAg
IEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSByZXBsYWNlbWVudE9iamVjdC0+bWV0aG9kVGFibGUo
KS0+Z2V0Q2FsbERhdGEocmVwbGFjZW1lbnRPYmplY3QsIGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gSlNDOjpDYWxsVHlwZTo6Tm9uZSkKQEAgLTIwOSwzMiArMjEzLDMyIEBAIGJvb2wg
UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6Omluc3RhbGwKICAgICBhcmdMaXN0LmFwcGVuZCh0
b0pTPFN0cmluZz4oZXhlYywgZ2xvYmFsT2JqZWN0LCBtX25hbWVzKSk7CiAgICAgYXJnTGlzdC5h
cHBlbmQodG9KUzxTdHJpbmc+KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV92YWx1ZXMpKTsKICAgICBK
U0M6OkpTVmFsdWUgcmVwbGFjZW1lbnQgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50T2JqZWN0LCBj
YWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gR2V0IHRo
ZSA8dmlkZW8+IGNyZWF0ZWQgdG8gcmVwbGFjZSB0aGUgcGx1Zy1pbi4KICAgICBKU0M6OkpTVmFs
dWUgdmFsdWUgPSByZXBsYWNlbWVudC5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsICJ2aWRlbyIpKTsKLSAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpICYmICF2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYg
IXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gSlNI
VE1MVmlkZW9FbGVtZW50Ojp0b1dyYXBwZWQodmFsdWUpOwogCiAgICAgaWYgKCFtX21lZGlhRWxl
bWVudCkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0gRmFpbGVkIHRvIGZpbmQgPHZpZGVv
PiBlbGVtZW50IGNyZWF0ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudCBzY3JpcHQu
IiwgdGhpcyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAv
LyBHZXQgdGhlIHNjcmlwdGluZyBpbnRlcmZhY2UuCiAgICAgdmFsdWUgPSByZXBsYWNlbWVudC5n
ZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJzY3JpcHRPYmplY3Qi
KSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKICAgICAgICAgbV9zY3JpcHRPYmplY3QgPSB2YWx1ZS50b09iamVjdChl
eGVjKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAogICAgIGlmICghbV9zY3JpcHRPYmpl
Y3QpIHsKICAgICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIHNjcmlwdCBv
YmplY3QgY3JlYXRlZCBieSBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50LiIsIHRoaXMpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9BcnJheVZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDYgKzgyLDkgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBEaWN0aQog
CiBib29sIEFycmF5VmFsdWU6OmdldChzaXplX3QgaW5kZXgsIFN0cmluZyYgdmFsdWUpIGNvbnN0
CiB7CisgICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTkwLDcgKzkzLDcgQEAgYm9vbCBBcnJheVZhbHVlOjpnZXQo
c2l6ZV90IGluZGV4LCBTdHJpbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB2YWx1ZSA9
IGluZGV4ZWRWYWx1ZS50b1dURlN0cmluZyhtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2
ICs2MSw4IEBAIGJvb2wgRGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydGllc0FzU3RyaW4KIAogICAg
IEpTT2JqZWN0KiBvYmplY3QgPSAgbV9kaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0KCk7CiAg
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9kaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKICAgICBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKQEAgLTY5LDEwICs3
MSwxMCBAQCBib29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluCiAgICAgICAg
IGlmIChzdHJpbmdLZXkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCAqaXQpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0g
dmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoTElLRUxZKCFzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICBtYXAuc2V0KHN0cmluZ0tleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTQgQEAg
SlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTR2xvYmFsTwogCiAgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKICAgICBMb2NrZXI8SlNMb2NrPiBsb2NrZXIodm0uYXBpTG9jaygpKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBzd2l0Y2ggKGtl
eS0+dHlwZSgpKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBhdXRvJiBp
bkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICB1bnNpZ25lZCBzaXplID0gaW5BcnJheS5z
aXplKCk7CiAgICAgICAgIGF1dG8gb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KCZzdGF0
ZSwgMCwgJmdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNl
cHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCiAgICAgICAgICAgICBvdXRBcnJheS0+cHV0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpLCB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGluQXJyYXkuYXQoaSkuZ2V0KCkpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5
U2Vzc2lvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQXBwbGVQYXlTZXNzaW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsMTUgKzU1LDE1IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZl
cnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkgfTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpIH07
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBpbXBsLmNvbXBsZXRlU2hpcHBpbmdNZXRob2RTZWxlY3Rpb24oc3RhdHVzLCBuZXdUb3RhbCwg
bmV3TGluZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpAQCAt
ODgsMTkgKzg4LDE5IEBAIEpTVmFsdWUgSlNBcHBsZVBheVNlc3Npb246OmNvbXBsZXRlU2hpcHAK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHVpbnQxNl90IHN0YXR1cyA9IGNvbnZl
cnQ8dWludDE2X3Q+KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIEFycmF5VmFsdWUgbmV3U2hpcHBpbmdNZXRob2RzIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgxKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBEaWN0aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDIpIH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIEFycmF5VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgzKSB9OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgaW1wbC5jb21wbGV0ZVNoaXBwaW5nQ29udGFjdFNlbGVjdGlvbihzdGF0dXMsIG5l
d1NoaXBwaW5nTWV0aG9kcywgbmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMpOwogICAgIHNldERP
TUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTEyNSwxMSArMTI1LDExIEBAIEpTVmFsdWUgSlNB
cHBsZVBheVNlc3Npb246OmNvbXBsZXRlUGF5bWUKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIERpY3Rpb25hcnkgbmV3VG90YWwgPSB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCkg
fTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgQXJyYXlWYWx1ZSBuZXdMaW5lSXRlbXMgeyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEp
IH07Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICBpbXBsLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihuZXdUb3RhbCwgbmV3TGlu
ZUl0ZW1zLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgZWMpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJhY2tDdXN0b20uY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvVHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTQXVk
aW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpTQXVkaW9UcmFjazo6c2V0S2lu
ZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
d3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lk
IEpTQXVkaW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTQXVkaW9UcmFjazo6
c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUu
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCbG9iQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTCiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpT
T2JqZWN0KiBibG9iUGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgZXhlYy51bmNoZWNrZWRBcmd1
bWVudCgwKSwgYmxvYlBhcnRzTGVuZ3RoKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVChibG9iUGFydHMpOwogCkBA
IC0xMDEsNyArMTAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UwogCiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0IHRoZSBlbmRpbmdzIHByb3BlcnR5IGFuZCB2
YWxpZGF0ZSBpdC4KICAgICAgICAgYm9vbCBjb250YWluc0VuZGluZ3MgPSBkaWN0aW9uYXJ5Lmdl
dCgiZW5kaW5ncyIsIGVuZGluZ3MpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKGNvbnRh
aW5zRW5kaW5ncykgewpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlMKIAogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgdHlwZSBw
cm9wZXJ0eS4KICAgICAgICAgZGljdGlvbmFyeS5nZXQoInR5cGUiLCB0eXBlKTsKLSAgICAgICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KIApAQCAtMTIxLDcgKzEyMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0SlMKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9iUGFy
dHNMZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBibG9iUGFydHMtPmdldCgm
ZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoQXJyYXlCdWZmZXIqIGFycmF5
QnVmZmVyID0gdG9BcnJheUJ1ZmZlcihpdGVtKSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgICAgICBibG9iQnVpbGRl
ci5hcHBlbmQoYmxvYik7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIHN0cmlu
ZyA9IGl0ZW0udG9XVEZTdHJpbmcoJmV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgICAgICAgICBibG9iQnVpbGRlci5hcHBlbmQoc3RyaW5nLCBlbmRpbmdzKTsKICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NT
U1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTUsNyArMzU1LDcgQEAgSlNWYWx1ZSBKU0NTU1N0eWxlRGVjbGFyYXRp
b246OmdldFByb3BlcgogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBTdHJpbmcg
cHJvcGVydHlOYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gd3JhcHBlZCgpLmdldFByb3BlcnR5Q1NTVmFsdWUo
cHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFu
ZExpbmVBUElIb3N0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29tbWFuZExpbmVBUElIb3N0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOSBAQCBKU1ZhbHVlIEpTQ29tbWFuZExp
bmVBUElIb3N0OjppbnNwZWN0ZWRPCiBzdGF0aWMgSlNBcnJheSogZ2V0SlNMaXN0ZW5lckZ1bmN0
aW9ucyhFeGVjU3RhdGUmIHN0YXRlLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEV2ZW50TGlz
dGVuZXJJbmZvJiBsaXN0ZW5lckluZm8pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNBcnJheSogcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIG51bGxwdHIpOwotICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgc2l6ZV90IGhhbmRsZXJzQ291bnQgPSBs
aXN0ZW5lckluZm8uZXZlbnRMaXN0ZW5lclZlY3Rvci5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDAsIG91dHB1dEluZGV4ID0gMDsgaSA8IGhhbmRsZXJzQ291bnQ7ICsraSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29y
aXRobURpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRB
bGcKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoIWFsZ29yaXRobU5hbWUuY29udGFpbnNPbmx5QVNDSUkoKSkgewpAQCAtMTA2
LDEyICsxMDYsMTQgQEAgc3RhdGljIGJvb2wgZ2V0SGFzaEFsZ29yaXRobShKU0RpY3Rpb25hcgog
ICAgIC8vIEZYSU1FOiBUZWFjaCBKU0RpY3Rpb25hcnkgaG93IHRvIHJldHVybiBKU1ZhbHVlcywg
YW5kIHVzZSB0aGF0IHRvIGdldCBoYXNoIGVsZW1lbnQgdmFsdWUuCiAKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBkaWN0aW9uYXJ5LmV4ZWNTdGF0ZSgpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBkaWN0aW9uYXJ5LmluaXRpYWxpemVyT2JqZWN0KCk7CiAKICAgICBJZGVudGlm
aWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJoYXNoIik7CiAK
ICAgICBKU1ZhbHVlIGhhc2ggPSBnZXRQcm9wZXJ0eShleGVjLCBvYmplY3QsICJoYXNoIik7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChoYXNoLmlzVW5kZWZp
bmVkT3JOdWxsKCkpIHsKQEAgLTEzNCwxNiArMTM2LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICB9CiAKICAgICBKU1ZhbHVlIGl2ID0gZ2V0UHJvcGVy
dHkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCksICJpdiIpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9B
bGdvcml0aG1BZXNDYmNQYXJhbXMpOwogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBpdkRhdGE7
Ci0gICAgaWYgKCFjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgaXYsIGl2RGF0
YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1
Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoZXhlYywgaXYsIGl2RGF0YSk7
CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgaWYgKGl2RGF0YS5z
ZWNvbmQgIT0gMTYpIHsKICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0
ZUVycm9yKGV4ZWMsICJBRVMtQ0JDIGluaXRpYWxpemF0aW9uIGRhdGEgbXVzdCBiZSAxNiBieXRl
cyIpKTsKQEAgLTE2OCw3ICsxNzAsNyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bUFlc0tleUdlblBhcmFtcyk7CiAKICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gZ2V0UHJvcGVy
dHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJlc3VsdC0+bGVuZ3RoID0gY29udmVydDx1aW50
MTZfdD4oc3RhdGUsIGxlbmd0aFZhbHVlLCBFbmZvcmNlUmFuZ2UpOwpAQCAtMTg5LDEwICsxOTEs
MTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGlj
dGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAgICAgYXV0
byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobUhtYWNQYXJhbXMpOwogCi0g
ICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNo
UmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5
LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAgIEFTU0VSVF9V
TlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0KTsKIH0KQEAgLTIxMCwxMyArMjEyLDEzIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5KCZzdGF0
ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBD
cnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zKTsKIAotICAgIGlmICghZ2V0SGFzaEFsZ29yaXRo
bShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpSZXF1aXJlZCkp
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nl
c3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5oYXNoLCBIYXNoUmVx
dWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3Vj
Y2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
CiAKICAgICByZXN1bHQtPmhhc0xlbmd0aCA9IGpzRGljdGlvbmFyeS5nZXQoImxlbmd0aCIsIHJl
c3VsdC0+bGVuZ3RoKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwpAQCAtMjM2LDE2ICsyMzgsMTYgQEAgc3RhdGljIFJl
ZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRS
ZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMpOwogCiAgICAgSlNWYWx1ZSBt
b2R1bHVzTGVuZ3RoVmFsdWUgPSBnZXRQcm9wZXJ0eSgmc3RhdGUsIHZhbHVlLmdldE9iamVjdCgp
LCAibW9kdWx1c0xlbmd0aCIpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIC8vIEZJWE1FOiBXaHkgbm8gRW5mb3JjZVJhbmdlPyBGaWxlZCBhcyA8aHR0cHM6Ly93
d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0yMzc3OT4uCiAgICAgcmVzdWx0
LT5tb2R1bHVzTGVuZ3RoID0gY29udmVydDx1aW50MzJfdD4oc3RhdGUsIG1vZHVsdXNMZW5ndGhW
YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgSlNWYWx1ZSBwdWJsaWNFeHBvbmVudFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0
YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgInB1YmxpY0V4cG9uZW50Iik7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPFVpbnQ4QXJyYXk+IHB1YmxpY0V4
cG9uZW50QXJyYXkgPSB0b1VpbnQ4QXJyYXkocHVibGljRXhwb25lbnRWYWx1ZSk7CkBAIC0yNzks
MTMgKzI4MSwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAg
ICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSk7CiAg
ICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRobVJzYU9hZXBQYXJh
bXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5o
YXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNE
aWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIEpTVmFsdWUgbGFiZWxWYWx1
ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHZhbHVlLmdldE9iamVjdCgpLCAibGFiZWwiKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXN1bHQtPmhhc0xhYmVsID0g
IWxhYmVsVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKQEAgLTI5MywxMCArMjk1LDEwIEBAIHN0
YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgbGFiZWxEYXRhOwotICAg
IGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGxhYmVsVmFsdWUsIGxh
YmVsRGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBz
dWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGxhYmVsVmFsdWUs
IGxhYmVsRGF0YSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOwor
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAg
cmVzdWx0LT5sYWJlbC5hcHBlbmQobGFiZWxEYXRhLmZpcnN0LCBsYWJlbERhdGEuc2Vjb25kKTsK
IApAQCAtMzE2LDEwICszMTgsMTAgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzPgogICAgIEpTRGljdGlvbmFyeSBqc0RpY3Rpb25hcnkoJnN0YXRlLCB2YWx1ZS5nZXRP
YmplY3QoKSk7CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IENyeXB0b0FsZ29yaXRo
bVJzYVNzYVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9uYXJ5
LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gZ2V0SGFzaEFs
Z29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpSZXF1
aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlm
ICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcAkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgYm9v
bCBnZXRKU0FycmF5RnJvbUpTT04oRXhlY1N0YXRlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIEpTVmFsdWUgdmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwotICAg
IEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KHZhbHVlKSkgewogICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGFuIGFycmF5IGZvciBc
IiVzXCIgSlNPTiBrZXkiLCAga2V5KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1LDEw
ICs4NSwxMCBAQCBzdGF0aWMgYm9vbCBnZXRTdHJpbmdGcm9tSlNPTihFeGVjU3RhdGUqCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUganNWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUo
ZXhlYywgaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgaWYgKCFqc1ZhbHVlLmdldFN0cmlu
ZyhleGVjLCByZXN1bHQpKSB7CiAgICAgICAgIC8vIENhbiBnZXQgYW4gb3V0IG9mIG1lbW9yeSBl
eGNlcHRpb24uCi0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBl
Y3RlZCBhIHN0cmluZyB2YWx1ZSBmb3IgXCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMDksNyArMTA5LDcgQEAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVh
bkZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVl
IGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50aWZpZXIpOwotICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIGlmICghanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgU3RyaW5nOjpmb3JtYXQoIkV4cGVjdGVkIGEgYm9vbGVhbiB2YWx1ZSBmb3Ig
XCIlc1wiIEpTT04ga2V5IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDgs
NyArMTQ4LDcgQEAgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpKU0NyeXB0b0tleQogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUganNv
blZhbHVlID0gSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoIWpzb25WYWx1ZSB8fCAhanNvblZhbHVlLmlzT2JqZWN0KCkp
IHsKQEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6
cmVjb25jCiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBrZXlPcHMtPmdldEluZGV4KG1f
ZXhlYywgaSk7CiAgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9uOwogICAgICAgICAgICAgaWYg
KCFqc1ZhbHVlLmdldFN0cmluZyhtX2V4ZWMsIG9wZXJhdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sga2V5X29wcyBhdHRyaWJ1dGUgY291bGQgbm90IGJl
IHByb2Nlc3NlZCIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBA
IC0zMjAsNyArMzIwLDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29u
YwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFN0cmluZyBq
d2tVc2VTdHJpbmc7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tl
eURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGtleUJhc2U2NFVSTDsKICAgICBpZiAoIWdl
dFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiayIsIGtleUJhc2U2NFVSTCkp
IHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNj
b3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJTZWNyZXQga2V5IGRhdGEgaXMgbm90IHByZXNlbnQgaXMgSldLIikp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00MjAsNyArNDIwLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIFZlY3Rvcjx1aW50OF90
PiBwcml2YXRlRXhwb25lbnQ7CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgIm4iLCBtb2R1bHVzKSkgewotICAgICAgICBpZiAoIW1f
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJl
cXVpcmVkIEpXSyBcIm5cIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQpAQCAtNDMxLDEzICs0MzEsMTMgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0
b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3Rv
ckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZSIsIGV4cG9uZW50KSkgewotICAgICAg
ICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlJlcXVpcmVkIEpXSyBcImVcIiBtZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJv
bUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJkIiwgbW9kdWx1cykpIHsKLSAgICAgICAgaWYg
KG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVB1YmxpYyhtb2R1bHVzLCBleHBvbmVudCk7CiAgICAgfQpA
QCAtNDQ2LDM4ICs0NDYsMzggQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5
cHRvSwogICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmltZUluZm8gc2Vjb25kUHJp
bWVJbmZvOwogICAgIFZlY3RvcjxDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZv
PiBvdGhlclByaW1lSW5mb3M7CiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04o
bV9leGVjLCBtX2pzb24uZ2V0KCksICJwIiwgZmlyc3RQcmltZUluZm8ucHJpbWVGYWN0b3IpKSB7
Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVsdXMsIGV4cG9u
ZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZl
Y3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAiZHAiLCBmaXJzdFByaW1lSW5mby5m
YWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVBy
aXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAg
aWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJx
Iiwgc2Vjb25kUHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAgICAgICBpZiAobV9leGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9u
ZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsK
ICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIG1f
anNvbi5nZXQoKSwgImRxIiwgc2Vjb25kUHJpbWVJbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewot
ICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4
Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVu
dCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0
b3JGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgInFpIiwgc2Vjb25kUHJpbWVJbmZvLmZh
Y3RvckNSVENvZWZmaWNpZW50KSkgewotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRl
UHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50KTsKICAgICB9CiAKICAg
ICBKU0FycmF5KiBvdGhlclByaW1lSW5mb0pTQXJyYXk7CiAgICAgaWYgKCFnZXRKU0FycmF5RnJv
bUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCksICJvdGgiLCBvdGhlclByaW1lSW5mb0pTQXJyYXkp
KSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2Nv
cGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlV2l0aEFkZGl0aW9u
YWxEYXRhKG1vZHVsdXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQsIGZpcnN0UHJpbWVJbmZv
LCBzZWNvbmRQcmltZUluZm8sIG90aGVyUHJpbWVJbmZvcyk7CiAgICAgfQpAQCAtNDg1LDI0ICs0
ODUsMjQgQEAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXJQcmltZUluZm9KU0FycmF5LT5sZW5ndGgoKTsgKytp
KSB7CiAgICAgICAgIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpQcmltZUluZm8gaW5mbzsK
ICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gb3RoZXJQcmltZUluZm9KU0FycmF5LT5nZXRJbmRl
eChtX2V4ZWMsIGkpOwotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICBpZiAoIWVsZW1lbnQuaXNPYmplY3QoKSkgewogICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJKV0sgXCJvdGhcIiBh
cnJheSBtZW1iZXIgaXMgbm90IGFuIG9iamVjdCIpKTsKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09O
KG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJyIiwgaW5mby5wcmltZUZhY3RvcikpIHsKLSAg
ICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmICgh
c2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IHByaW1lIGZhY3RvciBmb3IgYSBwcmlt
ZSBpbiBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4
ZWMsIGFzT2JqZWN0KGVsZW1lbnQpLCAiZCIsIGluZm8uZmFjdG9yQ1JURXhwb25lbnQpKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0b3IgQ1JUIGV4cG9uZW50IGZv
ciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21K
U09OKG1fZXhlYywgYXNPYmplY3QoZWxlbWVudCksICJ0IiwgaW5mby5mYWN0b3JDUlRDb2VmZmlj
aWVudCkpIHsKLSAgICAgICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgZ2V0IGZhY3RvciBDUlQg
Y29lZmZpY2llbnQgZm9yIGEgcHJpbWUgaW4gXCJvdGhcIiBkaWN0aW9uYXJ5IikpOwogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KQEAgLTUxOSw3ICs1MTksNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvS2V5RGF0YT4gSlNDcnlwdG9LCiAKICAgICBTdHJpbmcgandrS2V5
VHlwZTsKICAgICBpZiAoIWdldFN0cmluZ0Zyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAi
a3R5IiwgandrS2V5VHlwZSkpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1aXJlZCBKV0sgXCJrdHlcIiBt
ZW1iZXIgaXMgbWlzc2luZyIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
NTQ5LDYgKzU0OSw5IEBAIHN0YXRpYyB2b2lkIGJ1aWxkSlNPTkZvck9jdGV0U2VxdWVuY2UoRXgK
IAogc3RhdGljIHZvaWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyhKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMmIGRhdGEsIEpTQzo6SlNPYmpl
Y3QqIHJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGFkZFRvSlNPTihleGVjLCByZXN1bHQs
ICJrdHkiLCAiUlNBIik7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJlc3VsdCwgIm4iLCBiYXNlNjRV
UkxFbmNvZGUoZGF0YS5tb2R1bHVzKCkpKTsKICAgICBhZGRUb0pTT04oZXhlYywgcmVzdWx0LCAi
ZSIsIGJhc2U2NFVSTEVuY29kZShkYXRhLmV4cG9uZW50KCkpKTsKQEAgLTU3MCw5ICs1NzMsOCBA
QCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JSU0FDb21wb25lbnRzKEpTCiAgICAgaWYgKGRhdGEu
b3RoZXJQcmltZUluZm9zKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEpTQXJyYXkqIG90aCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgMCwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBkYXRhLm90aGVyUHJpbWVJbmZv
cygpLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChz
aXplX3QgaSA9IDAsIHNpemUgPSBkYXRhLm90aGVyUHJpbWVJbmZvcygpLnNpemUoKTsgaSA8IHNp
emU7ICsraSkgewogICAgICAgICBKU09iamVjdCoganNQcmltZUluZm8gPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKQEAgLTY5OCw4ICs3MDAsOSBAQCBzdGF0aWMgdm9pZCBhZGRKV0tBbGdv
cml0aG1Ub0pTT04oRXhlY1N0CiBzdGF0aWMgdm9pZCBhZGRVc2FnZXNUb0pTT04oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCoganNvbiwgQ3J5cHRvS2V5VXNhZ2UgdXNhZ2VzKQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTQXJyYXkqIGtleU9wcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKQEAgLTczOCwxMyArNzQxLDEzIEBA
IFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmkKICAgICBKU09iamVjdCog
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CiAKICAgICBhZGRKV0tBbGdvcml0
aG1Ub0pTT04oZXhlYywgcmVzdWx0LCBrZXkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKICAgICBhZGRCb29sVG9KU09OKGV4ZWMsIHJlc3VsdCwgImV4dCIsIGtleS5l
eHRyYWN0YWJsZSgpKTsKIAogICAgIGFkZFVzYWdlc1RvSlNPTihleGVjLCByZXN1bHQsIGtleS51
c2FnZXNCaXRtYXAoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAog
ICAgIGlmIChpczxDcnlwdG9LZXlEYXRhT2N0ZXRTZXF1ZW5jZT4oKmtleURhdGEpKQpAQCAtNzU1
LDcgKzc1OCw3IEBAIFN0cmluZyBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmkKICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiS2V5IGRvZXNu
J3Qgc3VwcG9ydCBleHBvcnRLZXkiKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIHJldHVybiBKU09O
U3RyaW5naWZ5KGV4ZWMsIHJlc3VsdCwgMCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAJKHJldmlzaW9u
IDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudElu
dGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgUmVmUHRyPEVsZW1l
bnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZQogCiAgICAgVk0mIHZtID0gbV9pc29sYXRlZFdv
cmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoIW1fY29uc3RydWN0b3IpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtNzksMTEgKzgwLDEyIEBAIFJlZlB0cjxFbGVtZW50PiBK
U0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIGF1dG8mIHN0YXRlID0gKmNvbnRleHQtPmV4
ZWNTdGF0ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY29uc3RydWN0Q3VzdG9t
RWxlbWVudFN5bmNocm9ub3VzbHkoZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KSwgdm0sIHN0
YXRlLCBtX2NvbnN0cnVjdG9yLmdldCgpLCBsb2NhbE5hbWUpOworICAgIEFTU0VSVF9VTlVTRUQo
c2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IGVsZW1lbnQpOwogICAgIGlmICghZWxlbWVudCkg
ewotICAgICAgICBhdXRvKiBleGNlcHRpb24gPSB2bS5leGNlcHRpb24oKTsKLSAgICAgICAgQVNT
RVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIGlmIChzaG91bGRDbGVhckV4Y2VwdGlvbiA9PSBTaG91
bGRDbGVhckV4Y2VwdGlvbjo6Q2xlYXIpIHsKLSAgICAgICAgICAgIHN0YXRlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgICAgICBhdXRvIGNhdGNoU2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICAgICAgICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGNhdGNoU2NvcGUuZXhjZXB0aW9u
KCk7CisgICAgICAgICAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAg
ICByZXBvcnRFeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24pOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTEwLDcgKzExMiw3IEBAIHN0YXRpYyBSZWZQdHI8RWxlbWVu
dD4gY29uc3RydWN0Q3VzdG9tRWwKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb25Db25zdHJ1
Y3QoJmRvY3VtZW50LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhKTsKICAgICBKU1ZhbHVl
IG5ld0VsZW1lbnQgPSBjb25zdHJ1Y3QoJnN0YXRlLCBjb25zdHJ1Y3RvciwgY29uc3RydWN0VHlw
ZSwgY29uc3RydWN0RGF0YSwgYXJncyk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDYWxsRnVuY3Rpb24oY29va2llLCAmZG9jdW1lbnQpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIEFTU0VSVCghbmV3RWxlbWVudC5pc0VtcHR5KCkpOwpAQCAtMTY2LDcg
KzE2OCw3IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWwKICAgICBB
U1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCAqbV9pc29sYXRlZFdvcmxk
KTsKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0g
ICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVj
dERhdGE7CkBAIC0xODUsNyArMTg3LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6
OnVwZ3JhZGVFbAogCiAgICAgbV9jb25zdHJ1Y3Rpb25TdGFjay5yZW1vdmVMYXN0KCk7CiAKLSAg
ICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgewogICAgICAgICBlbGVtZW50LnNldElzRmFpbGVkQ3VzdG9tRWxlbWVudCgq
dGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgc3RhdGljIEpTT2JqZWN0KiBnZXRDdXN0b21FbGVtZW50Q2FsbGJhYwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgY2FsbGJhY2sg
PSBwcm90b3R5cGUuZ2V0KCZzdGF0ZSwgaWQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoY2FsbGJhY2suaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0
cnk6OmRlZmluZSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQXRvbWljU3Ry
aW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUp
LT50b0F0b21pY1N0cmluZygmc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZhbHVlID0g
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSk7CkBAIC0xMTgsNyArMTE4LDcgQEAgSlNWYWx1ZSBK
U0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgIH0KIAogICAgIEpTVmFsdWUgcHJv
dG90eXBlVmFsdWUgPSBjb25zdHJ1Y3Rvci0+Z2V0KCZzdGF0ZSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgaWYgKCFwcm90b3R5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDdXN0b20gZWxlbWVudCBjb25z
dHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0IGJlIGFuIG9iamVjdCIpKTsKQEAgLTEyOSwyNSArMTI5
LDI1IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0cnk6OmRlZmluZSgKIAogICAgIGlm
IChhdXRvKiBjb25uZWN0ZWRDYWxsYmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0
ZSwgcHJvdG90eXBlT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbm5lY3Rl
ZENhbGxiYWNrIikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRDb25uZWN0ZWRDYWxs
YmFjayhjb25uZWN0ZWRDYWxsYmFjayk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgaWYgKGF1dG8qIGRpc2Nvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3Vz
dG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCAiZGlzY29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJ
bnRlcmZhY2UtPnNldERpc2Nvbm5lY3RlZENhbGxiYWNrKGRpc2Nvbm5lY3RlZENhbGxiYWNrKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXV0
byogYWRvcHRlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90
b3R5cGVPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiYWRvcHRlZENhbGxiYWNr
IikpKQogICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5zZXRBZG9wdGVkQ2FsbGJhY2soYWRvcHRl
ZENhbGxiYWNrKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBhdXRvKiBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2Fs
bGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2spIHsKICAg
ICAgICAgYXV0byB2YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUs
IGNvbnN0cnVjdG9yLT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
Im9ic2VydmVkQXR0cmlidXRlcyIpKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICBl
bGVtZW50SW50ZXJmYWNlLT5zZXRBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0cmlidXRlQ2hh
bmdlZENhbGxiYWNrLCAqdmFsdWUpOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHN0YXRpYyBKU1ZhbHVl
IHdoZW5EZWZpbmVkUHJvbWlzZShFeGVjU3QKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1N0cmluZygmc3RhdGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCF2YWxpZGF0
ZUN1c3RvbUVsZW1lbnROYW1lQW5kVGhyb3dJZk5lZWRlZChzdGF0ZSwgbG9jYWxOYW1lKSkKQEAg
LTE5MSwxMyArMTkxLDE1IEBAIHN0YXRpYyBKU1ZhbHVlIHdoZW5EZWZpbmVkUHJvbWlzZShFeGVj
U3QKIAogSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6d2hlbkRlZmluZWQoRXhlY1N0
YXRlJiBzdGF0ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShzdGF0
ZS52bSgpKTsKKwogICAgIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QgPSAqanNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBh
dXRvJiBwcm9taXNlRGVmZXJyZWQgPSAqSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUs
ICZnbG9iYWxPYmplY3QpOwogICAgIEpTVmFsdWUgcHJvbWlzZSA9IHdoZW5EZWZpbmVkUHJvbWlz
ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB3cmFwcGVkKCkpOwogCi0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAg
ICAgICByZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHByb21pc2VEZWZlcnJlZCk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIHBy
b21pc2VEZWZlcnJlZC5wcm9taXNlKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOSw4ICsxMTksMTEgQEAgU3RyaW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
QwogCiBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3RyaW5nVmll
dyB2aWV3IHsgc3RyaW5nIH07CiAKQEAgLTE4NywxMCArMTkwLDExIEBAIGRvdWJsZSB2YWx1ZVRv
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIAogdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNj
cmlwdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAgICAgRXhjZXB0aW9u
KiBleGNlcHRpb24gPSBqc0R5bmFtaWNDYXN0PEV4Y2VwdGlvbio+KGV4Y2VwdGlvblZhbHVlKTsK
ICAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSBleGVjLT5sYXN0RXhj
ZXB0aW9uKCk7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKICAgICAg
ICAgaWYgKCFleGNlcHRpb24pCiAgICAgICAgICAgICBleGNlcHRpb24gPSBFeGNlcHRpb246OmNy
ZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgRXhjZXB0aW9uOjpEb05vdENhcHR1cmVT
dGFjayk7CiAgICAgfQpAQCAtMjAwLDE1ICsyMDQsMTggQEAgdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKUwogCiB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhj
ZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChl
eGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7
CiAgICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAg
ICAgICByZXR1cm47CiAKICAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52
bSgpKTsKIAogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNr
OjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKLSAgICBleGVjLT5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwogCiAgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5
bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oZ2xvYmFsT2JqZWN0KSkgewpAQCAtMjM5LDggKzI0Niw4
IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKIAogICAgICAgICAv
LyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBp
biB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgogICAgICAgICAvLyByZXBvcnRFeGNlcHRpb24o
KSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgotICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckxhc3RFeGNlcHRpb24o
KTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgdm0uY2xlYXJMYXN0
RXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwpAQCAtMjU2LDggKzI2MywxMCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEV4CiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICBy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKIH0KIApAQCAtMzQxLDcgKzM1MCw3IEBA
IHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIGlmICghZWMgfHwgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKCFlYyB8fCBzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhl
Yywgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYykpOwpAQCAtMzUyLDcgKzM2MSw3
IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiBleGUKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAotICAgIGlmICghZWMuY29kZSB8fCBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoIWVj
LmNvZGUgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRocm93
RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMuY29kZSwg
ZWMubWVzc2FnZSkpOwpAQCAtMzYyLDE1ICszNzEsMTcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqIGV4ZQogCiBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAg
ICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERh
dGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRl
cmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5k
ZWZpbmVkKCk7CkBAIC01MDksNyArNTIwLDcgQEAgc3RhdGljIGlubGluZSBUIHRvU21hbGxlcklu
dChFeGVjU3RhdGUmIAogICAgIH0KIAogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC01NTYsNyArNTY3LDcgQEAgc3RhdGljIGlubGluZSBU
IHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJgogICAgIH0KIAogICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CkBAIC02NDIsMTEgKzY1MywxNCBAQCB1
aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhCiAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKIAogICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5J
bnQzMiwga01heEludDMyKTsKIH0KQEAgLTY3MiwyNyArNjg2LDM2IEBAIHVpbnQzMl90IHRvVUlu
dDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtbG9uZwogdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh2YWx1
ZS5pc1VJbnQzMigpKQogICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKIAogICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtN
YXhVSW50MzIpOwogfQogCiBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVn
ZXIsIGtKU01heEludGVnZXIpOwogfQogCiB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBrSlNNYXhJbnRlZ2VyKTsKIH0KQEAgLTg1NiwyMSArODc5LDIxIEBAIHZvaWQgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXgKIAogdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNz
YWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKIH0KIAogdm9p
ZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBT
dHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1l
c3NhZ2VTdHJpbmcpKTsKIH0KIAogdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CiB7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lvbiAyMDU0
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE0LDcgKzUxNCw3IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjoKICAgICB9CiAKICAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmpl
Y3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBpZiAoZXhl
Yy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmIChsZW5ndGhWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7CkBAIC01MjMsNyArNTIzLDcgQEAgaW5saW5lIEpTQzo6SlNPYmplY3QqIHRv
SlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUlu
dDMyKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJl
dHVybiBvYmplY3Q7CkBAIC01NjYsOCArNTY2LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpCiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7CkBAIC01NzYsOCArNTc5LDEx
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+
PiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXpl
KCkpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmlu
ZWQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKICAg
ICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKQEAgLTY2MSwxNCArNjY3LDE3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2kKIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PiBKU0M6OkpTVmFsdWUganNGcm96ZW5BcnJheShKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiB2ZWN0b3IpIHsKICAgICAgICAgbGlzdC5hcHBlbmQoSlNWYWx1ZVRyYWl0czxUPjo6
YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsK
ICAgICB9CiAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIG51bGxw
dHIsIGdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVj
dG9yRnJlZXplKGV4ZWMsIGFycmF5KTsKIH0KQEAgLTcwOSwzMiArNzE4LDQwIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBOYXRpdmVWYWx1ZVQKIHRlbXBsYXRlPD4gc3RydWN0IE5hdGl2
ZVZhbHVlVHJhaXRzPFN0cmluZz4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIFN0cmluZyYgaW5k
ZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhl
ZFZhbHVlID0ganNWYWx1ZS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgICAgIHJldHVybiAhZXhl
Yy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24oKTsKICAg
ICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czx1bnNpZ25lZD4g
ewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBuYXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIHVuc2lnbmVkJiBpbmRleGVkVmFsdWUpCiAgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRv
VUludDMyKCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAg
ICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4g
c3RydWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGZsb2F0PiB7CiAgICAgc3RhdGljIGlubGluZSBib29s
IG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwg
ZmxvYXQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
ICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9GbG9hdCgmZXhlYyk7Ci0gICAgICAgIHJldHVy
biAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24o
KTsKICAgICB9CiB9OwogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBOYXRpdmVWYWx1ZVRyYWl0czxkb3Vi
bGU+IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBkb3VibGUmIGluZGV4ZWRWYWx1ZSkKICAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUu
dG9OdW1iZXIoJmV4ZWMpOwotICAgICAgICByZXR1cm4gIWV4ZWMuaGFkRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogfTsKIApAQCAtNzcxLDEx
ICs3ODgsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmVjdG9yPFQ+IHRvTmF0aXZlQQogICAg
IH0KIAogICAgIFZlY3RvcjxUPiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJmV4ZWMs
IHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUpIHsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFsdWUsIFsm
cmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUg
anNWYWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgICAgIFQgY29udmVydGVkVmFsdWU7Ci0gICAgICAgIGlmICghTmF0aXZlVmFsdWVUcmFp
dHM8VD46Om5hdGl2ZVZhbHVlKCpzdGF0ZSwganNWYWx1ZSwgY29udmVydGVkVmFsdWUpKQorICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBOYXRpdmVWYWx1ZVRyYWl0czxUPjo6bmF0aXZlVmFsdWUoKnN0
YXRlLCBqc1ZhbHVlLCBjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nv
cGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CiAgICAgfSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUsMTEgKzc1LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVRoaXNUeXAK
IHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQoZXhlY1N0YXRlLT5hcmd1bWVu
dENvdW50KCkgPT0gMik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRlLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGF1dG8gaW50ZXJmYWNlTmFt
ZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0U3RyaW5nKGV4ZWNTdGF0ZSk7
Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1dG8gZnVuY3Rpb25OYW1lID0g
ZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAg
ICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlVHlwZUVycm9y
KGV4ZWNTdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUudXRmOCgp
LmRhdGEoKSwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiB9CiAKQEAgLTg3LDExICs4
OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1ha2VHZXR0ZXJUCiB7CiAgICAg
QVNTRVJUKGV4ZWNTdGF0ZSk7CiAgICAgQVNTRVJUKGV4ZWNTdGF0ZS0+YXJndW1lbnRDb3VudCgp
ID09IDIpOworICAgIFZNJiB2bSA9IGV4ZWNTdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvIGludGVyZmFjZU5hbWUgPSBleGVj
U3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFT
U0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29w
ZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBhdXRvIGF0dHJpYnV0ZU5hbWUgPSBleGVjU3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VS
VCghZXhlY1N0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhlY1N0
YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLnV0ZjgoKS5kYXRh
KCksIGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSkpKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2Jh
bE9iamVjdFRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBSZWY8SlNHbG9iYWxPYmplY3RDYWxsYmFj
az4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fZ2xv
YmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKQEAgLTY0LDcgKzY2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fdGFzay0+cnVuKGV4ZWMpOwotICAgICAgICBBU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwg
IXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwNSw3ICsyMDUsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGl0ZXJhdG9yRm9yRWFjaChK
U0M6CiAgICAgICAgIGFwcGVuZEZvckVhY2hBcmd1bWVudHMoc3RhdGUsIHdyYXBwZXItPmdsb2Jh
bE9iamVjdCgpLCBhcmd1bWVudHMsIHZhbHVlKTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh3
cmFwcGVyKTsKICAgICAgICAgSlNDOjpjYWxsKCZzdGF0ZSwgY2FsbGJhY2ssIGNhbGxUeXBlLCBj
YWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmd1bWVudHMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpT
Qzo6anNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NUHJvbWlzZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwxMSArMTAwLDE0
IEBAIHZvaWQgRGVmZXJyZWRXcmFwcGVyOjpyZWplY3QoRXhjZXB0aW9uQ28KIAogdm9pZCByZWpl
Y3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNQcm9taXNlRGVmZXJyZWQmIHByb21pc2VEZWZl
cnJlZCkKIHsKLSAgICBpZiAoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisg
ICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNWYWx1
ZSBlcnJvciA9IHN0YXRlLmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgIHN0YXRlLmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgSlNWYWx1ZSBlcnJvciA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBEZWZlcnJlZFdyYXBwZXI6OmNy
ZWF0ZSgmc3RhdGUsICZnbG9iYWxPYmplY3QsICZwcm9taXNlRGVmZXJyZWQpLT5yZWplY3QoZXJy
b3IpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJ
KHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTIgKzE1OCwxNSBAQCB2b2lkIHJlamVjdFBy
b21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDCiAKIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFBy
b21pc2VGdW5jdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUg
cHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Byb21pc2VEZWZlcnJlZCop
KQogeworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0ID0gKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKICAgICBKU0M6OkpTUHJvbWlzZURlZmVycmVkJiBwcm9taXNlRGVmZXJyZWQg
PSAqSlNDOjpKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7
CiAgICAgcHJvbWlzZUZ1bmN0aW9uKCZzdGF0ZSwgJnByb21pc2VEZWZlcnJlZCk7CiAKICAgICBy
ZWplY3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KHN0YXRlLCBnbG9iYWxPYmplY3QsIHByb21p
c2VEZWZlcnJlZCk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNT
RVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gcHJvbWlz
ZURlZmVycmVkLnByb21pc2UoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTQgQEAgYm9vbCBKU0RPTVN0cmluZ01hcDo6ZGVs
ZXRlUHJvcGVydHlCeUluZAogCiBib29sIEpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZShFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1
dFByb3BlcnR5U2xvdCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlm
IChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
U3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDEzICsxOTcsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgY2FsbCgpCiAgICAgewogICAgICAgICBSZWY8SlNET01XaW5kb3dN
aWNyb3Rhc2tDYWxsYmFjaz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fZ2xvYmFsT2JqZWN0LT52bSgpKTsKKyAgICAgICAgVk0mIHZtID0gbV9nbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICAgICAgSlNNYWlu
VGhyZWFkRXhlY1N0YXRlOjpydW5UYXNrKGV4ZWMsIG1fdGFzayk7CiAKLSAgICAgICAgQVNTRVJU
KCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDkgQEAgYm9vbCBKU0RPTVdpbmRvdzo6cHJl
dmVudEV4dGVuc2lvbnMoSlNPYgogCiB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAjaWYgRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3aWRnZXRz
LCBtYWtlICJ2YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRlCiAgICAg
Ly8gYSBwcm9wZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5h
dmlnYXRpb24gKDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCkBAIC0zODIsNyArMzg1LDcgQEAg
dm9pZCBKU0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlJgogI2VuZGlmCiAKICAgICBT
dHJpbmcgbG9jYXRpb25TdHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoTG9jYXRpb24qIGxv
Y2F0aW9uID0gd3JhcHBlZCgpLmxvY2F0aW9uKCkpCkBAIC00MDYsMTUgKzQwOSwxOCBAQCBKU1Zh
bHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUmIHN0CiAKIEpTVmFsdWUgSlNET01XaW5k
b3c6Om9wZW4oRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyB1
cmxTdHJpbmcgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICBKU1ZhbHVlIHRhcmdldFZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CiAg
ICAgQXRvbWljU3RyaW5nIHRhcmdldCA9IHRhcmdldFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkg
PyBBdG9taWNTdHJpbmcoIl9ibGFuayIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpIDogdGFyZ2V0VmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dG9BdG9taWNTdHJpbmcoJnN0YXRl
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5n
IHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cg
PSB3cmFwcGVkKCkub3Blbih1cmxTdHJpbmcsIHRhcmdldCwgd2luZG93RmVhdHVyZXNTdHJpbmcs
IGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpLCBmaXJzdERPTVdpbmRvdygmc3RhdGUpKTsKQEAgLTQ3
MCwxMCArNDc2LDEwIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGUK
ICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZh
bHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFN0
cmluZyBkaWFsb2dGZWF0dXJlc1N0cmluZyA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JO
dWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKHN0YXRl
KTsKQEAgLTUxMSwxNiArNTE3LDE2IEBAIHN0YXRpYyBKU1ZhbHVlIGhhbmRsZVBvc3RNZXNzYWdl
KERPTVdpbmQKICAgICAgICAgfQogICAgICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwg
c3RhdGUuYXJndW1lbnQodHJhbnNmZXJhYmxlc0FyZ0luZGV4KSwgbWVzc2FnZVBvcnRzLCBhcnJh
eUJ1ZmZlcnMpOwogICAgIH0KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLCAmbWVzc2FnZVBvcnRzLCAmYXJyYXlC
dWZmZXJzKTsKIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIFN0cmluZyB0YXJnZXRPcmlnaW4gPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQodGFyZ2V0T3JpZ2luQXJn
SW5kZXgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU0NSw3ICs1NTEsNyBAQCBKU1ZhbHVlIEpTRE9N
V2luZG93OjpzZXRUaW1lb3V0KEV4ZWNTdGF0CiAKICAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kq
IGNvbnRlbnRTZWN1cml0eVBvbGljeSA9IHdyYXBwZWQoKS5kb2N1bWVudCgpID8gd3JhcHBlZCgp
LmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpIDogbnVsbHB0cjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLT53b3JsZCgpLCBjb250ZW50U2VjdXJpdHlQb2xp
Y3kpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlm
ICghYWN0aW9uKQpAQCAtNTcwLDcgKzU3Niw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldElu
dGVydmFsKEV4ZWNTdGEKIAogICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3Vy
aXR5UG9saWN5ID0gd3JhcHBlZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+
Y29udGVudFNlY3VyaXR5UG9saWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
Y2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwg
Z2xvYmFsT2JqZWN0KCktPndvcmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGludCBkZWxheSA9IHN0YXRl
LmFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCwxMSArNTgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25z
dHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIGRvdWJsZSBzdGFydFRpbWUo
ZXhlYy51bmNoZWNrZWRBcmd1bWVudCgwKS50b051bWJlcigmZXhlYykpOwotICAgIGlmIChVTkxJ
S0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgZG91YmxlIGVuZFRpbWUoZXhlYy51bmNoZWNrZWRBcmd1bWVudCgxKS50b051bWJlcigm
ZXhlYykpOwotICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTg3LDcgKzg3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgIGlmICh2YWx1
ZUFyZ3VtZW50LmlzQ2VsbCgpICYmIHZhbHVlQXJndW1lbnQuYXNDZWxsKCktPmluaGVyaXRzKHN0
ZDo6cmVtb3ZlX3BvaW50ZXI8SlNBcnJheUJ1ZmZlcio+Ojp0eXBlOjppbmZvKCkpKSB7CiAKICAg
ICAgICAgQXJyYXlCdWZmZXIqIGRhdGEgPSB0b0FycmF5QnVmZmVyKHZhbHVlQXJndW1lbnQpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghZGF0YSkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZlbnRDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNl
TW90aW9uRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsMzIgKzQ3LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6QWNj
ZWxlcmEKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0
aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVjdCogb2JqZWN0ID0g
dmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpTVmFsdWUgeFZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgIngi
KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJv
dmlkZVggPSAheFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHggPSB4VmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBKU1ZhbHVlIHlWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmc3RhdGUsICJ5IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBib29sIGNhblByb3ZpZGVZID0gIXlWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
OwogICAgIGRvdWJsZSB5ID0geVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSB6VmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieiIpKTsKLSAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWiA9ICF6VmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgeiA9IHpWYWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICgh
Y2FuUHJvdmlkZVggJiYgIWNhblByb3ZpZGVZICYmICFjYW5Qcm92aWRlWikKQEAgLTg2LDMyICs4
OSwzNSBAQCBzdGF0aWMgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OlJvdGF0aW9uCiAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICAvLyBHaXZlbiB0aGUgYWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5
cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0
KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBKU1ZhbHVlIGFscGhhVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYWxwaGEiKSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZUFs
cGhhID0gIWFscGhhVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYWxwaGEg
PSBhbHBoYVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBiZXRhVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYmV0YSIpKTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQmV0YSA9ICFiZXRhVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKTsKICAgICBkb3VibGUgYmV0YSA9IGJldGFWYWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTVmFsdWUgZ2FtbWFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJnYW1tYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlR2FtbWEgPSAhZ2FtbWFWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpOwogICAgIGRvdWJsZSBnYW1tYSA9IGdhbW1hVmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWNhblBy
b3ZpZGVBbHBoYSAmJiAhY2FuUHJvdmlkZUJldGEgJiYgIWNhblByb3ZpZGVHYW1tYSkKQEAgLTE3
Miw2ICsxNzgsOSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmludGVydmFsKEV4CiAK
IEpTVmFsdWUgSlNEZXZpY2VNb3Rpb25FdmVudDo6aW5pdERldmljZU1vdGlvbkV2ZW50KEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBjb25zdCBTdHJpbmcgdHlwZSA9IHN0
YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7CiAgICAgYm9v
bCBidWJibGVzID0gc3RhdGUuYXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgYm9v
bCBjYW5jZWxhYmxlID0gc3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CkBAIC0x
NzksMTUgKzE4OCwxNSBAQCBKU1ZhbHVlIEpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VN
CiAgICAgLy8gSWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBudWxsIG9yIHVuZGVmaW5lZCwg
bWFyayB0aGVtIGFzIG5vdCBwcm92aWRlZC4KICAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgc3Rh
bmRhcmQgSmF2YVNjcmlwdCBjb252ZXJzaW9uLgogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRh
OjpBY2NlbGVyYXRpb24+IGFjY2VsZXJhdGlvbiA9IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChz
dGF0ZS5hcmd1bWVudCgzKSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYXRpb24+
IGFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkgPSByZWFkQWNjZWxlcmF0aW9uQXJndW1lbnQo
c3RhdGUuYXJndW1lbnQoNCksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBSZWZQdHI8RGV2aWNlTW90aW9uRGF0YTo6Um90YXRpb25SYXRl
PiByb3RhdGlvblJhdGUgPSByZWFkUm90YXRpb25SYXRlQXJndW1lbnQoc3RhdGUuYXJndW1lbnQo
NSksIHN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBib29sIGludGVydmFsUHJvdmlkZWQgPSAhc3RhdGUuYXJndW1lbnQoNikuaXNVbmRlZmlu
ZWRPck51bGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW9u
YXJ5Ojp0cnlHZXRQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUmIGZp
bmFsUmVzdWx0KSBjb25zdAogeworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CiAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhtX2V4
ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgYm9vbCBwcm9wZXJ0eUZvdW5kID0gbV9pbml0aWFsaXpl
ck9iamVjdC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgWyZdIChi
b29sIHByb3BlcnR5Rm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gYm9vbCB7CkBAIC04Niw3
ICs4OCw3IEBAIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW8KICAgICAg
ICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0pOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb25UaHJvd247CiAgICAgcmV0dXJuIHByb3BlcnR5Rm91bmQgPyBQcm9wZXJ0eUZvdW5k
IDogTm9Qcm9wZXJ0eUZvdW5kOwogfQpAQCAtMTUxLDE3ICsxNTMsMjAgQEAgdm9pZCBKU0RpY3Rp
b25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdAogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxTdHJpbmc+JiByZXN1
bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZSgqZXhlYywgdmFsdWUs
IGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtVmFsdWUg
PSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTIyMSw2ICsyMjYsOSBAQCB2b2lkIEpTRGljdGlvbmFy
eTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBy
ZXN1bHQpCiB7CiAgICAgQVNTRVJUKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgcmVzdWx0LmNs
ZWFyKCk7CiAKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTIyOCwxMiAr
MjM2LDEyIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIAogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5j
ZSgqZXhlYywgdmFsdWUsIGxlbmd0aCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNW
YWx1ZSBpdGVtVmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXN1bHQuYWRkKGl0ZW1WYWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwogICAgIH0KQEAgLTI5NywxNyArMzA1LDIwIEBAIHZv
aWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoSlNDOjpFeGUKIHZvaWQgSlNEaWN0aW9uYXJ5
Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8UmVm
UHRyPE1lZGlhU3RyZWFtPj4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9K
U1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBzdHJlYW0gPSBK
U01lZGlhU3RyZWFtOjp0b1dyYXBwZWQoaXRlbVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjAz
LDYgKzIwMyw5IEBAIGlubGluZSBib29sIEpTRGljdGlvbmFyeTo6Z2V0KGNvbnN0IGNoYXIKIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSZXN1bHQ+CiBKU0RpY3Rpb25hcnk6OkdldFBy
b3BlcnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQoY29uc3Qg
Y2hhciogcHJvcGVydHlOYW1lLCBUKiBjb250ZXh0LCB2b2lkICgqc2V0dGVyKShUKiBjb250ZXh0
LCBjb25zdCBSZXN1bHQmKSkgY29uc3QKIHsKKyAgICBKU0M6OlZNJiB2bSA9IG1fZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0M6
OkpTVmFsdWUgdmFsdWU7CiAgICAgR2V0UHJvcGVydHlSZXN1bHQgZ2V0UHJvcGVydHlSZXN1bHQg
PSB0cnlHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICBzd2l0Y2ggKGdldFBy
b3BlcnR5UmVzdWx0KSB7CkBAIC0yMTIsNyArMjE1LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9w
ZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAgICBjb252
ZXJ0VmFsdWUobV9leGVjLCB2YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9leGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CiAKICAgICAgICAgc2V0dGVyKGNv
bnRleHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Mywx
NiArMTUzLDE2IEBAIEpTVmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dCgKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuYXJndW1lbnRDb3VudCgpIDwgNCkpCiAgICAgICAgIHJldHVy
biB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcigmc3RhdGUpKTsKICAgICBhdXRvIGNvbnRleHRJZCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBhdXRvIG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8aW50
MzJfdD4oc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMyksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gd3JhcHBl
ZCgpLmdldENTU0NhbnZhc0NvbnRleHQoV1RGTW92ZShjb250ZXh0SWQpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNyArNzksMTIgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc0pTRXhlY3V0aW9uRm9yYmlkZGVuKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCkpOwor
ICAgIFZNJiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KyAgICAvLyBTZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkaXNwYXRjaGluZy1ldmVu
dHMgc3BlYyBvbiBjYWxsaW5nIGhhbmRsZUV2ZW50LgorICAgIC8vICJJZiB0aGlzIHRocm93cyBh
biBleGNlcHRpb24sIHJlcG9ydCB0aGUgZXhjZXB0aW9uLiIgSXQgc2hvdWxkIG5vdCBwcm9wYWdh
dGUgdGhlCisgICAgLy8gZXhjZXB0aW9uLgogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0
aGlzLT5qc0Z1bmN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5j
dGlvbikKQEAgLTEwOSw2ICsxMTQsMTQgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdAogICAgIC8vIElmIGpzRnVuY3Rpb24gaXMgbm90IGFjdHVhbGx5IGEgZnVuY3Rp
b24sIHNlZSBpZiBpdCBpbXBsZW1lbnRzIHRoZSBFdmVudExpc3RlbmVyIGludGVyZmFjZSBhbmQg
dXNlIHRoYXQKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpIHsKICAgICAgICAg
aGFuZGxlRXZlbnRGdW5jdGlvbiA9IGpzRnVuY3Rpb24tPmdldChleGVjLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJoYW5kbGVFdmVudCIpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBz
Y29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisK
KyAgICAgICAgICAgIGV2ZW50LT50YXJnZXQoKS0+dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFu
ZGxlcigpOworICAgICAgICAgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgY2FsbFR5cGUgPSBnZXRDYWxs
RGF0YShoYW5kbGVFdmVudEZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgfQogCkBAIC0xMjEsNyAr
MTM0LDYgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdAogICAgICAg
ICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7CiAgICAg
ICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKIAotICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIFZNRW50cnlTY29wZSBlbnRyeVNjb3Bl
KHZtLCB2bS5lbnRyeVNjb3BlID8gdm0uZW50cnlTY29wZS0+Z2xvYmFsT2JqZWN0KCkgOiBnbG9i
YWxPYmplY3QpOwogCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29r
aWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbkNhbGwoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgY2FsbFR5cGUsIGNhbGxEYXRhKTsKQEAgLTEzOCw3ICsxNTAsNyBA
QCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAKICAgICAgICAgaWYg
KGlzPFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpIHsKICAgICAg
ICAgICAgIGF1dG8gc2NyaXB0Q29udHJvbGxlciA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3Bl
Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2NyaXB0KCk7Ci0gICAgICAgICAgICBib29sIHRl
cm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKGV4ZWMtPmV4Y2VwdGlvbigpKSk7CisgICAgICAgICAg
ICBib29sIHRlcm1pbmF0b3JDYXVzZWRFeGNlcHRpb24gPSAoc2NvcGUuZXhjZXB0aW9uKCkgJiYg
aXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHNjb3BlLmV4Y2VwdGlvbigpKSk7CiAgICAg
ICAgICAgICBpZiAodGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiB8fCBzY3JpcHRDb250cm9sbGVy
LT5pc1Rlcm1pbmF0aW5nRXhlY3V0aW9uKCkpCiAgICAgICAgICAgICAgICAgc2NyaXB0Q29udHJv
bGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRmlsZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsNyArNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
CiAKICAgICB1bnNpZ25lZCBibG9iUGFydHNMZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBibG9i
UGFydHMgPSB0b0pTU2VxdWVuY2UoZXhlYywgYXJnLCBibG9iUGFydHNMZW5ndGgpOwotICAgIGlm
IChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
QVNTRVJUKGJsb2JQYXJ0cyk7CiAKQEAgLTY5LDcgKzY5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVF
cnJvcihleGVjLCBzY29wZSwgMSwgImZpbGVuYW1lIiwgIkZpbGUiLCBudWxscHRyLCAiRE9NU3Ry
aW5nIik7CiAKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBhcmcudG9XVEZTdHJpbmcoJmV4ZWMpLnJl
cGxhY2UoJy8nLCAnOicpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgbm9ybWFsaXplZFR5cGU7CkBAIC04Nyw3
ICs4Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICAg
ICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAgICAgICAgIFN0cmluZyB0
eXBlOwogICAgICAgICBkaWN0aW9uYXJ5LmdldCgidHlwZSIsIHR5cGUpOwotICAgICAgICBpZiAo
ZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICAgICAgbm9ybWFsaXplZFR5cGUgPSBCbG9iOjpub3JtYWxpemVkQ29udGVudFR5cGUo
dHlwZSk7CkBAIC05NSw3ICs5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0SlMKICAgICAgICAgLy8gT25seSB0cnkgdG8gcGFyc2UgdGhlIGxhc3RNb2RpZmllZCBk
YXRlIGlmIHRoZXJlIHdhcyBub3QgYW4gaW52YWxpZCB0eXBlIGFyZ3VtZW50LgogICAgICAgICBp
ZiAodHlwZS5pc0VtcHR5KCkgfHwgICFub3JtYWxpemVkVHlwZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJsYXN0TW9kaWZpZWQiLCBsYXN0TW9kaWZpZWQpOwotICAg
ICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDcsNyArMTA3LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJsb2JQYXJ0c0xlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgaXRlbSA9IGJsb2JQYXJ0cy0+Z2V0KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
ICAgIGlmIChBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKGl0ZW0pKQpA
QCAtMTE4LDcgKzExOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0
SlMKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChibG9iKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBTdHJpbmcgc3RyaW5nID0gaXRlbS50b1dURlN0cmluZygmZXhlYyk7Ci0g
ICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIGJsb2JCdWlsZGVyLmFwcGVuZChz
dHJpbmcsIEFTQ0lJTGl0ZXJhbCgidHJhbnNwYXJlbnQiKSk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0dlb2xv
Y2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOSBAQCBzdGF0aWMg
dm9pZCBzZXRNYXhpbXVtQWdlKFBvc2l0aW9uT3B0aW9uCiAKIHN0YXRpYyBSZWZQdHI8UG9zaXRp
b25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgb3B0aW9ucy4K
ICAgICBhdXRvIG9wdGlvbnMgPSBQb3NpdGlvbk9wdGlvbnM6OmNyZWF0ZSgpOwogCkBAIC04Miw3
ICs4NSw3IEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MKIAogICAg
IC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVj
dC4KICAgICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNT
RVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNj
b3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFwcGVy
IGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFy
eShleGVjLCBvYmplY3QpOwpAQCAtOTksMTkgKzEwMiwyMiBAQCBzdGF0aWMgUmVmUHRyPFBvc2l0
aW9uT3B0aW9ucz4gY3JlYXRlUG9zCiAKIEpTVmFsdWUgSlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVu
dFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyBBcmd1
bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxsYmFjayA9
IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7CiAKICAg
ICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNr
PEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5h
cmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dOdWxsKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBhdXRvIHBv
c2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRlLmFyZ3Vt
ZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
QVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKQEAgLTEyMSwxOSArMTI3LDIyIEBAIEpTVmFsdWUg
SlNHZW9sb2NhdGlvbjo6Z2V0Q3VycmVudFBvc2l0aW8KIAogSlNWYWx1ZSBKU0dlb2xvY2F0aW9u
Ojp3YXRjaFBvc2l0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAv
LyBBcmd1bWVudHM6IFBvc2l0aW9uQ2FsbGJhY2ssIChvcHRpb25hbClQb3NpdGlvbkVycm9yQ2Fs
bGJhY2ssIChvcHRpb25hbClQb3NpdGlvbk9wdGlvbnMKIAogICAgIGF1dG8gcG9zaXRpb25DYWxs
YmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrPEpTUG9zaXRpb25DYWxsYmFjaz4oJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgc3RhdGUuYXJndW1lbnQoMCkpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25DYWxsYmFjayk7
CiAKICAgICBhdXRvIHBvc2l0aW9uRXJyb3JDYWxsYmFjayA9IGNyZWF0ZUZ1bmN0aW9uT25seUNh
bGxiYWNrPEpTUG9zaXRpb25FcnJvckNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBz
dGF0ZS5hcmd1bWVudCgxKSwgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCB8IENhbGxiYWNrQWxsb3dO
dWxsKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBh
dXRvIHBvc2l0aW9uT3B0aW9ucyA9IGNyZWF0ZVBvc2l0aW9uT3B0aW9ucygmc3RhdGUsIHN0YXRl
LmFyZ3VtZW50KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgQVNTRVJUKHBvc2l0aW9uT3B0aW9ucyk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBzdGF0
aWMgSlNWYWx1ZSBuYW1lZEl0ZW1zKEV4ZWNTdGF0ZSYgc3RhCiAvLyBIVE1MQWxsQ29sbGVjdGlv
bnMgYXJlIHN0cmFuZ2Ugb2JqZWN0cywgdGhleSBzdXBwb3J0IGJvdGggZ2V0IGFuZCBjYWxsLgog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhUTUxBbGxDb2xsZWN0aW9u
KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogCkBAIC02NSw3ICs2OCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGwKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09IDEpIHsKICAgICAgICAg
Ly8gU3VwcG9ydCBmb3IgZG9jdW1lbnQuYWxsKDxpbmRleD4pIGV0Yy4KICAgICAgICAgU3RyaW5n
IHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBh
cnNlSW5kZXgoKnN0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0b0pTKGV4ZWMsIGpzQ29sbGVjdGlvbi0+Z2xvYmFsT2JqZWN0KCksIGNvbGxlY3Rpb24u
aXRlbShpbmRleC52YWx1ZSgpKSkpOwpAQCAtNzYsNyArNzksNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBUaGUgc2Vjb25kIGFyZywgaWYgc2V0
LCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudAogICAgIFN0cmluZyBzdHJpbmcgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgoKmV4ZWMtPmFyZ3VtZW50KDEp
LnRvV1RGU3RyaW5nKGV4ZWMpLmltcGwoKSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGl0ZW0gPSBj
b2xsZWN0aW9uLm5hbWVkSXRlbVdpdGhJbmRleChzdHJpbmcsIGluZGV4LnZhbHVlKCkpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMiArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShXRUJHTCkK
IHN0YXRpYyB2b2lkIGdldDNEQ29udGV4dEF0dHJpYnV0ZXMoRXhlY1N0YXRlJiBzdGF0ZSwgUmVm
UHRyPENhbnZhc0NvbnRleHRBdHRyaWJ1dGVzPiYgYXR0cnMpCiB7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBKU1ZhbHVlIGluaXRpYWxpemVyVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBpZiAo
aW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2JqZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50
b09iamVjdCgmc3RhdGUpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAg
IEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnkoJnN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CiAgICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgZ3JhcGhpY3NBdHRyczsKQEAgLTgzLDcgKzg2LDcg
QEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogI2lmIEVOQUJMRShX
RUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNvbnRleHRJZCkpIHsK
ICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMpOwotICAgICAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAjZW5k
aWYKQEAgLTExMCwxNCArMTEzLDE0IEBAIEpTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6cHJv
YmFibHlTdXAKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMgPSB3cmFwcGVkKCk7CiAg
ICAgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1dURlN0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAKICAgICBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+IGF0dHJzOwog
I2lmIEVOQUJMRShXRUJHTCkKICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQ6OmlzM2RUeXBlKGNv
bnRleHRJZCkpIHsKICAgICAgICAgZ2V0M0RDb250ZXh0QXR0cmlidXRlcyhzdGF0ZSwgYXR0cnMp
OwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
ICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVs
ZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgsNyArNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpT
CiAgICAgaWYgKCFlbGVtZW50SW50ZXJmYWNlLT5pc1VwZ3JhZGluZ0VsZW1lbnQoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUgPSBnZXRET01TdHJ1Y3R1cmU8SlNIVE1MRWxl
bWVudD4odm0sICpnbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvKiBuZXdFbGVtZW50U3RydWN0
dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoJmV4ZWMsIG5l
d1RhcmdldFZhbHVlLCBiYXNlU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICAgICBSZWY8SFRNTEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudDo6Y3JlYXRlKGVs
ZW1lbnRJbnRlcmZhY2UtPm5hbWUoKSwgZG9jdW1lbnQpOwpAQCAtOTgsMTIgKzk4LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAgICBBU1NFUlQoZWxlbWVu
dFdyYXBwZXJWYWx1ZS5pc09iamVjdCgpKTsKIAogICAgIEpTVmFsdWUgbmV3UHJvdG90eXBlID0g
bmV3VGFyZ2V0LT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0gICAg
aWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEpTT2JqZWN0KiBlbGVtZW50V3JhcHBlck9iamVjdCA9IGFzT2JqZWN0KGVsZW1lbnRXcmFw
cGVyVmFsdWUpOwogICAgIEpTT2JqZWN0OjpzZXRQcm90b3R5cGUoZWxlbWVudFdyYXBwZXJPYmpl
Y3QsICZleGVjLCBuZXdQcm90b3R5cGUsIHRydWUgLyogc2hvdWxkVGhyb3dJZkNhbnRTZXQgKi8p
OwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaWRVcGdyYWRlTGFzdEVsZW1lbnRJbkNvbnN0
cnVjdGlvblN0YWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SGlzdG9yeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE4ICs2
MywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cHVzaFN0YXRlKEV4ZWNTdGF0ZSYgCiAgICAgICAg
IHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwg
MCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
Ly8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5nIHRpdGxl
ID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsKICAgICAg
ICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC05NywxOCArOTcsMTggQEAg
SlNWYWx1ZSBKU0hpc3Rvcnk6OnJlcGxhY2VTdGF0ZShFeGVjU3RhdAogICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGhpc3RvcnlTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksIDAsIDApOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIEZJWE1F
OiB0aXRsZSBzaG91bGQgbm90IGJlIG51bGxhYmxlLgogICAgIFN0cmluZyB0aXRsZSA9IHZhbHVl
VG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgIHVybCA9
IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIEpTVmFsdWUgSlNJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5n
IG5hbWUgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEpTVmFs
dWUgb3B0aW9uc1ZhbHVlID0gc3RhdGUuYXJndW1lbnQoMSk7CkBAIC02NiwxNyArNjYsMTcgQEAg
SlNWYWx1ZSBKU0lEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgIGJvb2wgYXV0b0lu
Y3JlbWVudCA9IGZhbHNlOwogICAgIGlmICghb3B0aW9uc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKICAgICAgICAgSlNWYWx1ZSBrZXlQYXRoVmFsdWUgPSBvcHRpb25zVmFsdWUuZ2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJrZXlQYXRoIikpOwotICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAg
ICBpZiAoIWtleVBhdGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICBr
ZXlQYXRoID0gaWRiS2V5UGF0aEZyb21WYWx1ZShzdGF0ZSwga2V5UGF0aFZhbHVlKTsKLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvSW5jcmVtZW50ID0gb3B0aW9uc1ZhbHVlLmdl
dCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYXV0b0luY3JlbWVudCIp
KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMYXp5RXZlbnRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDkgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVu
ZXI6OmluaXRpYWxpegogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKQEAgLTExMiw5ICsxMTUsOSBAQCBKU09iamVjdCog
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgICAgIGV4ZWMsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgYXJncywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBtX2Z1
bmN0aW9uTmFtZSksCiAgICAgICAgIG1fc291cmNlVVJMLCBtX3NvdXJjZVBvc2l0aW9uLCBvdmVy
cmlkZUxpbmVOdW1iZXIpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRDdXJyZW50
RXhjZXB0aW9uKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKQEAgLTEyMywxNCArMTI2LDEzIEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjpp
bml0aWFsaXoKICAgICBpZiAobV9vcmlnaW5hbE5vZGUpIHsKICAgICAgICAgaWYgKCF3cmFwcGVy
KCkpIHsKICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0ICdub2RlJyBoYXMgYSBKYXZhU2NyaXB0
IHdyYXBwZXIgdG8gbWFyayB0aGUgZXZlbnQgbGlzdGVuZXIgd2UncmUgY3JlYXRpbmcuCi0gICAg
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgcGFzcyB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUKLSAg
ICAgICAgICAgIHNldFdyYXBwZXIoZXhlYy0+dm0oKSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsICptX29yaWdpbmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXIodm0s
IGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCAqbV9vcmlnaW5hbE5vZGUpKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBBZGQgdGhlIGV2ZW50J3MgaG9tZSBlbGVtZW50IHRvIHRo
ZSBzY29wZQogICAgICAgICAvLyAoYW5kIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBmb3JtIC0gc2Vl
IEpTSFRNTEVsZW1lbnQ6OmV2ZW50SGFuZGxlclNjb3BlKQotICAgICAgICBsaXN0ZW5lckFzRnVu
Y3Rpb24tPnNldFNjb3BlKGV4ZWMtPnZtKCksIGpzQ2FzdDxKU05vZGUqPih3cmFwcGVyKCkpLT5w
dXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zY29wZSgpKSk7
CisgICAgICAgIGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUodm0sIGpzQ2FzdDxKU05vZGUq
Pih3cmFwcGVyKCkpLT5wdXNoRXZlbnRIYW5kbGVyU2NvcGUoZXhlYywgbGlzdGVuZXJBc0Z1bmN0
aW9uLT5zY29wZSgpKSk7CiAgICAgfQogICAgIHJldHVybiBqc0Z1bmN0aW9uOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmgJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTEgKzEwNywxNCBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGxpbmtBbmRFdmFsdWF0ZU1vZHVsZShK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpT
Qzo6SlNWYWx1ZSBpbml0aWF0b3IsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRF
eGNlcHRpb24pCiAgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICAKICAgICAgICAg
SlNNYWluVGhyZWFkRXhlY1N0YXRlIGN1cnJlbnRTdGF0ZShleGVjKTsKICAgICAgICAgSlNDOjpK
U1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUoZXhlYywgbW9k
dWxlS2V5LCBpbml0aWF0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gZXhlYy0+dm0oKS5leGNlcHRpb24oKTsK
LSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0g
c2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CkBAIC0xMzEsOCArMTM0LDEwIEBAIHByaXZhdGU6CiAKICAg
ICB+SlNNYWluVGhyZWFkRXhlY1N0YXRlKCkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c19tYWluVGhyZWFkU3RhdGUtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAg
QVNTRVJUKCFzX21haW5UaHJlYWRTdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIGJvb2wgZGlk
RXhpdEphdmFTY3JpcHQgPSBzX21haW5UaHJlYWRTdGF0ZSAmJiAhbV9wcmV2aW91c1N0YXRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZl
bnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsx
MDQsOSBAQCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAKIHN0YXRp
YyBKU0M6OkpTVmFsdWUgaGFuZGxlSW5pdE1lc3NhZ2VFdmVudChKU01lc3NhZ2VFdmVudCoganNF
dmVudCwgSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3Qg
U3RyaW5nJiB0eXBlQXJnID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKICAgICBib29sIGNhbkJ1YmJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50KDEpLnRv
Qm9vbGVhbigmc3RhdGUpOwogICAgIGJvb2wgY2FuY2VsYWJsZUFyZyA9IHN0YXRlLmFyZ3VtZW50
KDIpLnRvQm9vbGVhbigmc3RhdGUpOwpAQCAtMTE2LDE2ICsxMTksMTYgQEAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZQogICAgICAgICBtZXNzYWdlUG9ydHMgPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lc3NhZ2VQb3J0QXJyYXk+KCk7CiAgICAgICAgIGFycmF5QnVmZmVycyA9
IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlCdWZmZXJBcnJheT4oKTsKICAgICAgICAgZmlsbE1lc3Nh
Z2VQb3J0QXJyYXkoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDcpLCAqbWVzc2FnZVBvcnRzLCAqYXJy
YXlCdWZmZXJzKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgfQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcoc3Rh
dGUudm0oKSwgc3RhdGUuYXJndW1lbnQoMykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBkYXRhQXJnKHZtLCBzdGF0ZS5hcmd1bWVu
dCgzKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBNZXNzYWdlRXZlbnQmIGV2ZW50ID0ganNFdmVudC0+
d3JhcHBlZCgpOwogICAgIGV2ZW50LmluaXRNZXNzYWdlRXZlbnQodHlwZUFyZywgY2FuQnViYmxl
QXJnLCBjYW5jZWxhYmxlQXJnLCBkYXRhQXJnLCBvcmlnaW5BcmcsIGxhc3RFdmVudElkQXJnLCBz
b3VyY2VBcmcsIFdURk1vdmUobWVzc2FnZVBvcnRzKSk7Ci0gICAganNFdmVudC0+bV9kYXRhLnNl
dChzdGF0ZS52bSgpLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7CisgICAganNFdmVudC0+
bV9kYXRhLnNldCh2bSwganNFdmVudCwgZGF0YUFyZy5qc1ZhbHVlKCkpOwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDEyICs3MywxMiBAQCB2b2lkIGZpbGxNZXNzYWdlUG9ydEFycmF5KEpTQzo6RXhl
Y1N0YXRlCiAgICAgLy8gVmFsaWRhdGlvbiBvZiBzZXF1ZW5jZSB0eXBlcywgcGVyIFdlYklETCBz
cGVjIDQuMS4xMy4KICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwogICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSB0b0pTU2VxdWVuY2Uoc3RhdGUsIHZhbHVlLCBsZW5ndGgpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGkpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8vIFZhbGlkYXRp
b24gb2Ygbm9uLW51bGwgb2JqZWN0cywgcGVyIEhUTUw1IHNwZWMgMTAuMy4zLgogICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uaAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
QXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5OwogICAgICAgICBmaWxsTWVzc2FnZVBv
cnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSksIHBvcnRBcnJheSwgYXJyYXlCdWZmZXJB
cnJheSk7CiAgICAgICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCksICZwb3J0QXJyYXksICZhcnJh
eUJ1ZmZlckFycmF5KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKIAogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nc0N1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2Nr
Q29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCB2b2lkIEpTTW9ja0NvbnRlbnRG
aWx0ZXJTZXR0aW5nczo6c2V0RGVjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4oc3Rh
dGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIERlY2lzaW9uUG9pbnQgZGVjaXNpb25Qb2ludCB7IHN0YXRpY19jYXN0PERlY2lzaW9u
UG9pbnQ+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtOTgsNyArOTgsNyBAQCBzdGF0aWMgaW5saW5lIERl
Y2lzaW9uIHRvRGVjaXNpb24oRXhlY1N0CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgdWludDhfdCBuYXRpdmVWYWx1ZSB7IGNvbnZlcnQ8dWludDhfdD4o
c3RhdGUsIHZhbHVlLCBFbmZvcmNlUmFuZ2UpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBEZWNpc2lvbjo6QWxsb3c7CiAKICAgICBEZWNpc2lvbiBkZWNpc2lvbiB7IHN0YXRpY19jYXN0
PERlY2lzaW9uPihuYXRpdmVWYWx1ZSkgfTsKQEAgLTExOSw4ICsxMTksMTEgQEAgSlNWYWx1ZSBK
U01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OmRlYwogCiB2b2lkIEpTTW9ja0NvbnRlbnRGaWx0
ZXJTZXR0aW5nczo6c2V0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9uIGRlY2lzaW9uIHsgdG9EZWNpc2lvbihzdGF0
ZSwgdmFsdWUpIH07Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHdyYXBwZWQo
KS5zZXREZWNpc2lvbihkZWNpc2lvbik7CkBAIC0xMzMsOCArMTM2LDExIEBAIEpTVmFsdWUgSlNN
b2NrQ29udGVudEZpbHRlclNldHRpbmdzOjp1bmIKIAogdm9pZCBKU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3M6OnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIERlY2lzaW9uIHVuYmxvY2tSZXF1ZXN0
RGVjaXNpb24geyB0b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgd3JhcHBlZCgpLnNldFVuYmxvY2tSZXF1ZXN0RGVjaXNpb24odW5i
bG9ja1JlcXVlc3REZWNpc2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDExICs0OSwxMiBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUo
Tm9kZSogCiAgICAgRXhlY1N0YXRlKiBzdGF0ZSA9IG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKTsKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgIGFyZ3MuYXBw
ZW5kKHRvSlMoc3RhdGUsIG1fZGF0YS0+Z2xvYmFsT2JqZWN0KCksIG5vZGUpKTsKLSAgICBpZiAo
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogCiAgICAgTmFr
ZWRQdHI8RXhjZXB0aW9uPiByZXR1cm5lZEV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9kYXRhLT5pbnZva2VDYWxsYmFjayhhcmdzLCBKU0NhbGxiYWNrRGF0YTo6Q2FsbGJhY2tUeXBl
OjpGdW5jdGlvbk9yT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHN0YXRlLCAiYWNjZXB0
Tm9kZSIpLCByZXR1cm5lZEV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSB8fCByZXR1cm5lZEV4Y2VwdGlvbik7CiAgICAgaWYgKHJldHVybmVkRXhjZXB0aW9uKSB7CiAg
ICAgICAgIC8vIFJldGhyb3cgZXhjZXB0aW9uLgogICAgICAgICB0aHJvd0V4Y2VwdGlvbihzdGF0
ZSwgc2NvcGUsIHJldHVybmVkRXhjZXB0aW9uKTsKQEAgLTYyLDcgKzYzLDcgQEAgdWludDE2X3Qg
SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIAogICAgIH0KIAogICAgIHVpbnQxNl90IHJl
c3VsdCA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7
CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlT3JTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZU9yU3RyaW5nLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rocm93U2NvcGUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzUsNiArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmlu
Zz4+IHRvTm9kZU9yU3RyaW5nVmVjdG9yKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKIAog
ICAgIFZlY3RvcjxzdGQ6OmV4cGVyaW1lbnRhbDo6dmFyaWFudDxSZWY8Tm9kZT4sIFN0cmluZz4+
IHJlc3VsdDsKQEAgLTQ2LDcgKzUwLDcgQEAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJp
YW50PFJlZjxObwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChub2RlLT53cmFw
cGVkKCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChzdHJpbmcpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDEzICs0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGVjU3RhdGUmIHN0YXRlKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgaWYgKCFzdGF0ZS5hcmd1bWVudENvdW50KCkpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUik7CiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFN0cmluZyBzcWxTdGF0ZW1lbnQgPSBzdGF0ZS5h
cmd1bWVudCgwKS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIC8vIE5vdyBhc3NlbWJsZSB0aGUg
bGlzdCBvZiBTUUwgYXJndW1lbnRzCkBAIC02MywxNSArNjYsMTUgQEAgSlNWYWx1ZSBKU1NRTFRy
YW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZQogICAgICAgICB9CiAKICAgICAgICAgSlNWYWx1ZSBs
ZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgc3RhdGUucHJvcGVydHlOYW1lcygpLmxl
bmd0aCk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmc3Rh
dGUpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBpKTsKLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQpAQCAtODEs
NyArODQsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVudCB0
byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFwcGVu
ZCh2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1NWR0xlbmd0aEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCBKU1ZhbHVlIEpTU1ZHTGVuZ3RoOjpjb252ZXJ0
VG9TcGVjaWZpZWRVCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoJnN0
YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
MTYgKzc5LDE5IEBAIGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlMKIAog
dm9pZCBKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRp
b25Nb2RlIG1vZGUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1N0b3JhZ2UqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTdG9yYWdlKj4ob2JqZWN0KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkubGVuZ3RoKGVjKTsK
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdGhpc09iamVj
dC0+d3JhcHBlZCgpLmtleShpLCBlYykpKTsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAgICAgCkBAIC05Nyw2ICsxMDAsOSBAQCB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlO
YW1lcyhKU09iCiAKIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xv
dCYsIGJvb2wmIHB1dFJlc3VsdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIE9ubHkgcGVyZm9y
bSB0aGUgY3VzdG9tIHB1dCBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBhIG5hdGl2ZSBwcm9w
ZXJ0eSBieSB0aGlzIG5hbWUuCiAgICAgLy8gU2luY2UgaGFzUHJvcGVydHkoKSB3b3VsZCBlbmQg
dXAgY2FsbGluZyBjYW5HZXRJdGVtc0Zvck5hbWUoKSBhbmQgYmUgZm9vbGVkLCB3ZSBuZWVkIHRv
IGNoZWNrCiAgICAgLy8gdGhlIG5hdGl2ZSBwcm9wZXJ0eSBzbG90cyBtYW51YWxseS4KQEAgLTEx
MCw3ICsxMTYsNyBAQCBib29sIEpTU3RvcmFnZTo6cHV0RGVsZWdhdGUoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
IHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIC8vIFRo
ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgcHV0RGVsZWdhdGUoKSBzaG91bGQgaGFu
ZGxlIHRoZSBwdXQgb3BlcmF0aW9uICh3aGljaAogICAgICAgICAvLyBpZiB0cnVlLCB0ZWxscyB0
aGUgY2FsbGVyIG5vdCB0byBleGVjdXRlIHRoZSBnZW5lcmljIHB1dCkuIEl0IGRvZXMgbm90IGlu
ZGljYXRlIHdoZXRoZXIKICAgICAgICAgLy8gcHV0RGVsZWdhdGUoKSBkaWQgc3VjY2Vzc2Z1bGx5
IGNvbXBsZXRlIHRoZSBvcGVyYXRpb24gb3Igbm90ICh3aGljaCBpdCBkaWRuJ3QgaW4gdGhpcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVGV4dFRyYWNrQ3VzdG9t
LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCwxMSBAQCB2b2lk
IEpTVGV4dFRyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlCiB2b2lkIEpTVGV4dFRyYWNrOjpz
ZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAjZWxzZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20uY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMSBAQCB2b2lkIEpTVmlk
ZW9UcmFjazo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyCiB2b2lkIEpTVmlkZW9UcmFjazo6c2V0S2lu
ZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBzdHJpbmcgPSB2YWx1ZS50b1N0cmluZygm
c3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
d3JhcHBlZCgpLnNldEtpbmQoc3RyaW5nKTsKICNlbHNlCkBAIC01Niw4ICs1OSwxMSBAQCB2b2lk
IEpTVmlkZW9UcmFjazo6c2V0S2luZChFeGVjU3RhdGUmIHN0CiB2b2lkIEpTVmlkZW9UcmFjazo6
c2V0TGFuZ3VhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKQorICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUu
dG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIHdyYXBwZWQoKS5zZXRMYW5ndWFnZShzdHJpbmcpOwogI2Vsc2UKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDEwICsxMDYsMTAgQEAgSlNWYWx1ZSBKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ6OmdldEluZAogCiAgICAgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IHdy
YXBwZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCku
dG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgdW5zaWduZWQgaW5kZXggPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIo
JmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRJbmRleGVkUGFyYW1ldGVyKHBuYW1lLCBpbmRl
eCk7CiAgICAgcmV0dXJuIHRvSlMoJmV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEwICsxOTksMTAgQEAgc3RhdGljIEpTVmFsdWUg
Z2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViRwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBvYmotPndyYXBwZWQoKTsKICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVu
c2lnbmVkIHBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdl
dEluZm8gaW5mbzsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKQEAgLTMzNSw3ICszMzUsNyBA
QCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgCiAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICBjb25zdCBT
dHJpbmcgbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihu
YW1lKTsKICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24p
OwpAQCAtMzU3LDEzICszNTcsMTMgQEAgSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0Lmdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1l
LCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC0zODQsNyArMzg0LDcgQEAgSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSB3cmFwcGVkKCk7CiAgICAgdW5z
aWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKICAgICBpZiAoZWMp
IHsKQEAgLTQwOCw3ICs0MDgsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0CiAgICAgaWYgKCFwcm9ncmFtICYmICFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVy
KHByb2dyYW0sIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00MzcsNyArNDM3LDcgQEAg
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CiAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9
IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAg
ICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIFdl
YkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFt
ZSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtNDk2LDYgKzQ5Niw5IEBAIEpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKIHsKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIApAQCAtNTA4LDcgKzUxMSw3IEBAIGJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0MKICAgICAKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgaSk7
Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
dmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcigmc3RhdGUpKTsKICAgICB9CkBA
IC01NTYsMTEgKzU1OSwxMSBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0
YUZ1CiAgICAgfSBlbHNlCiAgICAgICAgIGluZGV4ID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMigmc3RhdGUpOwogICAgIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0g
dG9GbG9hdDMyQXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKQEAgLTcwNyw3ICs3MTAsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlv
bk1hdHJpeChECiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
ICAgICAKICAgICBib29sIHRyYW5zcG9zZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
Qm9vbGVhbigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKICAgICAKICAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMy
QXJyYXkoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJL
aXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMSArNjMsMTQg
QEAgZW51bSBjbGFzcyBDcnlwdG9LZXlGb3JtYXQgewogCiBzdGF0aWMgUmVmUHRyPENyeXB0b0Fs
Z29yaXRobT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgYWxnb3JpdGhtSWRlbnRpZmllcjsKLSAgICBpZiAoIUpTQ3J5cHRvQWxnb3JpdGhtRGljdGlv
bmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVu
dGlmaWVyKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1
dG8gc3VjY2VzcyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRl
bnRpZmllcigmc3RhdGUsIHZhbHVlLCBhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHNjb3BlLCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGF1dG8gcmVzdWx0
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShhbGdvcml0aG1J
ZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTgxLDcgKzg0LDcgQEAgc3RhdGljIGJv
b2wgY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoRQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBrZXlGb3JtYXRTdHJpbmcgPSB2YWx1ZS50
b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKGtleUZvcm1hdFN0cmluZyA9PSAicmF3IikKICAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5Rm9ybWF0OjpSYXc7CkBAIC0xMTQsNyArMTE3LDcgQEAgc3RhdGljIGJv
b2wgY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoRQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0gYXJy
YXktPmdldEluZGV4KCZzdGF0ZSwgaSk7CiAgICAgICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGVs
ZW1lbnQudG9TdHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodXNhZ2VTdHJpbmcgPT0g
ImVuY3J5cHQiKQogICAgICAgICAgICAgcmVzdWx0IHw9IENyeXB0b0tleVVzYWdlRW5jcnlwdDsK
QEAgLTE0NSwxNiArMTQ4LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmVuY3J5
cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0g
PSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7
CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6
Y3JlYXRlUGFyYW1ldGVyc0ZvckVuY3J5cHQoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIo
KSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtl
eSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwog
ICAgIGlmICgha2V5KQpAQCAtMTY3LDEwICsxNjgsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRs
ZUNyeXB0bzo6ZW5jcnlwdChFeAogICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9t
SlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICAKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTIwMSwxNiArMjAyLDE0IEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OmRlY3J5cHQoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRlY3J5cHQoJnN0YXRl
LCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAog
ICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUu
dW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjIzLDEwICsyMjIsMTAg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgIH0KIAogICAg
IENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFG
cm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRhKSkgewot
ICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9
IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNl
RGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVm
ZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBn
bG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTI1NiwxNiArMjU1LDE0IEBAIEpT
VmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnNpZ24oRXhlY1MKICAgICAgICAgcmV0dXJuIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNW
YWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3Jp
dGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvclNpZ24o
JnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsK
KyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQo
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtMjc4LDEwICsy
NzUsMTAgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAgIH0K
IAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlv
bkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBkYXRh
KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3Vj
Y2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
c3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQ
cm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQ
dHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0
YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTMxMSwxNiArMzA4LDE0
IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OnZlcmlmeShFeGUKICAgICAgICAgcmV0
dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
YWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0
aG0pCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0Zv
clZlcmlmeSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFt
ZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRv
V3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0z
MzMsMTYgKzMyOCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp2ZXJpZnkoRXhl
CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBzaWduYXR1cmU7Ci0gICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgyKSwgc2lnbmF0dXJlKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpOworICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRh
dGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJv
bUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgZGF0YSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVm
ZXJyZWQqIHByb21pc2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRl
LCBnbG9iYWxPYmplY3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9
IERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VE
ZWZlcnJlZCk7CkBAIC0zNzIsMjIgKzM2NywyMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5
cHRvOjpkaWdlc3QoRXhlCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8g
YWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBh
bGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JEaWdlc3QoJnN0YXRlLCBhbGdvcml0aG0tPmlk
ZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1l
dGVycykgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJhbWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJh
dGlvbkRhdGEgZGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b09wZXJh
dGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBk
YXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYg
KCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBK
U1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVy
PiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3Qo
KSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTQxNywzMCArNDEwLDI4IEBAIEpTVmFsdWUgSlNXZWJL
aXRTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2UKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5cHRv
QWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckdlbmVyYXRlS2V5KCZzdGF0
ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAg
aWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAK
ICAgICBib29sIGV4dHJhY3RhYmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291
bnQoKSA+PSAyKSB7CiAgICAgICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVz
YWdlcyA9IDA7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSAzKSB7Ci0gICAgICAg
IGlmICghY3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDIp
LCBrZXlVc2FnZXMpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUuYXJndW1lbnQoMiksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgm
c3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKQEAgLTQ4NCw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBp
bXBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAga2V5U2VyaWFsaXphdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8SlNDcnlwdG9L
ZXlTZXJpYWxpemF0aW9uSldLPigmc3RhdGUsIGp3a1N0cmluZyk7Ci0gICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDk3LDEx
ICs0ODgsMTEgQEAgc3RhdGljIHZvaWQgaW1wb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogCiAg
ICAgT3B0aW9uYWw8Q3J5cHRvQWxnb3JpdGhtUGFpcj4gcmVjb25jaWxlZFJlc3VsdCA9IGtleVNl
cmlhbGl6YXRpb24tPnJlY29uY2lsZUFsZ29yaXRobShhbGdvcml0aG0uZ2V0KCksIHBhcmFtZXRl
cnMuZ2V0KCkpOwogICAgIGlmICghcmVjb25jaWxlZFJlc3VsdCkgewotICAgICAgICBpZiAoIXN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJBbGdv
cml0aG0gc3BlY2lmaWVkIGluIGtleSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG9uZSBwYXNzZWQg
dG8gaW1wb3J0S2V5IGFzIGFyZ3VtZW50IikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhbGdvcml0aG0gPSByZWNvbmNpbGVkUmVz
dWx0LT5hbGdvcml0aG07CkBAIC01MTMsMTUgKzUwNCwxNSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRL
ZXkoRXhlY1N0YXRlJiBzdGF0ZSwgCiAgICAgQVNTRVJUKHBhcmFtZXRlcnMpOwogCiAgICAga2V5
U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlRXh0cmFjdGFibGUoZXh0cmFjdGFibGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVV
c2FnZXMoa2V5VXNhZ2VzKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byBrZXlEYXRhID0ga2V5U2VyaWFsaXphdGlvbi0+a2V5RGF0YSgpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTUzOSw0NSArNTMw
LDQ0IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICAgICAg
cmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAg
ICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgw
KSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0
ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGRhdGE7Ci0gICAgaWYgKCFj
cnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudCgxKSwgZGF0YSkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRo
bTsKICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAg
ICBpZiAoIXN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpLmlzTnVsbCgpKSB7CiAgICAgICAgIGFs
Z29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmICghYWxnb3JpdGhtKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICAgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQorCiAgICAgICAgIHBhcmFtZXRlcnMg
PSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JJbXBvcnRL
ZXkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoMikpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8
fCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGV4dHJhY3Rh
YmxlID0gZmFsc2U7CiAgICAgaWYgKHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA0KSB7CiAgICAg
ICAgIGV4dHJhY3RhYmxlID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMykudG9Cb29sZWFuKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KIAogICAgIENyeXB0b0tleVVzYWdlIGtleVVzYWdlcyA9IDA7CiAgICAgaWYg
KHN0YXRlLmFyZ3VtZW50Q291bnQoKSA+PSA1KSB7Ci0gICAgICAgIGlmICghY3J5cHRvS2V5VXNh
Z2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDQpLCBrZXlVc2FnZXMpKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQo
NCksIGtleVVzYWdlcyk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNj
ZXNzKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlz
ZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVj
dCgpKTsKQEAgLTU5MCw3ICs1ODAsNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpp
bXBvcnRLZXkoCiAgICAgfTsKIAogICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0ZSwga2V5Rm9y
bWF0LCBkYXRhLCBXVEZNb3ZlKGFsZ29yaXRobSksIFdURk1vdmUocGFyYW1ldGVycyksIGV4dHJh
Y3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWls
dXJlQ2FsbGJhY2spKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAKICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLT5wcm9taXNlKCk7CkBAIC02MTcsNyArNjA3
LDcgQEAgc3RhdGljIHZvaWQgZXhwb3J0S2V5KEV4ZWNTdGF0ZSYgc3RhdGUsIAogICAgIH0KICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SldLOiB7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBK
U0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnNlcmlhbGl6ZSgmc3RhdGUsIGtleSk7Ci0gICAg
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1N0cmluZyB1dGY4
U3RyaW5nID0gcmVzdWx0LnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHRCdWZmZXI7CkBAIC02NDAsMTAgKzYzMCwxMCBAQCBKU1ZhbHVlIEpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsK
IAogICAgIENyeXB0b0tleUZvcm1hdCBrZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3Jt
YXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBj
cnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZv
cm1hdCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlm
ICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
UmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC02NTksNyArNjQ5LDcgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KAogICAgIH07CiAKICAgICBXZWJD
b3JlOjpleHBvcnRLZXkoc3RhdGUsIGtleUZvcm1hdCwgKmtleSwgV1RGTW92ZShzdWNjZXNzQ2Fs
bGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21p
c2UoKTsKQEAgLTY3NCwxMCArNjY0LDEwIEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86
OndyYXBLZXkoRXgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5
Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0
YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZy
b21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5
PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEp
KTsKICAgICBpZiAoIWtleSkKQEAgLTY5NCwxNiArNjg0LDE0IEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OndyYXBLZXkoRXgKICAgICB9CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNy
ZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgz
KSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAg
ICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQog
CiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21p
c2VEZWZlcnJlZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSk7CiAgICAgUmVmUHRyPERlZmVycmVkV3JhcHBlcj4gd3JhcHBlciA9IERlZmVycmVkV3Jh
cHBlcjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCk7CkBA
IC03NDYsMTYgKzczNCwxNiBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBL
ZXkoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIENyeXB0b0tleUZvcm1hdCBr
ZXlGb3JtYXQ7Ci0gICAgaWYgKCFjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1
ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIGtleUZvcm1hdCk7CisgICAgQVNTRVJUKHNjb3Bl
LmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSB3cmFw
cGVkS2V5RGF0YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3Rh
dGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLCB3cmFwcGVkS2V5RGF0YSkpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBzdWNjZXNzID0gY3J5cHRvT3Bl
cmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSks
IHdyYXBwZWRLZXlEYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiB1bndyYXBwaW5nS2V5ID0gSlNDcnlwdG9LZXk6
OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CiAgICAgaWYgKCF1bndyYXBw
aW5nS2V5KQpAQCAtNzY4LDQ0ICs3NTYsNDEgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0
bzo6dW53cmFwS2V5KAogICAgIH0KIAogICAgIGF1dG8gdW53cmFwQWxnb3JpdGhtID0gY3JlYXRl
QWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsK
LSAgICBpZiAoIXVud3JhcEFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBBbGdvcml0
aG0pOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CiAgICAgYXV0byB1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRGVjcnlwdCgmc3RhdGUs
IHVud3JhcEFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgz
KSk7Ci0gICAgaWYgKCF1bndyYXBBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgIGlmICghdW53cmFwQWxnb3JpdGhtUGFy
YW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVm
UHRyPENyeXB0b0FsZ29yaXRobT4gdW53cmFwcGVkS2V5QWxnb3JpdGhtOwogICAgIFJlZlB0cjxD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJz
OwogICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkuaXNOdWxsKCkpIHsKICAgICAg
ICAgdW53cmFwcGVkS2V5QWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3Rh
dGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAgICAgaWYgKCF1bndyYXBwZWRL
ZXlBbGdvcml0aG0pIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCB1bndyYXBwZWRLZXlBbGdvcml0
aG0pOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAgICAgdW53cmFwcGVkS2V5QWxn
b3JpdGhtUGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFy
YW1ldGVyc0ZvckltcG9ydEtleSgmc3RhdGUsIHVud3JhcHBlZEtleUFsZ29yaXRobS0+aWRlbnRp
ZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KSk7Ci0gICAgICAgIGlmICghdW53cmFw
cGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycykgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3Jh
cHBlZEtleUFsZ29yaXRobVBhcmFtZXRlcnMpOworICAgICAgICBpZiAoIXVud3JhcHBlZEtleUFs
Z29yaXRobVBhcmFtZXRlcnMpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAo
c3RhdGUuYXJndW1lbnRDb3VudCgpID49IDYpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudCg1KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5
cHRvS2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
ID49IDcpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwg
c3RhdGUuYXJndW1lbnQoNiksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdl
c0Zyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKTsKKyAgICAg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAg
IH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtODE5LDExICs4MDQs
MTUgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dW53cmFwS2V5KAogICAgICAgICBh
dXRvIGltcG9ydEZhaWx1cmVDYWxsYmFjayA9IFt3cmFwcGVyXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgd3JhcHBlci0+cmVqZWN0KG51bGxwdHIpOwogICAgICAgICB9OworCisgICAgICAgIFZN
JiB2bSA9IGRvbUdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgICAgIEV4ZWNTdGF0ZSYgc3RhdGUgPSAqZG9tR2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFdlYkNvcmU6OmltcG9ydEtleShzdGF0
ZSwga2V5Rm9ybWF0LCBzdGQ6Om1ha2VfcGFpcihyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgp
KSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCB1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJz
LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBXVEZNb3ZlKGltcG9ydFN1Y2Nlc3NDYWxsYmFjayks
IFdURk1vdmUoaW1wb3J0RmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IGV4Y2VwdGlvbiBkZXRhaWxzIHRvIGNvbnNv
bGUsIGFuZCBwb3NzaWJseSB0byBjYWxsaW5nIHNjcmlwdCBvbmNlIHRoZXJlIGlzIGEgc3RhbmRh
cmRpemVkIHdheSB0byBwYXNzIGVycm9ycyB0byBXZWJDcnlwdG8gcHJvbWlzZSByZWplY3QgZnVu
Y3Rpb25zLgotICAgICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVs
bHB0cik7CiAgICAgICAgIH0KICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Niw3ICs1Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKCZleGVjKSk7CiAKICAgICBTdHJpbmcgc2NyaXB0VVJMID0gZXhlYy51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZygmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgLy8gU2VlIHNlY3Rpb24g
NC44LjIgc3RlcCAxNCBvZiBXZWJXb3JrZXJzIGZvciB3aHkgdGhpcyBpcyB0aGUgbGV4aWNhbEds
b2JhbE9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTMgKzYxLDE2IEBAIHZvaWQgSlNXb3JrZXJHbG9iYWxTY29w
ZTo6dmlzaXRBZGRpdGlvbmEKIAogSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjppbXBvcnRT
Y3JpcHRzKEV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRl
LmFyZ3VtZW50Q291bnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBW
ZWN0b3I8U3RyaW5nPiB1cmxzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5h
cmd1bWVudENvdW50KCk7ICsraSkgewogICAgICAgICB1cmxzLmFwcGVuZCh2YWx1ZVRvVVNWU3Ry
aW5nKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpKTsKLSAgICAgICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwpAQCAtODYsNyArODksNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFs
U2NvcGU6OnNldFRpbWVvdXQoCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6
Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50
U2VjdXJpdHlQb2xpY3koKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkBAIC0x
MDMsNyArMTA2LDcgQEAgSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbAog
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1
bGVkQWN0aW9uPiBhY3Rpb24gPSBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSgmc3RhdGUsIGdsb2Jh
bE9iamVjdCgpLT53b3JsZCgpLCB3cmFwcGVkKCkuY29udGVudFNlY3VyaXR5UG9saWN5KCkpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIWFjdGlv
bikKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm8KICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvIGZ1bmN0
aW9uID0gb2JqZWN0LmdldCgmc3RhdGUsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsIHByb3BlcnR5TmFtZSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgaWYgKCFmdW5jdGlvbi5pc0Z1bmN0aW9uKCkpIHsKQEAgLTcwLDE5
ICs3MCwyMiBAQCBKU0M6OkpTVmFsdWUgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvCiAKIGJv
b2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aXNDb250cm9sbGVkUmVhZGFibGVT
dHJlYW1Mb2NrZWQoKSBjb25zdAogewotICAgIGF1dG8mIHN0YXRlID0gKmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jaygmc3RhdGUpOworICAg
IGF1dG8gZ2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNDOjpWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8mIHN0
YXRlID0gKmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgYXV0byYgY2xpZW50RGF0
YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7
CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZt
LmNsaWVudERhdGEpOwogICAgIGF1dG8gcmVhZGFibGVTdHJlYW0gPSBtX2pzQ29udHJvbGxlci0+
Z2V0KCZzdGF0ZSwgY2xpZW50RGF0YS5idWlsdGluTmFtZXMoKS5jb250cm9sbGVkUmVhZGFibGVT
dHJlYW1Qcml2YXRlTmFtZSgpKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCi0gICAgYXV0
byBpc0xvY2tlZCA9IGdsb2JhbE9iamVjdCgpLT5idWlsdGluSW50ZXJuYWxGdW5jdGlvbnMoKS5y
ZWFkYWJsZVN0cmVhbUludGVybmFscygpLm1faXNSZWFkYWJsZVN0cmVhbUxvY2tlZEZ1bmN0aW9u
LmdldCgpOworICAgIGF1dG8gaXNMb2NrZWQgPSBnbG9iYWxPYmplY3QtPmJ1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFt
TG9ja2VkRnVuY3Rpb24uZ2V0KCk7CiAKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHJlYWRhYmxlU3RyZWFtKTsKICAgICBhdXRv
IHJlc3VsdCA9IGNhbGxGdW5jdGlvbihzdGF0ZSwgaXNMb2NrZWQsIEpTQzo6anNVbmRlZmluZWQo
KSwgYXJndW1lbnRzKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiByZXN1bHQuaXNUcnVlKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMDU0OTgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDggKzc0LDExIEBAIGlubGluZSBKU0RPTUdsb2JhbE9i
amVjdCogUmVhZGFibGVTdHJlYW0KIAogaW5saW5lIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0
Q29udHJvbGxlcjo6ZW5xdWV1ZShSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4mJiBidWZmZXIpCiB7
Ci0gICAgSlNDOjpFeGVjU3RhdGUmIHN0YXRlID0gKmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKCZzdGF0ZSk7CisgICAgYXV0byBnbG9i
YWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBpZiAoIWJ1ZmZlcikg
ewogICAgICAgICBlcnJvcihzdGF0ZSwgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcigmc3RhdGUpKTsK
QEAgLTg0LDggKzg3LDggQEAgaW5saW5lIGJvb2wgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bAogICAgIGF1dG8gbGVuZ3RoID0gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgYXV0byBjaHVu
ayA9IEpTQzo6VWludDhBcnJheTo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgMCwgbGVuZ3RoKTsK
ICAgICBBU1NFUlQoY2h1bmspOwotICAgIGVucXVldWUoc3RhdGUsIHRvSlMoJnN0YXRlLCBnbG9i
YWxPYmplY3QoKSwgY2h1bmsuZ2V0KCkpKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBlbnF1ZXVlKHN0YXRlLCB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBjaHVu
ay5nZXQoKSkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTMgKzQ4LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RkOjp1bmlxdWVfcHRyPFNj
aGVkdWxlZEFjdGlvbj4gU2NoZWR1bGVkQWN0aW9uOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBE
T01XcmFwcGVyV29ybGQmIGlzb2xhdGVkV29ybGQsIENvbnRlbnRTZWN1cml0eVBvbGljeSogcG9s
aWN5KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSB2ID0gZXhlYy0+YXJndW1lbnQoMCk7
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgaWYgKGdldENhbGxEYXRhKHYsIGNhbGxEYXRh
KSA9PSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICBpZiAocG9saWN5ICYmICFwb2xpY3ktPmFs
bG93RXZhbChleGVjKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBTdHJp
bmcgc3RyaW5nID0gdi50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4obmV3IFNjaGVkdWxlZEFjdGlvbihzdHJpbmcsIGlz
b2xhdGVkV29ybGQpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDEwICs0MywxMSBAQCBib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KEV4ZWNT
dGF0ZSYgCiB7CiAgICAgYXV0byYgdm0gPSBzY3JpcHRTdGF0ZS52bSgpOwogICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNj
cmlwdFN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpLCB0b0pTKCZzY3JpcHRT
dGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpKTsKLSAgICBpZiAoc2NyaXB0U3RhdGUuaGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzY3JpcHRTdGF0ZSwgc2NyaXB0
U3RhdGUuZXhjZXB0aW9uKCkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKKyAgICAgICAgcmVwb3J0RXhjZXB0aW9uKCZzY3JpcHRTdGF0ZSwgc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5
LDkgQEAgcHJvdGVjdGVkOgogCiAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fZXhlYy0+aGFkRXhjZXB0aW9uKCk7CisgICAgICAgIFZNJiB2bSA9IG1f
ZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgdm9pZCB0
aHJvd1N0YWNrT3ZlcmZsb3coKQpAQCAtMjQ0OCw2ICsyNDUwLDkgQEAgcHJpdmF0ZToKIAogRGVz
ZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgpCiB7Cisg
ICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIFZlY3Rvcjx1aW50MzJfdCwgMTY+IGluZGV4U3RhY2s7CiAgICAg
VmVjdG9yPElkZW50aWZpZXIsIDE2PiBwcm9wZXJ0eU5hbWVTdGFjazsKICAgICBWZWN0b3I8SlNP
YmplY3QqLCAzMj4gb3V0cHV0T2JqZWN0U3RhY2s7CkBAIC0yNDY4LDcgKzI0NzMsNyBAQCBEZXNl
cmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgICAgICAgICAgZ290
byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0g
Y29uc3RydWN0RW1wdHlBcnJheShtX2V4ZWMsIDAsIG1fZ2xvYmFsT2JqZWN0LCBsZW5ndGgpOwot
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICBn
b3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQob3V0QXJyYXkpOwogICAg
ICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG91dEFycmF5KTsKQEAgLTI3MDYsMTMg
KzI3MTEsMTYgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZAogUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
SlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKG9yaWdpbkNvbnRl
eHQpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHZhbHVlID0gdG9KUyhleGVjLCBh
cGlWYWx1ZSk7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZh
bHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgdmFsdWUsIG51bGxwdHIs
IG51bGxwdHIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgICpleGNlcHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUo
KSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqZXhjZXB0
aW9uID0gdG9SZWYoZXhlYywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgQVNTRVJUKHNlcmlhbGl6ZWRWYWx1ZSk7CkBAIC0yNzQxLDEyICsyNzQ5LDE1IEBAIEpTVmFs
dWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGkKIEpTVmFsdWVSZWYgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYgZGVzdGluYXRpb25Db250ZXh0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gdG9KUyhk
ZXN0aW5hdGlvbkNvbnRleHQpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIoZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHZhbHVl
ID0gZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBudWxscHRy
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCktPnZhbHVlKCkpOwotICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRv
UmVmKGV4ZWMsIHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIEFTU0VS
VCh2YWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
b3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlKGNvCiAgICAgRXhlY1N0YXRlKiBleGVjID0gbV93b3JrZXJHbG9iYWxTY29wZVdyYXBwZXIt
Pmdsb2JhbEV4ZWMoKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNDOjpldmFs
dWF0ZShleGVjLCBzb3VyY2VDb2RlLmpzU291cmNlQ29kZSgpLCBtX3dvcmtlckdsb2JhbFNjb3Bl
V3JhcHBlci0+Z2xvYmFsVGhpcygpLCByZXR1cm5lZEV4Y2VwdGlvbik7CiAKQEAgLTE0Myw5ICsx
NDMsMTIgQEAgdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShjbwogICAgICAg
ICBTdHJpbmcgc291cmNlVVJMID0gc291cmNlQ29kZS51cmwoKS5zdHJpbmcoKTsKICAgICAgICAg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgZXJyb3I7CiAgICAgICAgIGlmIChtX3dvcmtlckdsb2Jh
bFNjb3BlLT5zYW5pdGl6ZVNjcmlwdEVycm9yKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29s
dW1uTnVtYmVyLCBzb3VyY2VVUkwsIGVycm9yLCBzb3VyY2VDb2RlLmNhY2hlZFNjcmlwdCgpKSkg
ewotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZUVycm9yKGV4
ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKTsKLSAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9u
ID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZS5pbXBsKCkpKTsKKyAgICAg
ICAgICAgIH0gd2hpbGUgKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0g
c2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50
YXRpb25Db250CiAgICAgICAgIG15ICRuZWVkRXhjZXB0aW9uQ2hlY2sgPSAwOwogICAgICAgICBm
b3JlYWNoIG15ICRtZW1iZXIgKEB7JGRpY3Rpb25hcnktPm1lbWJlcnN9KSB7CiAgICAgICAgICAg
ICBpZiAoJG5lZWRFeGNlcHRpb25DaGVjaykgewotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0g
IiAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKVxuIjsKKyAgICAgICAgICAg
ICAgICAkcmVzdWx0IC49ICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KVxuIjsKICAgICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIHJldHVybiBOdWxsb3B0
O1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ug
d2lsbCB3YW50IHRoaXMgdG8gc2hhcmUgYSBsb3QgbW9yZSBjb2RlIHdpdGggSlNWYWx1ZVRvTmF0
aXZlLgpAQCAtMzEzMyw3ICszMTMzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAg
IGlmICghJGF0dHJpYnV0ZS0+aXNTdGF0aWMpIHsKQEAgLTMyMzEsNyArMzIzMSw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBuYXRpdmVWYWx1ZSA9ICRu
YXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7XG4iKTsKQEAgLTMyNDIsNyArMzI0Miw3
IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBuYXRpdmVW
YWx1ZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRo
cm93RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zOTg4LDcgKzM5ODgsNyBAQCBzdWIgR2Vu
ZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXks
ICIgICAgfVxuIikKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFZlY3RvcjwkbmF0aXZlRWxlbWVudFR5cGU+ICRuYW1lID0gdG9O
YXRpdmVBcmd1bWVudHM8JG5hdGl2ZUVsZW1lbnRUeXBlPigqc3RhdGUsICRhcmd1bWVudEluZGV4
KTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7CkBAIC00MDIzLDcgKzQwMjMsNyBA
QCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICAkZGVmaW5lT3B0aW9uYWxWYWx1ZSA9
IHBhcnNlPCRjbGFzc05hbWU+KCpzdGF0ZSwgJHtuYW1lfVZhbHVlKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGluZGVudCAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiJGlu
ZGVudCAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKCEkb3B0aW9uYWxWYWx1ZSkpXG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgICAgIHJldHVybiB0aHJv
d0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgJGFyZ3VtZW50SW5k
ZXgsIFwiJG5hbWVcIiwgXCIkdmlzaWJsZUludGVyZmFjZU5hbWVcIiwgJHF1b3RlZEZ1bmN0aW9u
TmFtZSwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczwkY2xhc3NOYW1lPigpKTtcbiIpOwpAQCAt
NDA0Niw3ICs0MDQ2LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmICghJGNoZWNrZWRBcmd1bWVudC5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJy
YXksICIgICAgICAgICRuYW1lID0gJG5hdGl2ZVZhbHVlO1xuIik7CiAgICAgICAgICAgICAgICAg
aWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxu
Iik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICBpZiAoVU5MSUtFTFkoISRuYW1lKSlcbiIp
OwpAQCAtNDA4OSw3ICs0MDg5LDcgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAg
ICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8gJG5hbWUgPSAke291dGVy
fSR7bmF0aXZlVmFsdWV9O1xuIik7CiAgICAgICAgICAgICAgICAgJHZhbHVlID0gIldURk1vdmUo
JG5hbWUpIjsKICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0
cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7
CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTQ0NzAsNyArNDQ3MCw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uRnVuY3Rpb25DYWxsKCkKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIgLiAk
aW5kZW50IC4gInNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpO1xuIikgaWYgJHJhaXNlc0V4Y2Vw
dGlvbjsKIAogICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29u
dGFpbnMoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0
aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAiaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4gImlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRp
bmRlbnQgLiAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
ICAgICAgICAgfQogCkBAIC01Mjg0LDcgKzUyODQsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAKICAgICBB
dG9taWNTdHJpbmcgZXZlbnRUeXBlID0gc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3Ry
aW5nKHN0YXRlKS0+dG9BdG9taWNTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICR7aW50ZXJmYWNlTmFtZX1Jbml0IGV2ZW50SW5pdDsKQEAgLTUyOTMsNyArNTI5Myw3IEBA
IHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICBpZiAoIWluaXRp
YWxpemVyVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAvLyBHaXZlbiB0aGUg
YWJvdmUgdGVzdCwgdGhpcyB3aWxsIGFsd2F5cyB5aWVsZCBhbiBvYmplY3QuCiAgICAgICAgIEpT
T2JqZWN0KiBpbml0aWFsaXplck9iamVjdCA9IGluaXRpYWxpemVyVmFsdWUudG9PYmplY3Qoc3Rh
dGUpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFT
U0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBk
aWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgb2JqZWN0LgogICAgICAgICBK
U0RpY3Rpb25hcnkgZGljdGlvbmFyeShzdGF0ZSwgaW5pdGlhbGl6ZXJPYmplY3QpOwpAQCAtNTQz
Niw3ICs1NDM2LDcgQEAgRU5ECiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkaW50ZXJmYWNlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29uc3RydWN0b3JDYWxsV2l0aCJ9LCAiU2NyaXB0U3RhdGUiKSkgewot
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwog
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RBY3RpdgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBt
ZXNzYWdlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5wb3N0TWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RDdXN0bwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBz
dGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLmFub3RoZXJGdW5jdGlvbihXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDcgKzg1LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3RyaW5nIGV2
ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRv
QXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBUZXN0RXZlbnRD
b25zdHJ1Y3RvckluaXQgZXZlbnRJbml0OwpAQCAtOTQsNyArOTQsNyBAQCB0ZW1wbGF0ZTw+IEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRo
aXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCogaW5pdGlh
bGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAgICAgICAg
QVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFyeSB3cmFw
cGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50
VGFyZ2V0LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE0LDcgKzIxNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0RXZlbnQK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PHVpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwuaXRlbShXVEZNb3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw4
IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UmVndWxhckF0dHJpYnUKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTI4NSw3ICsyODYsNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFJlZ3VsYXJB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjk2
LDcgKzI5Nyw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmEKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2Jh
bE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTMwNCw3ICszMDYsNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1Ymxp
Y0FuZFByaXZhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzE2LDcgKzMxOCw4IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
UHVibGljQW5kUHJpdmEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyNCw3ICszMjcsNyBAQCBib29sIHNldEpTVGVz
dEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpbXBsLnNldFB1YmxpY0FuZFByaXZhdGVDb25kaXRpb25hbEF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzcsNyArMzQwLDgg
QEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0R2xvYmFsT2JqZWN0KiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RHbG9iYWxPYmplY3QqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzQ1LDcgKzM0OSw3IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGkK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0
UnVudGltZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zNzIsNyArMzc2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RH
bG9iYQogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBs
LnJlZ3VsYXJPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzkzLDcgKzM5Nyw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmEKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1v
dmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTQxNiw3ICs0MjAsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RG
TW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMTAgKzIzMSwxMCBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBzdHIxID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIyID0g
c3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBBU0NJSUxpdGVyYWwoImRlZmF1bHRT
dHJpbmciKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQg
PSBjYXN0ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjb250ZXh0KSkKQEAgLTY2Myw5ICs2NjMsMTAgQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvckltcGxlbQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0SW50ZXJmYWNlOjpzZXRJbXBsZW1lbnRzU3RhdGlj
QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02NzgsNyAr
Njc5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzU3RyMihFeAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
Njg2LDcgKzY4OCw3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW1wbGVtZW50
c1N0cjIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjk5LDcg
KzcwMSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMoRXgKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFj
ZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAg
LTcxNiw3ICs3MTksOCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNOb2RlKEV4
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJ
bnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC03MzksOSArNzQzLDEwIEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JTdXBwbGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c2V0U3VwcGxlbWVudGFs
U3RhdGljQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03
NTQsNyArNzU5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxTdHIyKAog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50
ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtNzYyLDcgKzc2OCw3IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFs
U3RyMigKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIFdlYkNvcmU6OlRl
c3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0cjIoaW1wbCwgV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzc1LDcgKzc4MSw4IEBAIGJvb2wgc2V0SlNU
ZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMygKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc5Miw3ICs3OTksOCBAQCBib29s
IHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbE5vZGUoCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC04NTIsNyArODYwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcgogICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
c3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC05MzAs
NyArOTM4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcgogICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsx
OTAsOCBAQCBib29sIHNldEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yVGVzdEF0CiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RKU0J1aWx0aW5D
b25zdHJ1Y3RvciogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SlNCdWlsdGluQ29u
c3RydWN0b3IqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
MyArOTEsMTMgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIAogICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVm
aW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikgOiBzdGF0ZS0+dW5jaGVja2Vk
QXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIHN0cjMgPSBzdGF0ZS0+YXJndW1lbnQoMikuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDog
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRl
Rm9ySlNDb25zdHJ1Y3RvcigqY2FzdGVkVGhpcy0+ZG9jdW1lbnQoKSwgV1RGTW92ZShzdHIxKSwg
V1RGTW92ZShzdHIyKSwgV1RGTW92ZShzdHIzKSwgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RO
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA3LDcgKzIwNyw4IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0
ZSwKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE5vZGUqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE5vZGUqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MjE1LDcgKzIxNiw3IEBAIGJvb2wgc2V0SlNUZXN0Tm9kZU5hbWUoRXhlY1N0YXRlKiBzdGF0ZSwK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE5vbmRldGVybWluaXN0aWMuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsOCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWlu
aXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2OSw3ICszNzAsNyBAQCBib29s
IHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNXcml0ZWFibGVBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4MCw3ICszODEs
OCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlz
dGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTM4OCw3ICszOTAsNyBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNO
b25kZXRlcm1pCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dE5vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTM5OSw3ICs0MDEsOCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3ROb25kZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3ROb25kZXRlcm1pbmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNyw3ICs0MTAsNyBAQCBi
b29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNHZXR0ZXJFeGNl
cHRpb25BdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQx
OCw3ICs0MjEsOCBAQCBib29sIHNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb25k
ZXRlcm1pbmlzdGljKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb25kZXRlcm1p
bmlzdGljKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQyNyw3ICs0MzEsNyBAQCBib29sIHNldEpTVGVzdE5vbmRldGVy
bWluaXN0aWNOb25kZXRlcm1pCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFs
dWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2Vw
dGlvbkF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTI1LDk3ICs1MjUsOTcgQEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpE
aWN0aW9uYXJ5PgogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVt
ZXJhdGlvblZhbHVlV2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51
bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBlbnVtZXJh
dGlvblZhbHVlV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+
KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRl
LCAiZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW51
bVZhbHVlMSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1ZVdpdGhFbXB0eVN0cmluZ0RlZmF1bHQgPSBj
b252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZVdpdGhF
bXB0eVN0cmluZ0RlZmF1bHQiKSksIFRlc3RPYmo6OkVudW1UeXBlOjpFbXB0eVN0cmluZyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gc3RyaW5nV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8U3RyaW5nPihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInN0cmluZ1dp
dGhEZWZhdWx0IikpLCAiZGVmYXVsdFN0cmluZyIpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmluZ1dpdGhvdXREZWZhdWx0
ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRob3V0RGVmYXVsdCIpKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1
dG8gYm9vbGVhbldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmpl
Y3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldp
dGhEZWZhdWx0IikpLCBmYWxzZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVy
dE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0IikpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzZXF1ZW5j
ZU9mU3RyaW5ncyA9IGNvbnZlcnRPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzZXF1ZW5jZU9m
U3RyaW5ncyIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBO
dWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZERvdWJsZSA9IGNvbnZlcnRPcHRpb25hbDxkb3Vi
bGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0
YXRlLCAicmVzdHJpY3RlZERvdWJsZSIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0
byB1bnJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJp
Y3RlZERvdWJsZSIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3Rl
ZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVk
RG91YmxlV2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObywgMCk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8g
dW5yZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6
WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAgICAgYXV0byByZXN0cmljdGVkRmxvYXQgPSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0
YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAi
cmVzdHJpY3RlZEZsb2F0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVz
dHJpY3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZsb2F0
IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJyZXN0cmljdGVkRmxvYXRXaXRoRGVm
YXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vLCAwKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRG
bG9hdFdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInVucmVzdHJpY3RlZEZs
b2F0V2l0aERlZmF1bHQiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMsIDApOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHNt
YWxsSW50ZWdlckNsYW1wZWQgPSBjb252ZXJ0T3B0aW9uYWw8aW50OF90PihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdl
ckNsYW1wZWQiKSksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxpbnQ4X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSA9IGNvbnZl
cnRPcHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSIp
KSwgRW5mb3JjZVJhbmdlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0g
Y29udmVydE9wdGlvbmFsPHVpbnQ4X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVs
dCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gaW50ZWdlciA9IGNvbnZlcnRPcHRpb25h
bDxpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgImludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGludGVnZXJX
aXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImludGVnZXJXaXRoRGVmYXVs
dCIpKSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5zaWduZWRJbnRlZ2VyID0gY29udmVy
dE9wdGlvbmFsPHVpbnQzMl90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkSW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0Owog
ICAgIGF1dG8gdW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8dWlu
dDMyX3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAidW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENvbnZlcnNpb24s
IDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICBhdXRvIGxhcmdlSW50ZWdlciA9IGNvbnZlcnRPcHRpb25hbDxpbnQ2NF90PihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImxhcmdl
SW50ZWdlciIpKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gbGFyZ2VJbnRlZ2VyV2l0aERlZmF1
bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXJXaXRoRGVmYXVsdCIp
KSwgTm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5zaWduZWRMYXJnZUludGVnZXIgPSBjb252
ZXJ0T3B0aW9uYWw8dWludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXIiKSksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0
T3B0aW9uYWw8dWludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAidW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCIpKSwg
Tm9ybWFsQ29udmVyc2lvbiwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8qIG51bGxhYmxlTm9kZSA9IGNvbnZlcnRXcmFwcGVy
VHlwZTxOb2RlLCBKU05vZGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAibnVsbGFibGVOb2RlIikpLCBJc051bGxhYmxlOjpZZXMpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBh
dXRvIGFueVZhbHVlID0gY29udmVydE9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4oc3RhdGUsIG9iamVj
dC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJhbnlWYWx1ZSIp
KSwganNVbmRlZmluZWQoKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBOdWxsb3B0OwogICAgIGF1dG8gYW55VHlwZWRlZlZhbHVlID0gY29udmVydE9wdGlvbmFs
PEpTQzo6SlNWYWx1ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmc3RhdGUsICJhbnlUeXBlZGVmVmFsdWUiKSksIGpzVW5kZWZpbmVkKCkpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IGRpY3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5
VGhhdFNob3VsZFRvbGVyYXRlTnVsbD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJkaWN0aW9uYXJ5TWVtYmVyIikpKTsKICAgICByZXR1
cm4gVGVzdE9iajo6RGljdGlvbmFyeSB7IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhvdXRE
ZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGVu
dW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0KSwgV1RGTW92ZShzdHJpbmdXaXRo
RGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aG91dERlZmF1bHQpLCBXVEZNb3ZlKGJvb2xlYW5X
aXRoRGVmYXVsdCksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShzZXF1
ZW5jZU9mU3RyaW5ncyksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZSksIFdURk1vdmUodW5yZXN0
cmljdGVkRG91YmxlKSwgV1RGTW92ZShyZXN0cmljdGVkRG91YmxlV2l0aERlZmF1bHQpLCBXVEZN
b3ZlKHVucmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxv
YXQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0KSwgV1RGTW92ZShyZXN0cmljdGVkRmxvYXRX
aXRoRGVmYXVsdCksIFdURk1vdmUodW5yZXN0cmljdGVkRmxvYXRXaXRoRGVmYXVsdCksIFdURk1v
dmUoc21hbGxJbnRlZ2VyQ2xhbXBlZCksIFdURk1vdmUoc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHNtYWxsVW5zaWduZWRJbnRlZ2VyRW5mb3JjZWRSYW5nZSksIFdURk1vdmUoc21h
bGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUoaW50ZWdlciksIFdURk1vdmUo
aW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZEludGVnZXIpLCBXVEZNb3ZlKHVu
c2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZShsYXJnZUludGVnZXIpLCBXVEZNb3Zl
KGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnNpZ25lZExhcmdlSW50ZWdlciks
IFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobnVsbGFi
bGVOb2RlKSwgV1RGTW92ZShhbnlWYWx1ZSksIFdURk1vdmUoYW55VHlwZWRlZlZhbHVlKSwgZGlj
dGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02MzEsMTMgKzYzMSwxMyBAQCB0ZW1wbGF0ZTw+
IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUCiAgICAgICAgIHJldHVybiBOdWxsb3B0Owog
ICAgIH0KICAgICBhdXRvIHJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSA9IGNvbnZlcnQ8VGVzdE9i
ajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAicmVxdWlyZWRFbnVtZXJhdGlvblZhbHVlIikpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBib29sZWFu
V2l0aG91dERlZmF1bHQgPSBjb252ZXJ0T3B0aW9uYWw8Ym9vbD4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJib29sZWFuV2l0aG91dERl
ZmF1bHQiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvKiBub25OdWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9k
ZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgIm5vbk51bGxhYmxlTm9kZSIpKSwgSXNOdWxsYWJsZTo6Tm8pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJl
cXVpcmVkRGljdGlvbmFyeU1lbWJlciA9IGNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rp
b25hcnk+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAicmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyIikpKTsKICAgICByZXR1cm4gVGVzdE9i
ajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKHJlcXVpcmVk
RW51bWVyYXRpb25WYWx1ZSksIFdURk1vdmUoYm9vbGVhbldpdGhvdXREZWZhdWx0KSwgKm5vbk51
bGxhYmxlTm9kZSwgcmVxdWlyZWREaWN0aW9uYXJ5TWVtYmVyLnZhbHVlKCkgfTsKQEAgLTY1NSw3
ICs2NTUsNyBAQCB0ZW1wbGF0ZTw+IE9wdGlvbmFsPFRlc3RPYmo6OkRpY3Rpb25hcnlUCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIH0KICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWUgPSBj
b252ZXJ0T3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3Rh
dGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gYm9vbGVhbldpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRl
LCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9v
bGVhbldpdGhvdXREZWZhdWx0IikpKTsKICAgICByZXR1cm4gVGVzdE9iajo6RGljdGlvbmFyeVRo
YXRTaG91bGRUb2xlcmF0ZU51bGwgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWUpLCBXVEZNb3Zl
KGJvb2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKQEAgLTY3Myw3ICs2NzMsNyBAQCB0ZW1wbGF0ZTw+
IE9wdGlvbmFsPEFsdGVybmF0ZURpY3Rpb25hcnlOCiAgICAgICAgIHJldHVybiBOdWxsb3B0Owog
ICAgIH0KICAgICBhdXRvIGVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0T3B0aW9uYWw8VGVzdE9i
ajo6RW51bVR5cGU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnN0YXRlLCAiZW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXRE
ZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0Iikp
KTsKICAgICByZXR1cm4gQWx0ZXJuYXRlRGljdGlvbmFyeU5hbWUgeyBXVEZNb3ZlKGVudW1lcmF0
aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCkgfTsKQEAgLTMwOTAsOSAr
MzA5MCwxMCBAQCBib29sIHNldEpTVGVzdE9iakNvbnN0cnVjdG9yU3RhdGljU3RyaW5nCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IFRlc3RPYmo6OnNldFN0YXRpY1N0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtMzEwMyw3ICszMTA0LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpUZXN0
U3ViT2JqRW5hYmxlZEJ5U2V0dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzExOCw3ICszMTIwLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0
cihFeGVjU3RhdGUqIHN0YQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtMzEyNiw3ICszMTI5LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbnVtQXR0cihF
eGVjU3RhdGUqIHN0YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBwYXJzZTxUZXN0T2JqOjpFbnVtVHlwZT4oKnN0
YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFuYXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTMxMzksNyArMzE0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhl
Y1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTMxNDcsNyArMzE1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQnl0ZUF0dHIoRXhlY1N0
YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQ4X3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qnl0ZUF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzE1OCw3ICszMTYyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpP
Y3RldEF0dHIoRXhlY1N0YXRlKiBzdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzE2Niw3ICszMTcxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpPY3Rl
dEF0dHIoRXhlY1N0YXRlKiBzdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0T2N0ZXRBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNzcsNyArMzE4Miw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3QKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMxODUsNyArMzE5MSw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqU2hvcnRBdHRyKEV4ZWNTdGF0ZSogc3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQxNl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFNob3J0QXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTk2LDcgKzMy
MDIsOCBAQCBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0CiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjA0LDcgKzMyMTEs
NyBAQCBib29sIHNldEpTVGVzdE9iakNsYW1wZWRTaG9ydEF0dHIoRXhlY1N0CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgQ2xhbXApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2xhbXBl
ZFNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
MjE1LDcgKzMyMjIsOCBAQCBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihF
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMjIz
LDcgKzMyMzEsNyBAQCBib29sIHNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cihFCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgRW5mb3JjZVJhbmdl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEVuZm9yY2VSYW5nZVNob3J0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zMjM0LDcgKzMyNDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVu
c2lnbmVkU2hvcnRBdHRyKEV4ZWNTCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC0zMjQyLDcgKzMyNTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVuc2ln
bmVkU2hvcnRBdHRyKEV4ZWNTCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRTaG9ydEF0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzI1Myw3ICszMjYyLDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YQogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI2MSw3ICszMjcxLDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpMb25nQXR0cihFeGVjU3RhdGUqIHN0YQogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
TG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzI3
Miw3ICszMjgyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKgog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2Jq
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzI4MCw3
ICszMjkxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpMb25nTG9uZ0F0dHIoRXhlY1N0YXRlKgogICAg
IH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0
aXZlVmFsdWUgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNp
b24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGltcGwuc2V0TG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMyOTEsNyArMzMwMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRM
b25nTG9uZ0F0dHIoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTMyOTksNyArMzMxMSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHIoRXgKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCB2YWx1
ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVbnNpZ25lZExvbmdMb25nQXR0cihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzEwLDcgKzMzMjIsOCBAQCBi
b29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMzE4LDcgKzMzMzEsNyBAQCBib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHIoRXhlY1N0YXRlKiBzCiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1
ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzMyOSw3ICszMzQyLDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzMzNyw3ICszMzUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RP
YmpVc3ZzdHJpbmdBdHRyKEV4ZWNTdGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNDgsNyArMzM2Miw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqVGVzdE9iakF0dHIoRXhlY1N0YXRlKiAKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTMzNjksNyArMzM4NCw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
VGVzdE51bGxhYmxlT2JqQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTMzOTMsNyArMzQwOSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTGVu
aWVudFRlc3RPYmpBdHRyKEV4ZWMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTM0MTQsNyArMzQzMSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5n
QXR0clRyZWF0aW5nTnVsbEEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM0MjIsNyArMzQ0MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0
clRyZWF0aW5nTnVsbEEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1RyZWF0aW5nTnVsbEFz
RW1wdHlTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJUcmVhdGluZ051bGxB
c0VtcHR5U3RyaW5nKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM0MzMsNyArMzQ1MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5n
TnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0
NDEsNyArMzQ2MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3RyaW5nQXR0clRyZWF0aW5nTnUK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmco
c3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldFVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM0NTIsNyAr
MzQ3MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cigKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NjAsNyArMzQ4
MCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1wbGVtZW50YXRpb25FbnVtQXR0cigKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gcGFyc2U8QWx0ZXJuYXRlRW51bU5hbWU+KCpzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VM
WSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDczLDcgKzM0OTMs
OCBAQCBib29sIHNldEpTVGVzdE9ialhNTE9iakF0dHIoRXhlY1N0YXRlKiBzCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDk0LDcgKzM1MTUsOCBA
QCBib29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTAyLDcgKzM1MjQsNyBAQCBi
b29sIHNldEpTVGVzdE9iakNyZWF0ZShFeGVjU3RhdGUqIHN0YXRlCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRDcmVhdGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzUxMyw3ICszNTM1LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpSZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzUyMSw3ICszNTQ0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRTdHJpbmdBdHRyKEV4ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhU
TUxOYW1lczo6cmVmbGVjdGVkc3RyaW5nYXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1MzIsNyArMzU1NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
UmVmbGVjdGVkVVNWU3RyaW5nQXR0cigKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTM1NDAsNyArMzU2NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVm
bGVjdGVkVVNWU3RyaW5nQXR0cigKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0
ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3Jl
OjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnN0cmluZ2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZh
bHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTUxLDcgKzM1NzUsOCBAQCBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZt
KCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURf
UEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5M
SUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTU5LDcgKzM1ODQsNyBAQCBib29sIHNldEpTVGVz
dE9ialJlZmxlY3RlZEludGVncmFsQXR0cihFCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJbnRlZ3JhbEF0dHJp
YnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGludGVncmFsYXR0ckF0dHIsIFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1NzAsNyArMzU5NSw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3IKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM1NzgsNyArMzYwNCw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVW5zaWduZWRJbnRlZ3IKICAgICB9CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29u
dmVydDx1aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRV
bnNpZ25lZEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdW5z
aWduZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zNTg5LDcgKzM2MTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJv
b2xlYW5BdHRyKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNTk3LDcgKzM2MjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEJvb2xl
YW5BdHRyKEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvQm9vbGVhbihzdGF0ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRC
b29sZWFuQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkYm9vbGVhbmF0dHJB
dHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjA4LDcg
KzM2MzUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjE2LDcgKzM2
NDQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVSTEF0dHIoRXhlY1N0CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWR1cmxhdHRyQXR0ciwg
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzYyNyw3ICszNjU1
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzYzNSw3ICszNjY0LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVU1ZVUkxBdHRyKEV4ZQogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXN2dXJsYXR0ckF0
dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NDYsNyAr
MzY3NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2NTQsNyArMzY4
NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0cihFeGUKICAgICB9CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZh
bHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRy
QXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzY2NSw3
ICszNjk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbAogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzY3Myw3ICsz
NzA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21JbnRlZ3JhbAogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250
ZW50SW50ZWdyYWxBdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtMzY4NCw3ICszNzE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0
b21Cb29sZWFuQQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkg
ewpAQCAtMzY5Miw3ICszNzI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRDdXN0b21C
b29sZWFuQQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9v
bGVhbkF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRCb29sZWFuQXR0
ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MDMs
NyArMzczNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cigKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3MTEsNyAr
Mzc0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tVVJMQXR0cigKICAgICB9
CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2
ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRVUkxBdHRy
QXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcyMyw3
ICszNzU2LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidQogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzczMSw3ICsz
NzY1LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmFibGVkQXRSdW50aW1lQXR0cmlidQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRFbmFibGVkQXRSdW50aW1l
QXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3
NDMsNyArMzc3Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXQK
IHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpT
VmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3NTEs
NyArMzc4Niw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVHlwZWRBcnJheUF0dHIoRXhlY1N0YXQKICAg
ICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdG9GbG9hdDMyQXJyYXkodmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFs
dWUpKSB7CiAgICAgICAgIHRocm93QXR0cmlidXRlVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgIlRlc3RPYmplY3QiLCAidHlwZWRBcnJheUF0dHIiLCAiRmxvYXQzMkFycmF5Iik7CkBAIC0z
NzY2LDcgKzM4MDEsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9u
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzc0
LDcgKzM4MTAsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVy
c2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzg1LDcgKzM4MjEsOCBAQCBib29sIHNldEpTVGVz
dE9iakF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzkzLDcgKzM4MzAsNyBAQCBib29sIHNldEpTVGVzdE9i
akF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4
Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTM4MDQsNyArMzg0MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTM4MTMsNyArMzg1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhTZXR0ZXJFeGNl
cHRpb24KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJF
eGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24o
c3RhdGUsIGVjKTsKQEAgLTM4MjUsNyArMzg2Myw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldp
dGhTZXR0ZXJFeGNlcHRpb24KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM4MzQsNyArMzg3Myw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQXR0cldpdGhT
ZXR0ZXJFeGNlcHRpb24KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UoV1RGTW92ZShuYXRpdmVWYWx1ZSks
IGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTM4NDYsNyArMzg4NSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGMKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4NTQsNyArMzg5NCw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGMKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNl
cHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzg2NSw3
ICszOTA1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4Ywogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg3NCw3ICsz
OTE1LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyV2l0aFNldHRlckV4YwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpLCBl
Yyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODg2LDcgKzM5MjcsOCBA
QCBib29sIHNldEpTVGVzdE9iakN1c3RvbUF0dHIoRXhlY1N0YXRlKiBzCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTAxLDcgKzM5NDMsOCBAQCBi
b29sIHNldEpTVGVzdE9iak9uZm9vKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTE2LDcgKzM5NTksOCBAQCBib29s
IHNldEpTVGVzdE9iak9ud2Via2l0Zm9vKEV4ZWNTdGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTMxLDcgKzM5NzUsOCBAQCBib29sIHNl
dEpTVGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zOTM5LDcgKzM5ODQsNyBAQCBib29sIHNldEpT
VGVzdE9ialdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50
MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRoU2NyaXB0
U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zOTUwLDcgKzM5OTUsOCBAQCBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0
aEFuZFNldHRlckNhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zOTU4LDcgKzQwMDQsNyBAQCBib29sIHNldEpTVGVzdE9ialdpdGhDYWxsV2l0aEFu
ZFNldHRlckNhCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0
dHJpYnV0ZSgqc3RhdGUsIGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSksIGZpcnN0RE9NV2luZG93KHN0
YXRlKSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzk2OSw3
ICs0MDE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewog
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzk5Myw3ICs0
MDQwLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDAxNCw3ICs0MDYy
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDAzOCw3ICs0MDg3LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDA2Miw3ICs0MTEyLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDA4Niw3ICs0MTM3LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udAogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDExMCw3ICs0MTYyLDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQwogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDEzMiw3ICs0MTg1LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE0MCw3ICs0MTk0LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIxKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q29uZGl0aW9uYWxB
dHRyMShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTUzLDcg
KzQyMDcsOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MTYxLDcgKzQy
MTYsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjIoRXhlY1N0CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aW1wbC5zZXRDb25kaXRpb25hbEF0dHIyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQxNzQsNyArNDIyOSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9u
YWxBdHRyMyhFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQxODIsNyArNDIzOCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxB
dHRyMyhFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjMoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE5NSw3ICs0MjUxLDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHI0Q29uc3RydQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDIxMiw3ICs0MjY5LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDb25kaXRpb25hbEF0dHI1Q29uc3RydQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDIyOSw3ICs0Mjg3LDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHI2Q29uc3RydQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI0NSw3ICs0MzA0LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpBbnlBdHRyaWJ1dGUoRXhlY1N0YXRlKgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI2Miw3ICs0MzIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpN
dXRhYmxlUG9pbnQoRXhlY1N0YXRlKgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtNDI4Niw3ICs0MzQ3LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpJbW11
dGFibGVQb2ludChFeGVjU3RhdAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtNDMxMCw3ICs0MzcyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2Jl
cnJ5KEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1
ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtNDMxOCw3ICs0MzgxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpTdHJhd2JlcnJ5
KEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBl
ZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFs
dWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qmx1ZWJlcnJ5KFdURk1vdmUobmF0aXZlVmFs
dWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzMjksNyArNDM5Miw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzMzcsNyArNDQwMSw3IEBAIGJvb2wgc2V0SlNUZXN0
T2JqSWQoRXhlY1N0YXRlKiBzdGF0ZSwgRW4KICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90
Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldElkKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzNDgsNyArNDQxMiw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqUmVwbGFjZWFibGVBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzNjMsNyArNDQyOCw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQzNzEsNyArNDQzNyw3IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqTnVsbGFibGVMb25nU2V0dGFibGVBdHQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQz
Ml90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlTG9u
Z1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTQzODIsNyArNDQ0OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdT
ZXR0YWJsZUEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQzOTAsNyArNDQ1Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdTZXR0
YWJsZUEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJpbmdTZXR0YWJsZUF0dHJpYnV0ZShX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDAxLDcgKzQ0Njgs
OCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFiCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDA5LDcgKzQ0NzcsNyBA
QCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFiCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHZhbHVlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldE51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQyMCw3ICs0NDg4LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQyOCw3ICs0NDk3LDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1ZhbHVlKEV4ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMy
X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TnVsbGFibGVTdHJp
bmdWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDM5
LDcgKzQ1MDgsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVuCiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDQ3LDcg
KzQ1MTcsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJpYnV0ZVdpdGhSZXNlcnZlZEVuCiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6Ok9wdGlvbmFsPigqc3RhdGUsIHZhbHVlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5M
SUtFTFkoIW5hdGl2ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDQ2MCw3ICs0
NTMwLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ2OSw3ICs0NTQw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZShFeAogICAgIFJlZjxU
ZXN0Tm9kZT4gZm9yd2FyZGVkSW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKS5wdXRGb3J3YXJk
c0F0dHJpYnV0ZSgpOwogICAgIGF1dG8mIGltcGwgPSBmb3J3YXJkZWRJbXBsLmdldCgpOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROYW1l
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0ODAsNyArNDU1
MSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHIKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0OTEsNyArNDU2Myw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNOdWxsYWJsZUF0dHIKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGF1dG8mIGltcGwgPSAqZm9yd2FyZGVkSW1wbDsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTAyLDcgKzQ1NzQsOCBAQCBi
b29sIHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NTEwLDcgKzQ1ODMsNyBAQCBib29s
IHNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKEV4CiAgICAgfQogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
VG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ2lmaWVyQXR0cmlidXRlKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1NDYsNyArNDYxOSw3
IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3Ry
aW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1l
T3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQ1NjksNyArNDY0Miw3IEBAIHN0YXRpYyBpbmxpbmUgRW5j
b2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVz
dFBhcmFtID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVu
dGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00NjI3LDEwICs0NzAwLDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9
IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50
KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NjY4LDEwICs0NzQxLDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0
ZSkpOwogICAgIGF1dG8gYnl0ZUFyZyA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0
ZS0+YXJndW1lbnQoMikpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJnKSkKQEAgLTQ3MDksMTAg
KzQ3ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvY3RldEFyZyA9IGNvbnZlcnQ8dWludDhfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0
b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykp
CkBAIC00NzUwLDEwICs0ODIzLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0FyZyA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAgICBpZiAoVU5MSUtF
TFkoIW9iakFyZykpCkBAIC00NzkxLDEwICs0ODY0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291
bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbG9uZ0Fy
ZyA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5h
cmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDIpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00ODMyLDcgKzQ5MDUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIGFyZyA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTQ4NTIsNyArNDkyNSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gcmVzb2x2ZXIgPSBKU1hQYXRoTlNSZXNvbHZlcjo6dG9XcmFwcGVkKCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFyZXNvbHZlcikpCiAgICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aFhQYXRoTlNSZXNvbHZlclBhcmFtZXRlciIsICJYUGF0aE5TUmVzb2x2ZXIiKTsKQEAgLTQ4OTgs
NyArNDk3MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PHVpbnQzMl90Pigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNTdHJpbmdPck51bGwoc3RhdGUsIGltcGwubnVs
bGFibGVTdHJpbmdTcGVjaWFsTWV0aG9kKFdURk1vdmUoaW5kZXgpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNDkyMCw3ICs0OTkzLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGF1dG8gZW51bUFyZ1ZhbHVlID0gc3Rh
dGUtPmFyZ3VtZW50KDApOwogICAgIFRlc3RPYmo6OkVudW1UeXBlIGVudW1Bcmc7CiAgICAgYXV0
byBvcHRpb25hbFZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFy
Z1ZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvcHRpb25hbFZh
bHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhFbnVt
QXJnIiwgZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlczxUZXN0T2JqOjpFbnVtVHlwZT4oKSk7CkBA
IC00OTQ0LDcgKzUwMTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgT3B0aW9uYWw8VGVzdE9iajo6RW51bVR5cGU+IGVudW1Bcmc7CiAgICAgaWYgKCFl
bnVtQXJnVmFsdWUuaXNVbmRlZmluZWQoKSkgewogICAgICAgICBlbnVtQXJnID0gcGFyc2U8VGVz
dE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghZW51bUFyZykpCiAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
IDAsICJlbnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyIs
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk3
MCw3ICs1MDQzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgog
ICAgICAgICBlbnVtQXJnID0gVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTE7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgYXV0byBvcHRpb25hbFZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5
cGU+KCpzdGF0ZSwgZW51bUFyZ1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJl
bnVtQXJnIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZ0FuZERlZmF1
bHRWYWx1ZSIsIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkp
OwpAQCAtNDk5NSw3ICs1MDY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmcgPSBKU1Rlc3RPYmo6
OnRvV3JhcHBlZChzdGF0ZS0+YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWSghb2JqQXJn
KSkKQEAgLTUwMjAsNyArNTA5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0
cmluZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUwNDAsNyArNTExMyw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5t
ZXRob2RXaXRoTnVsbGFibGVVU1ZTdHJpbmdBcmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA2MCw3ICs1MTMzLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzdHIgPSB2YWx1ZVRvVVNWU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmlu
ZyhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoVVNWU3RyaW5nQXJnVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
MDgwLDcgKzUxNTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcmlhbGl6ZWRBcmcgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCAwLCAwKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zZXJpYWxpemVkVmFsdWUoV1RGTW92ZShzZXJpYWxp
emVkQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTUxNzksNyArNTI1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJndW1lbnQgPSBzdGF0ZS0+YXJndW1l
bnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzU3RyaW5nV2l0aENhY2hlKHN0YXRlLCBpbXBsLnByaXZhdGVNZXRob2QoV1RG
TW92ZShhcmd1bWVudCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBA
IC01MTk5LDcgKzUyNzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wdWJsaWNBbmRQcml2YXRl
TWV0aG9kKFdURk1vdmUoYXJndW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwpAQCAtNTIxOSwxMyArNTI5MiwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBzdGF0
ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIGxpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoc3RhdGUtPmFyZ3VtZW50
KDEpLCAqY2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChzdGF0ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghbGlzdGVuZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsIDEsICJsaXN0ZW5lciIsICJUZXN0T2JqZWN0IiwgImFkZEV2
ZW50TGlzdGVuZXIiLCAiRXZlbnRMaXN0ZW5lciIpOwogICAgIGF1dG8gdXNlQ2FwdHVyZSA9IHN0
YXRlLT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBpbXBsLmFkZEV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwgKmxpc3RlbmVyLCBXVEZNb3Zl
KHVzZUNhcHR1cmUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTI0NSwxMyArNTMxOCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAyKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IGxpc3RlbmVyID0gSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoc3RhdGUtPmFyZ3VtZW50KDEpLCAq
Y2FzdGVkVGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChzdGF0ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghbGlzdGVuZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsIDEsICJsaXN0ZW5lciIsICJUZXN0T2JqZWN0IiwgInJlbW92ZUV2ZW50
TGlzdGVuZXIiLCAiRXZlbnRMaXN0ZW5lciIpOwogICAgIGF1dG8gdXNlQ2FwdHVyZSA9IHN0YXRl
LT5hcmd1bWVudCgyKS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBp
bXBsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV1RGTW92ZSh0eXBlKSwgKmxpc3RlbmVyLCBXVEZNb3Zl
KHVzZUNhcHR1cmUpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTI4NCw3ICs1MzU3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgaW1wbC53aXRoU2NyaXB0U3RhdGVPYmooKnN0YXRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTUzMjEsNyArNTM5NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndp
dGhTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsIGVjKSk7CiAKICAgICBzZXRET01FeGNl
cHRpb24oc3RhdGUsIGVjKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQpAQCAtNTM4MCw3ICs1NDUzLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0
ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsICpjb250ZXh0LCBlYykpOwog
CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTU0MDAsNyArNTQ3Myw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
aW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcygq
c3RhdGUsICpjb250ZXh0KSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTU0ODYsNyArNTU1OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVk
VGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnKFdURk1vdmUob3B0KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MDQsNyAr
NTU3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gb3B0ID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyA2NjYgOiBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZh
dWx0VmFsdWUoV1RGTW92ZShvcHQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtNTUyNCwxMCArNTU5NywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbk9wdCA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJf
dD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnKFdURk1vdmUobm9uT3B0KSwgV1RGTW92ZShvcHQpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTU0NywxMyArNTYyMCwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJv
cihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUp
KTsKICAgICBhdXRvIG5vbk9wdCA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRv
IG9wdDEgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMy
X3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQy
ID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90Pigp
IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgyKSwg
Tm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKFdURk1vdmUobm9uT3B0KSwgV1RGTW92
ZShvcHQxKSwgV1RGTW92ZShvcHQyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU1NzEsNyArNTY0NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBTdHJpbmcoKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5n
KFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU1ODksNyArNTY2Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmco
KSA6IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5n
KFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU2MDcsNyArNTY4MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRv
bSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWlj
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTYyNSw3ICs1Njk4LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSA/IEFTQ0lJTGl0ZXJhbCgiZm9vIikgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0FuZERlZmF1bHRWYWx1ZShXVEZNb3ZlKHN0cikpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NjQzLDcgKzU3MTYsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIHN0ciA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gQXRvbWljU3RyaW5nKCJmb28iLCBBdG9taWNTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdBbmREZWZhdWx0VmFsdWUo
V1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwpAQCAtNTY2MSw3ICs1NzM0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFN0cmluZygp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc051bGwoV1RG
TW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNTY3OSw3ICs1NzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVk
KFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU2OTcsNyArNTc3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVz
dE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwog
ICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBudWxsQXRv
bSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWlj
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxBdG9taWNTdHJpbmdJc051bGwoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTcxNSw3ICs1Nzg4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhv
ZFdpdGhPcHRpb25hbFN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTczMyw3ICs1ODA2LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkgOiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZ0lzRW1wdHlTdHJpbmcoV1RGTW92
ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTc1MSw3ICs1ODI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjpp
bmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IGVtcHR5QXRvbSA6IHN0
YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvQXRvbWljU3RyaW5n
KHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxB
dG9taWNTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NjksNyArNTg0Miw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxkb3VibGU+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05h
TihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC01Nzg3LDcgKzU4NjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBK
U1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3Vt
ZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxGbG9hdElzTmFOKFdURk1vdmUobnVtYmVyKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MDUsNyArNTg3
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQ2NF90PigpIDog
Y29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9w
dGlvbmFsTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTgyMyw3ICs1ODk2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
Y2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PGludDY0X3Q+KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZ0lzWmVybyhXVEZNb3ZlKG51
bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
ODQxLDcgKzU5MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG51bWJlciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWlu
dDY0X3Q+KCkgOiBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyhXVEZNb3ZlKG51bWJlcikpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODU5LDcgKzU5MzIs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNv
bnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJz
aW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxVbnNp
Z25lZExvbmdMb25nSXNaZXJvKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4NzcsNyArNTk1MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYXJyYXkgPSBzdGF0ZS0+YXJndW1lbnQoMCku
aXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PigpIDogdG9OYXRpdmVBcnJh
eTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZShXVEZNb3ZlKGFy
cmF5KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4
OTUsNyArNTk2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
YXJyYXkgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFZlY3RvcjxTdHJpbmc+
KCkgOiB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1l
bnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFNl
cXVlbmNlSXNFbXB0eShXVEZNb3ZlKGFycmF5KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU5MTMsNyArNTk4Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZCgpID8gT3B0aW9uYWw8Ym9vbD4oKSA6IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0Jv
b2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRp
b25hbEJvb2xlYW4oV1RGTW92ZShiKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU5MzEsNyArNjAwNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gYiA9IHN0YXRlLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW5J
c0ZhbHNlKFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CkBAIC02MDA5LDcgKzYwODIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gcmVzb2x2ZXIgPSBudWxs
cHRyOwogICAgIGlmICghc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
ICAgICAgICAgcmVzb2x2ZXIgPSBKU1hQYXRoTlNSZXNvbHZlcjo6dG9XcmFwcGVkKCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzb2x2ZXIpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAicmVzb2x2ZXIi
LCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoT3B0aW9uYWxYUGF0aE5TUmVzb2x2ZXIiLCAiWFBh
dGhOU1Jlc29sdmVyIik7CkBAIC02MDUyLDcgKzYxMjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5vbkNh
bGxiYWNrID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghc3Rh
dGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAiY2FsbGJhY2siLCAi
VGVzdE9iamVjdCIsICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyIpOwpA
QCAtNjExNiw3ICs2MTg5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1bWVudCgxKS5p
c0Z1bmN0aW9uKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIsICJt
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CkBAIC02MjQ5
LDcgKzYzMjIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RP
YmoiKTsKICAgICB9CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRo
b2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Mjc1LDcgKzYzNDgsNyBAQCBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dB
cmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9i
amVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsKICAgICB9CiAgICAgYXV0byBs
b25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQz
Ml90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZChXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Mjk1LDcgKzYzNjgsNyBA
QCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3Rh
dGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZN
b3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC02MzE1LDcgKzYzODgsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobG9uZ0Fy
ZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02Mzc4
LDcgKzY0NTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVBcnJheTxTdHJp
bmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjQxOCw3ICs2NDkxLDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhv
ZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTY0MzgsNyArNjUxMSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFs
dWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8
IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSB0
b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJn
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0NTgs
NyArNjUzMSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVk
TWV0aG9kKFdURk1vdmUoc3RyQXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTY1NDYsNyArNjYxOSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0g
c3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgVGVzdE9iaiogb2JqQXJnID0gbnVsbHB0cjsKICAgICBpZiAoIXN0YXRlLT5hcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC02NTc4LDcgKzY2NTEsNyBAQCBzdGF0aWMg
aW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJvYmpBcmciLCAiVGVz
dE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RP
YmoiKTsKICAgICB9CiAgICAgYXV0byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5k
ZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRl
cihXVEZNb3ZlKG9iakFyZyksIFdURk1vdmUobG9uZ0FyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NjI0LDcgKzY2OTcsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9iakNvCiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8gYXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxp
bnQzMl90PigpIDogY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNOdW1iZXIoVGVzdE9iajo6Y2xhc3NNZXRob2RXaXRoT3B0aW9uYWwoV1RG
TW92ZShhcmcpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjY0
OSw3ICs2NzIyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZShhcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjY2Niw3ICs2NzM5LDcg
QEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpDbwogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEo
V1RGTW92ZSh0eXBlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTY3MDksMTAgKzY3ODIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBj
b252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgQ2xhbXApOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDx1aW50MzJfdD4o
KnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5jbGFzc01ldGhvZFdpdGhDbGFtcChXVEZNb3ZlKG9iakFyZ3NTaG9ydCksIFdURk1v
dmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwpAQCAtNjczMiwxMCArNjgwNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAy
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG9iakFyZ3NTaG9ydCA9
IGNvbnZlcnQ8dWludDE2X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBFbmZvcmNlUmFu
Z2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZ3NMb25nID0gY29udmVydDx1
aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIEVuZm9yY2VSYW5nZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwuY2xhc3NNZXRob2RXaXRoRW5mb3JjZVJhbmdlKFdURk1v
dmUob2JqQXJnc1Nob3J0KSwgV1RGTW92ZShvYmpBcmdzTG9uZykpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzU1LDcgKzY4MjgsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIHVuc2lnbmVkTG9uZ1NlcXVlbmNlID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0
YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1l
dGhvZFdpdGhVbnNpZ25lZExvbmdTZXF1ZW5jZShXVEZNb3ZlKHVuc2lnbmVkTG9uZ1NlcXVlbmNl
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY3NzYs
NyArNjg0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBhdXRvIHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJh
eShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuc3RyaW5nQXJyYXlGdW5j
dGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY4MjEsMTAgKzY4OTQsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBudWxsYWJsZUFy
cmF5QXJnID0gdG9OYXRpdmVBcnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhBbmRXaXRob3V0TnVs
bGFibGVTZXF1ZW5jZShXVEZNb3ZlKGFycmF5QXJnKSwgV1RGTW92ZShudWxsYWJsZUFycmF5QXJn
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY4NDQs
NyArNjkxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gZWxlbWVudElkID0gQXRvbWljU3RyaW5nKHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnRvRXhpc3RpbmdBdG9taWNTdHJpbmcoc3Rh
dGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5nZXRFbGVtZW50QnlJZChXVEZNb3Zl
KGVsZW1lbnRJZCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC02
OTI3LDcgKzcwMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0
MyhXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTY5NDcsNyArNzAyMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSB2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbnZlcnQ0KFdURk1vdmUodmFsdWUpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzAxMiwxMCAr
NzA4NSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlYWQgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZT
dHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8U3RyaW5nPiB0YWls
ID0gdG9OYXRpdmVBcmd1bWVudHM8U3RyaW5nPigqc3RhdGUsIDEpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLnZhcmlhZGljU3RyaW5nTWV0aG9kKFdURk1vdmUoaGVhZCksIFdURk1vdmUo
dGFpbCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03
MDM1LDEwICs3MTA4LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaGVhZCA9IGNvbnZlcnQ8ZG91YmxlPigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFZlY3Rvcjxkb3VibGU+IHRhaWwgPSB0b05hdGl2ZUFyZ3Vt
ZW50czxkb3VibGU+KCpzdGF0ZSwgMSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudmFy
aWFkaWNEb3VibGVNZXRob2QoV1RGTW92ZShoZWFkKSwgV1RGTW92ZSh0YWlsKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwODcsMTAgKzcxNjAsMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1l
bnQoMCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBhdXRvIGIgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBO
b3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbnkoV1RGTW92
ZShhKSwgV1RGTW92ZShiKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKQEAgLTcxMzcsNyArNzIxMCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUg
anNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8Zmxv
YXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8p
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxv
YXRBcmd1bWVudChXVEZNb3ZlKGEpLCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZShzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC03MTg0LDcgKzcyNTcsNyBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlv
bmFsSW50QXJndW1lbnQoV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzIxMCw3ICs3MjgzLDcgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBhID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwudGVzdFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFw
cGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVm
ZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NzMyNCw3ICs3Mzk3LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbmRpdGlv
bmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNzM0Nyw3ICs3NDIwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29u
dmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lv
bik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZN
b3ZlKGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NzM5MCw3ICs3NDYzLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNv
bmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQxMSw3ICs3NDg0LDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBh
ID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29u
dmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZChXVEZNb3ZlKGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwpAQCAtNzQ1MCw3ICs3NTIzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBpbml0ID0gY29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmF0dGFjaFNoYWRvd1Jvb3QoaW5pdC52
YWx1ZSgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNp
b24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3
NSw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKHN0YXRlLT5h
cmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlC
dWZmZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsIDAsICJhcnJheUJ1ZmZlciIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIs
IG51bGxwdHIsICJBcnJheUJ1ZmZlciIpOwpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IGFycmF5QnVmZmVyVmlldyA9IHRvQXJyYXlCdWZmZXJWaWV3KHN0YXRlLT5hcmd1bWVudCgwKSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXJWaWV3KSkK
ICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVs
bHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbmxp
bmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
czo6Y3JlYXRlKFdURk1vdmUoc3RyaW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKSk7CkBAIC0xNDEsNyArMTQxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNW
YWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBB
U1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgVmVjdG9yPGludDMyX3Q+IGxvbmdBcmdzID0gdG9OYXRp
dmVBcmd1bWVudHM8aW50MzJfdD4oKnN0YXRlLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
YXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUo
bG9uZ0FyZ3MpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c1dpdGhTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNl
cXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgaW5saW5l
IEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IqPihz
dGF0ZS0+Y2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRvIHNlcXVl
bmNlT2ZTdHJpbmdzID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8
U3RyaW5nPigpIDogdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc2VxdWVu
Y2VPZlN0cmluZ3MpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0
ZWQoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsK
QEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RK
UwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHJpbmcgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iamVj
dCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOjpjcmVhdGUoV1RGTW92
ZShzdHJpbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQo
c3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVycmlk
ZUJ1aWx0aW5zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T3ZlcnIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gbmFtZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwubmFtZWRJdGVtKFdURk1vdmUobmFtZSkpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMjA1
NDk4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw3
ICsyNTEsOCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yNTksNyArMjYwLDcg
QEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwu
c2V0VmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMjcw
LDcgKzI3MSw4IEBAIGJvb2wgc2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKIHsK
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTI3OCw3ICsyODAs
NyBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSwgMCwgMCk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1w
bC5zZXRDYWNoZWRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlw
ZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCB0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAy
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGhlbGxvID0gc3RhdGUt
PmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNPYmplY3QoKSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
IDEsICJ0ZXN0Q2FsbGJhY2siLCAiVGVzdFR5cGVkZWZzIiwgbnVsbHB0cik7CkBAIC0zNjAsNyAr
MzYwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2
OCw3ICszNjksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25nTG9uZ0F0CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtMzc5LDcgKzM4MCw4IEBAIGJvb2wgc2V0SlNUZXN0VHlw
ZWRlZnNJbW11dGFibGVTZXJpYWxpemUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODcsNyArMzg5LDcgQEAgYm9vbCBzZXRKU1Rl
c3RUeXBlZGVmc0ltbXV0YWJsZVNlcmlhbGl6ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW1tdXRhYmxlU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTM5OCw3ICs0MDAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0
ZXJFeGNlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMq
PihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRU
aGlzKSkgewpAQCAtNDA2LDcgKzQwOSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0
aEdldHRlckV4Y2UKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdURk1v
dmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxNyw3ICs0MjAsOCBAQCBi
b29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDI2LDcgKzQzMCw3
IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNBdHRyV2l0aFNldHRlckV4Y2UKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhTZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShu
YXRpdmVWYWx1ZSksIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKQEAgLTQz
OCw3ICs0NDIsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiB7
CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RUeXBl
ZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpA
QCAtNDQ2LDcgKzQ1MSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aEdl
dHQKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBh
dXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0U3RyaW5n
QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNDU3LDcgKzQ2Miw4IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdB
dHRyV2l0aFNldHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBl
ZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00NjYsNyArNDcyLDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0
cmluZ0F0dHJXaXRoU2V0dAogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVl
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkBAIC00OTEsNyArNDk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RUeXBlZAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0
VHlwZWRlZnM6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIHggPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IFZlY3Rv
cjxpbnQzMl90PigpIDogdG9OYXRpdmVBcnJheTxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZnVuYyhXVEZN
b3ZlKHgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTExLDE5ICs1MTcsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBl
ZAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMykpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB3aWR0aCA9IGNvbnZlcnQ8ZmxvYXQ+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgxKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGF1dG8gYmx1ciA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUt
PmFyZ3VtZW50KDIpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgYXV0byBjb2xvciA9IHN0YXRlLT5hcmd1bWVudCgzKS5pc1VuZGVmaW5lZCgpID8g
U3RyaW5nKCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMykudG9XVEZTdHJpbmcoc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGFscGhhID0gc3RhdGUtPmFyZ3VtZW50KDQp
LmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxmbG9hdD4oKSA6IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDQpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVz
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5zZXRTaGFkb3coV1RGTW92ZSh3aWR0aCks
IFdURk1vdmUoaGVpZ2h0KSwgV1RGTW92ZShibHVyKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUo
YWxwaGEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAt
NTQzLDcgKzU0OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b1JlZlB0ck5hdGl2
ZUFycmF5PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSwgSlNTZXJpYWxpemVkU2NyaXB0VmFsdWU+KCpz
dGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBqc051bWJlcihpbXBsLm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNl
cXVlbmNlQXJnKSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTU2
Myw3ICs1NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9OYXRpdmVBcnJheTxT
dHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC5udWxsYWJsZVNlcXVlbmNlQXJnKFdURk1vdmUoc2VxdWVuY2VBcmcpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTgzLDEwICs1ODksMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBhcmcxID0gY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBhcmcyID0g
c3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDx1aW50NjRfdD4oKSA6
IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBD
bGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZnVuY1dpdGhDbGFtcChXVEZNb3Zl
KGFyZzEpLCBXVEZNb3ZlKGFyZzIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtNjIyLDcgKzYyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0VHlwZWQKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBhdXRvIHZhbHVlcyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNBcnJheShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwuc3RyaW5nU2VxdWVuY2VGdW5jdGlvbihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY0
NSw3ICs2NTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJn
dW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJy
YXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ1NlcXVlbmNl
RnVuY3Rpb24yKFdURk1vdmUodmFsdWVzKSwgZWMpKTsKIApAQCAtNjY3LDcgKzY3Myw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9y
KHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkp
OwogICAgIGF1dG8gc2VxdWVuY2VBcmcgPSB0b1JlZlB0ck5hdGl2ZUFycmF5PFRlc3RFdmVudFRh
cmdldCwgSlNUZXN0RXZlbnRUYXJnZXQ+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0Jvb2xlYW4oaW1wbC5jYWxs
V2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZShXVEZNb3ZlKHNlcXVlbmNlQXJnKSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUv
YnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDggKzE3NywxMiBA
QCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAgICAgICAgIGlmICgh
cm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3Qu
CiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcDsKQEAgLTE5Myw3ICsxOTcsNyBA
QCBib29sIF9OUE5fSW52b2tlRGVmYXVsdChOUFAsIE5QT2JqZWN0KiBvCiAKICAgICAgICAgLy8g
Q29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCiAgICAg
ICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAg
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCiAgICAgfQogCkBAIC0yMjUsOCArMjI5
LDEzIEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBPYmplY3QqIG8sIE4KICAgICAgICAg
Um9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAgICAgaWYgKCFy
b290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisg
ICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZp
ZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CiAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0
aW9uLCBjYWxsRGF0YSk7CkBAIC0yNDAsNyArMjQ5LDcgQEAgYm9vbCBfTlBOX0ludm9rZShOUFAg
bnBwLCBOUE9iamVjdCogbywgTgogCiAgICAgICAgIC8vIENvbnZlcnQgYW5kIHJldHVybiB0aGUg
cmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252ZXJ0VmFsdWVUb05QVmFy
aWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTI2MCwxNCArMjY5LDE4IEBAIGJvb2wgX05QTl9FdmFsdWF0ZShOUFAs
IE5QT2JqZWN0KiBvLCBOUFMKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0
LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRT
dHJpbmcgPSBjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogICAgICAgICAKLSAgICAgICAgSlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUo
KSk7CisgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKGV4ZWMsIG1h
a2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOwogCiAgICAgICAgIGNvbnZl
cnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJldHVyblZhbHVlLCB2YXJpYW50KTsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yODQsMTAgKzI5NywxNCBAQCBib29s
IF9OUE5fR2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9i
amVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2Fz
dDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKICAgICAgICAgCi0gICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICAgICAgaWYg
KGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGV4ZWMs
IGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7CkBAIC0yOTUs
NyArMzEyLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAg
ICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpLT5udW1iZXIoKSk7CiAKICAg
ICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0LCB2YXJpYW50KTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMTgsOCArMzM1LDEyIEBA
IGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgaWYgKCFy
b290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7
CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4o
cHJvcGVydHlOYW1lKTsKIAogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewpAQCAtMzI3LDcg
KzM0OCw3IEBAIGJvb2wgX05QTl9TZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAg
ICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5wdXQob2JqLT5pbXAsIGV4ZWMsIGlkZW50
aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSwgY29udmVydE5QVmFyaWFu
dFRvVmFsdWUoZXhlYywgdmFyaWFudCwgcm9vdE9iamVjdCksIHNsb3QpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iai0+
aW1wLCBleGVjLCBpLT5udW1iZXIoKSwgY29udmVydE5QVmFyaWFudFRvVmFsdWUoZXhlYywgdmFy
aWFudCwgcm9vdE9iamVjdCksIGZhbHNlKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0zNDYsMjcgKzM2NywzMiBAQCBib29sIF9OUE5fUmVtb3ZlUHJvcGVydHko
TlBQLCBOUE9iamVjdCogCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+
aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisK
KyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisK
ICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19jYXN0PElkZW50aWZpZXJSZXAqPihw
cm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkgewogICAgICAgICAgICAg
aWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllckZyb21OUElkZW50aWZp
ZXIoZXhlYywgaS0+c3RyaW5nKCkpKSkgewotICAgICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBpZiAoIW9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpLT5udW1iZXIo
KSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKQogICAgICAgICAgICAgb2JqLT5p
bXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iai0+aW1wLCBleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KG9iai0+aW1wLCBleGVjLCBpLT5udW1iZXIoKSk7CiAKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM4MSwxNyArNDA3LDIxIEBAIGJv
b2wgX05QTl9IYXNQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgaWYgKCFyb290
T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0
LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSWRlbnRpZmllclJlcCogaSA9IHN0YXRpY19j
YXN0PElkZW50aWZpZXJSZXAqPihwcm9wZXJ0eU5hbWUpOwotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJ
ZGVudGlmaWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHJlc3VsdCA9IG9i
ai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpLT5udW1iZXIoKSk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC00MTQsMTAgKzQ0NCwxNCBAQCBib29sIF9OUE5f
SGFzTWV0aG9kKE5QUCwgTlBPYmplY3QqIG8sIE5QCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8
fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBK
U1ZhbHVlIGZ1bmMgPSBvYmotPmltcC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlm
aWVyKGV4ZWMsIGktPnN0cmluZygpKSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiAhZnVuYy5p
c1VuZGVmaW5lZCgpOwogICAgIH0KICAgICAKQEAgLTQ0Myw4ICs0NzcsMTIgQEAgYm9vbCBfTlBO
X0VudW1lcmF0ZShOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICBpZiAoIXJvb3RPYmplY3Qg
fHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAg
ICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwog
ICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSBwcm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MpOwogCiAgICAgICAgIG9iai0+aW1wLT5tZXRob2RUYWJsZSgpLT5nZXRQ
cm9wZXJ0eU5hbWVzKG9iai0+aW1wLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUoKSk7CkBAIC00NTgsNyArNDk2LDcgQEAgYm9vbCBfTlBOX0VudW1lcmF0ZShOUFAsIE5QT2Jq
ZWN0KiBvLCBOUAogICAgICAgICAqaWRlbnRpZmllciA9IGlkZW50aWZpZXJzOwogICAgICAgICAq
Y291bnQgPSBzaXplOwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICAKQEAgLTQ3OSw5ICs1MTcsMTMgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0
KiBvLCBjbwogICAgICAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5yb290T2JqZWN0
OwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9v
dE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRo
ZSBjb25zdHJ1Y3RvciBvYmplY3QuCiAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBvYmot
PmltcDsKQEAgLTQ5Niw3ICs1MzgsNyBAQCBib29sIF9OUE5fQ29uc3RydWN0KE5QUCwgTlBPYmpl
Y3QqIG8sIGNvCiAgICAgICAgIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJl
c3VsdC4KICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmVzdWx0ViwgcmVz
dWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDIwNTQ5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCwxNCArNjgsMTMgQEAgdm9pZCBDSW5zdGFuY2U6OnNldEdsb2JhbEV4Y2VwdGlvbihTdHJp
bgogCiB2b2lkIENJbnN0YW5jZTo6bW92ZUdsb2JhbEV4Y2VwdGlvblRvRXhlY1N0YXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQogICAgIGlmIChnbG9iYWxFeGNlcHRpb25TdHJp
bmcoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgewotICAgICAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVF
cnJvcihleGVjLCBnbG9iYWxFeGNlcHRpb25TdHJpbmcoKSkpOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24g
MjA1NDk4KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU0NvbnRleHRJbnRlcm5hbC5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZUlu
dGVybmFsLmg+CiAjaW1wb3J0IDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KKyNpbXBvcnQgPHJ1
bnRpbWUvQ2F0Y2hTY29wZS5oPgogI2ltcG9ydCA8cnVudGltZS9Db21wbGV0aW9uLmg+CiAjaW1w
b3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KICNpbXBvcnQgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaD4KQEAgLTEyOSw4ICsxMzAsMTAgQEAgc3RhdGljIHZvaWQgYWRkRXhjZXB0
aW9uVG9Db25zb2xlKEV4ZWNTdAogCiBzdGF0aWMgdm9pZCBhZGRFeGNlcHRpb25Ub0NvbnNvbGUo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVj
LT5leGNlcHRpb24oKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIEpTQzo6Vk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisgICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwor
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4
ZWMsIGV4Y2VwdGlvbik7CiB9CiAKQEAgLTMzNCw5ICszMzcsMTIgQEAgLSAoaWQpY2FsbFdlYlNj
cmlwdE1ldGhvZDooTlNTdHJpbmcgKiluYQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8g
TG9vayB1cCB0aGUgZnVuY3Rpb24gb2JqZWN0LgotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBVTlVTRURf
UEFSQU0oc2NvcGUpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gW3NlbGYgX2ltcF0t
PmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhuYW1lKSkpOwog
ICAgIENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtMzY5LDEwICszNzUsMTIgQEAgLSAoaWQpZXZhbHVh
dGVXZWJTY3JpcHQ6KE5TU3RyaW5nICopc2NyaQogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlw
dF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VS
VCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Cisg
ICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5V
U0VEX1BBUkFNKHNjb3BlKTsKICAgICAKICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBK
U01haW5UaHJlYWRFeGVjU3RhdGU6OnByb2ZpbGVkRXZhbHVhdGUoZXhlYywgSlNDOjpQcm9maWxp
bmdSZWFzb246Ok90aGVyLCBtYWtlU291cmNlKFN0cmluZyhzY3JpcHQpKSwgSlNDOjpKU1ZhbHVl
KCkpOwogCkBAIC0zODYsMTcgKzM5NCwxOSBAQCAtICh2b2lkKXNldFZhbHVlOihpZCl2YWx1ZSBm
b3JLZXk6KE5TU3RyCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6anNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KFtzZWxmIF9pbXBdKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChvYmplY3QpOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSksIGNvbnZlcnRPYmpj
VmFsdWVUb1ZhbHVlKGV4ZWMsICZ2YWx1ZSwgT2JqY09iamVjdFR5cGUsIFtzZWxmIF9yb290T2Jq
ZWN0XSksIHNsb3QpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0Nv
bnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgfQogfQogCkBAIC00MDUsMjIgKzQxNSwyNSBAQCAt
IChpZCl2YWx1ZUZvcktleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVT
Y3JpcHRdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgRXhlY1N0YXRlKiBleGVjID0gW3Nl
bGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEFTU0VS
VCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotCiAgICAgaWQgcmVzdWx0T2JqOwogICAgIHsKKyAg
ICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpOworICAgICAgICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKwogICAgICAgICAv
LyBOZWVkIHRvIHNjb3BlIHRoaXMgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSByZWxlYXNlIHRoZSBs
b2NrIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgIC8vIFtzdXBlciB2YWx1ZUZvcktleTprZXldIHdo
aWNoIG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgYnlwYXNzIHRoZSBKU0xvY2sgZGVzdHJ1
Y3RvciwKICAgICAgICAgLy8gbGVhdmluZyB0aGUgbG9jayBwZXJtYW5lbnRseSBoZWxkCi0gICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgICAgICAKKyAgICAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworCisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCk7CisKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IFtzZWxmIF9pbXBdLT5nZXQoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwogICAgICAgICAK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29s
ZShleGVjKTsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmplY3Qg
X2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3VsdCBvcmlnaW5Sb290T2JqZWN0OltzZWxmIF9v
cmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07CkBAIC00Mzcs
MTUgKzQ1MCwxNyBAQCAtICh2b2lkKXJlbW92ZVdlYlNjcmlwdEtleTooTlNTdHJpbmcgKilrCiAg
ICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXhl
Y1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gZ2xv
YmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBhdXRv
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5
KFtzZWxmIF9pbXBdLCBleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIFN0cmluZyhr
ZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShl
eGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICB9CiB9CiAKQEAgLTQ1NCwxNSArNDY5LDE3IEBAIC0gKEJPT0wp
aGFzV2ViU2NyaXB0S2V5OihOU1N0cmluZyAqKWtleQogICAgIGlmICghW3NlbGYgX2lzU2FmZVNj
cmlwdF0pCiAgICAgICAgIHJldHVybiBOTzsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxm
IF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQo
IWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9y
b290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEJPT0wg
cmVzdWx0ID0gW3NlbGYgX2ltcF0tPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRk
RXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC00OTAsMTYgKzUwNywxOCBAQCAtIChpZCl3ZWJTY3JpcHRWYWx1ZUF0SW5kZXg6
KHVuc2lnbmVkKWluCiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBb
c2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIGluZGV4KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
YWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4ZWMpOwogICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIGlkIHJlc3VsdE9iaiA9IFtXZWJTY3JpcHRPYmpl
Y3QgX2NvbnZlcnRWYWx1ZVRvT2JqY1ZhbHVlOnJlc3VsdCBvcmlnaW5Sb290T2JqZWN0OltzZWxm
IF9vcmlnaW5Sb290T2JqZWN0XSByb290T2JqZWN0OltzZWxmIF9yb290T2JqZWN0XV07CkBAIC01
MTIsMTUgKzUzMSwxNyBAQCAtICh2b2lkKXNldFdlYlNjcmlwdFZhbHVlQXRJbmRleDoodW5zaWdu
CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RXhlY1N0YXRlKiBleGVjID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8g
Z2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAgICBh
dXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAgICAgW3NlbGYgX2ltcF0tPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgo
W3NlbGYgX2ltcF0sIGV4ZWMsIGluZGV4LCBjb252ZXJ0T2JqY1ZhbHVlVG9WYWx1ZShleGVjLCAm
dmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBmYWxzZSk7CiAKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjKTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShyZXZpc2lvbiAyMDU0
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOSBAQCBzdGF0aWMgYm9vbCBj
b250YWluc09ubHlBU0NJSVdpdGhOb1VwcGVyCiAgICAgCiBzdGF0aWMgc3RkOjplcnJvcl9jb2Rl
IGdldERvbWFpbkxpc3QoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVjdCogYXJyYXlPYmpl
Y3QsIFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEFTU0VSVCh2
ZWN0b3IuaXNFbXB0eSgpKTsKICAgICBpZiAoIWFycmF5T2JqZWN0IHx8ICFpc0pTQXJyYXkoYXJy
YXlPYmplY3QpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZERvbWFpbkxpc3Q7CkBAIC02OCw3ICs3MSw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUg
Z2V0RG9tYWluTGlzdChFeGUKICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNv
bnN0IEpTVmFsdWUgdmFsdWUgPSBhcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOwotICAgICAgICBp
ZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgaWYg
KHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF2YWx1ZS5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0
dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21haW5MaXN0OwogICAgICAg
ICAKICAgICAgICAgLy8gRG9tYWlucyBzaG91bGQgYmUgcHVueWNvZGUgZW5jb2RlZCBsb3dlciBj
YXNlLgpAQCAtODQsMTEgKzg3LDE0IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0RG9tYWlu
TGlzdChFeGUKIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlY1N0YXRl
JiBleGVjLCBjb25zdCBKU1ZhbHVlJiB0eXBlVmFsdWUsIFJlc291cmNlRmxhZ3MmIGZsYWdzLCB1
aW50MTZfdCAoKnN0cmluZ1RvVHlwZSkoY29uc3QgU3RyaW5nJikpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGlmICghdHlwZVZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBjb25zdCBKU09iamVjdCogb2JqZWN0ID0gdHlwZVZhbHVlLnRvT2JqZWN0KCZleGVjKTsKLSAg
ICBBU1NFUlQoIWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIGlmICghaXNKU0FycmF5KG9iamVjdCkpCiAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk7CiAKQEAgLTk3
LDcgKzEwMyw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEpTVmFsdWUgdmFsdWUgPSBh
cnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24o
KSB8fCAhdmFsdWUpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUpCiAg
ICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVj
dEluVHJpZ2dlckZsYWdzQXJyYXk7CiAgICAgICAgIAogICAgICAgICBTdHJpbmcgbmFtZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTExMywxMiArMTE5LDE1IEBAIHN0YXRpYyBzdGQ6
OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWMKICAgICAKIHN0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgbG9hZFRyaWdnZXIoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU09iamVjdCYgcnVsZU9iamVj
dCwgVHJpZ2dlciYgdHJpZ2dlcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3QgSlNWYWx1ZSB0
cmlnZ2VyT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJmV4ZWMsICJ0cmlnZ2VyIikpOwotICAgIGlmICghdHJpZ2dlck9iamVjdCB8fCBleGVjLmhh
ZEV4Y2VwdGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgaWYgKCF0cmln
Z2VyT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJp
Z2dlcjsKICAgICAKICAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlck9iamVjdCA9IHRyaWdnZXJP
YmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRl
ciIpKTsKLSAgICBpZiAoIXVybEZpbHRlck9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8
ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkKKyAgICBpZiAoIXVybEZpbHRlck9iamVjdCB8
fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdXJsRmlsdGVyT2JqZWN0LmlzU3RyaW5nKCkpCiAgICAg
ICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVVJMRmlsdGVySW5U
cmlnZ2VyOwogCiAgICAgU3RyaW5nIHVybEZpbHRlciA9IHVybEZpbHRlck9iamVjdC50b1dURlN0
cmluZygmZXhlYyk7CkBAIC0xMjgsMTEgKzEzNywxMSBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2Rl
IGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgdHJpZ2dlci51cmxGaWx0ZXIgPSB1cmxGaWx0ZXI7CiAK
ICAgICBjb25zdCBKU1ZhbHVlIHVybEZpbHRlckNhc2VWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidXJsLWZpbHRlci1pcy1jYXNl
LXNlbnNpdGl2ZSIpKTsKLSAgICBpZiAodXJsRmlsdGVyQ2FzZVZhbHVlICYmICFleGVjLmhhZEV4
Y2VwdGlvbigpICYmIHVybEZpbHRlckNhc2VWYWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICBpZiAodXJs
RmlsdGVyQ2FzZVZhbHVlICYmICFzY29wZS5leGNlcHRpb24oKSAmJiB1cmxGaWx0ZXJDYXNlVmFs
dWUuaXNCb29sZWFuKCkpCiAgICAgICAgIHRyaWdnZXIudXJsRmlsdGVySXNDYXNlU2Vuc2l0aXZl
ID0gdXJsRmlsdGVyQ2FzZVZhbHVlLnRvQm9vbGVhbigmZXhlYyk7CiAKICAgICBjb25zdCBKU1Zh
bHVlIHJlc291cmNlVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJyZXNvdXJjZS10eXBlIikpOwotICAgIGlmICghZXhlYy5o
YWRFeGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYg
KCFzY29wZS5leGNlcHRpb24oKSAmJiByZXNvdXJjZVR5cGVWYWx1ZS5pc09iamVjdCgpKSB7CiAg
ICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgcmVzb3VyY2VU
eXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRSZXNvdXJjZVR5cGUpOwogICAgICAgICBpZiAo
dHlwZUZsYWdzRXJyb3IpCiAgICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CkBAIC0x
NDAsNyArMTQ5LDcgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwog
ICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJG
bGFnc0FycmF5OwogCiAgICAgY29uc3QgSlNWYWx1ZSBsb2FkVHlwZVZhbHVlID0gdHJpZ2dlck9i
amVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJsb2FkLXR5cGUi
KSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmpl
Y3QoKSkgeworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgbG9hZFR5cGVWYWx1ZS5pc09i
amVjdCgpKSB7CiAgICAgICAgIGF1dG8gdHlwZUZsYWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhl
YywgbG9hZFR5cGVWYWx1ZSwgdHJpZ2dlci5mbGFncywgcmVhZExvYWRUeXBlKTsKICAgICAgICAg
aWYgKHR5cGVGbGFnc0Vycm9yKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9yOwpA
QCAtMTQ4LDcgKzE1Nyw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhl
Y1MKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmln
Z2VyRmxhZ3NBcnJheTsKIAogICAgIGNvbnN0IEpTVmFsdWUgaWZEb21haW4gPSB0cmlnZ2VyT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgImlmLWRvbWFpbiIp
KTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkg
eworICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkgJiYgaWZEb21haW4uaXNPYmplY3QoKSkgewog
ICAgICAgICBhdXRvIGlmRG9tYWluRXJyb3IgPSBnZXREb21haW5MaXN0KGV4ZWMsIGFzT2JqZWN0
KGlmRG9tYWluKSwgdHJpZ2dlci5kb21haW5zKTsKICAgICAgICAgaWYgKGlmRG9tYWluRXJyb3Ip
CiAgICAgICAgICAgICByZXR1cm4gaWZEb21haW5FcnJvcjsKQEAgLTE2MCw3ICsxNjksNyBAQCBz
dGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAKICAgICBj
b25zdCBKU1ZhbHVlIHVubGVzc0RvbWFpbiA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAidW5sZXNzLWRvbWFpbiIpKTsKLSAgICBpZiAoIWV4
ZWMuaGFkRXhjZXB0aW9uKCkgJiYgdW5sZXNzRG9tYWluLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpbi5pc09iamVjdCgpKSB7CiAgICAgICAg
IGlmICh0cmlnZ2VyLmRvbWFpbkNvbmRpdGlvbiAhPSBUcmlnZ2VyOjpEb21haW5Db25kaXRpb246
Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVW5s
ZXNzQW5kSWZEb21haW47CiAgICAgICAgIGF1dG8gdW5sZXNzRG9tYWluRXJyb3IgPSBnZXREb21h
aW5MaXN0KGV4ZWMsIGFzT2JqZWN0KHVubGVzc0RvbWFpbiksIHRyaWdnZXIuZG9tYWlucyk7CkBA
IC0xODYsMTMgKzE5NSwxNiBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoY29uc3QgU3Ry
aW5nCiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMs
IGNvbnN0IEpTT2JqZWN0JiBydWxlT2JqZWN0LCBBY3Rpb24mIGFjdGlvbiwgYm9vbCYgdmFsaWRT
ZWxlY3RvcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdmFsaWRTZWxlY3RvciA9IHRydWU7CiAgICAg
Y29uc3QgSlNWYWx1ZSBhY3Rpb25PYmplY3QgPSBydWxlT2JqZWN0LmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgImFjdGlvbiIpKTsKLSAgICBpZiAoIWFjdGlvbk9iamVj
dCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFhY3Rpb25PYmplY3QuaXNPYmplY3QoKSkKKyAg
ICBpZiAoIWFjdGlvbk9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05J
bnZhbGlkQWN0aW9uOwogCiAgICAgY29uc3QgSlNWYWx1ZSB0eXBlT2JqZWN0ID0gYWN0aW9uT2Jq
ZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInR5cGUiKSk7Ci0g
ICAgaWYgKCF0eXBlT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXR5cGVPYmplY3Qu
aXNTdHJpbmcoKSkKKyAgICBpZiAoIXR5cGVPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IXR5cGVPYmplY3QuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25F
cnJvcjo6SlNPTkludmFsaWRBY3Rpb25UeXBlOwogCiAgICAgU3RyaW5nIGFjdGlvblR5cGUgPSB0
eXBlT2JqZWN0LnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTIwNSw3ICsyMTcsNyBAQCBzdGF0aWMg
c3RkOjplcnJvcl9jb2RlIGxvYWRBY3Rpb24oRXhlY1N0CiAgICAgICAgIGFjdGlvbiA9IEFjdGlv
blR5cGU6OkJsb2NrQ29va2llczsKICAgICBlbHNlIGlmIChhY3Rpb25UeXBlID09ICJjc3MtZGlz
cGxheS1ub25lIikgewogICAgICAgICBKU1ZhbHVlIHNlbGVjdG9yID0gYWN0aW9uT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInNlbGVjdG9yIikpOwotICAg
ICAgICBpZiAoIXNlbGVjdG9yIHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlz
U3RyaW5nKCkpCisgICAgICAgIGlmICghc2VsZWN0b3IgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IXNlbGVjdG9yLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lv
bkVycm9yOjpKU09OSW52YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZTsKIAogICAgICAgICBT
dHJpbmcgcyA9IHNlbGVjdG9yLnRvV1RGU3RyaW5nKCZleGVjKTsKQEAgLTI0MywxNyArMjU1LDIw
IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFJ1bGUoRXhlY1N0YXQKIAogc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1bGVzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3Ry
aW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiYgcnVsZUxpc3QpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKwogICAgIC8vIEZJWE1FOiBKU09OUGFyc2Ugc2hvdWxkIHJlcXVpcmUgY2FsbGJh
Y2tzIGluc3RlYWQgb2YgYW4gRXhlY1N0YXRlLgogICAgIGNvbnN0IEpTVmFsdWUgZGVjb2RlZFJ1
bGVzID0gSlNPTlBhcnNlKCZleGVjLCBydWxlcyk7CiAKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRp
b24oKSB8fCAhZGVjb2RlZFJ1bGVzKQorICAgIGlmIChzY29wZS5leGNlcHRpb24oKSB8fCAhZGVj
b2RlZFJ1bGVzKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZDsKIAogICAgIGlmICghZGVjb2RlZFJ1bGVzLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVy
biBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0
OwogCiAgICAgY29uc3QgSlNPYmplY3QqIHRvcExldmVsT2JqZWN0ID0gZGVjb2RlZFJ1bGVzLnRv
T2JqZWN0KCZleGVjKTsKLSAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKCF0b3BMZXZlbE9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0dXJl
Tm90QW5PYmplY3Q7CiAgICAgCiAgICAgaWYgKCFpc0pTQXJyYXkodG9wTGV2ZWxPYmplY3QpKQpA
QCAtMjY5LDExICsyODQsMTEgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1
bGVzKAogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OVG9vTWFueVJ1
bGVzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBjb25zdCBKU1ZhbHVlIHZhbHVlID0gdG9wTGV2ZWxBcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkp
OwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdmFsdWUpCisgICAgICAgIGlm
IChzY29wZS5leGNlcHRpb24oKSB8fCAhdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVG9wTGV2ZWxBcnJheTsKIAogICAg
ICAgICBjb25zdCBKU09iamVjdCogcnVsZU9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KCZleGVjKTsK
LSAgICAgICAgaWYgKCFydWxlT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmICghcnVsZU9iamVjdCB8fCBzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVy
biBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkUnVsZTsKIAogICAgICAgICBhdXRv
IGVycm9yID0gbG9hZFJ1bGUoZXhlYywgKnJ1bGVPYmplY3QsIGxvY2FsUnVsZUxpc3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDU0
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDAyLDYgKzQwMDIsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZp
Z3VyZVRleHRUcmFjCiAKIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTVmFsdWUoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEhUTUxN
ZWRpYUVsZW1lbnQmIG1lZGlhKQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8g
bWVkaWFKU1dyYXBwZXIgPSB0b0pTKCZleGVjLCAmZ2xvYmFsT2JqZWN0LCBtZWRpYSk7CiAgICAg
CiAgICAgLy8gUmV0cmlldmUgdGhlIGNvbnRyb2xsZXIgdGhyb3VnaCB0aGUgSlMgb2JqZWN0IGdy
YXBoCkBAIC00MDA5LDE4ICs0MDExLDE4IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udHJvbGxl
ckpTVmFsdWUoSlMKICAgICBpZiAoIW1lZGlhSlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKICAgICAKLSAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0
ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLnZtKCksICJjb250cm9sc0hvc3Qi
KTsKKyAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNIb3N0ID0gSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwgImNvbnRyb2xzSG9zdCIpOwogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9s
c0hvc3RKU1dyYXBwZXIgPSBtZWRpYUpTV3JhcHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9s
c0hvc3QpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCiAgICAg
SlNDOjpKU09iamVjdCogY29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0ID0gSlNDOjpqc0R5bmFt
aWNDYXN0PEpTQzo6SlNPYmplY3QqPihjb250cm9sc0hvc3RKU1dyYXBwZXIpOwogICAgIGlmICgh
Y29udHJvbHNIb3N0SlNXcmFwcGVyT2JqZWN0KQogICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKIAotICAgIEpTQzo6SWRlbnRpZmllciBjb250cm9sbGVySUQgPSBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJmV4ZWMudm0oKSwgImNvbnRyb2xsZXIiKTsKKyAgICBKU0M6OklkZW50aWZp
ZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImNvbnRy
b2xsZXIiKTsKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlckpTV3JhcHBlciA9IGNvbnRyb2xz
SG9zdEpTV3JhcHBlck9iamVjdC0+Z2V0KCZleGVjLCBjb250cm9sbGVySUQpOwotICAgIGlmIChl
eGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwogCiAgICAgcmV0dXJuIGNvbnRyb2xsZXJK
U1dyYXBwZXI7CkBAIC00MDU3LDggKzQwNTksMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1
cGRhdGVDYXB0aW9uQ29udAogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxl
ciA9IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29u
dHJvbGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJK
U1ZhbHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCog
Y29udHJvbGxlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY29u
dHJvbGxlclZhbHVlKTsKQEAgLTQwODMsNyArNDA4Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6dXBkYXRlQ2FwdGlvbkNvbnQKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbm9B
cmd1bWVudHM7CiAgICAgSlNDOjpjYWxsKGV4ZWMsIG1ldGhvZE9iamVjdCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBjb250cm9sbGVyT2JqZWN0LCBub0FyZ3VtZW50cyk7Ci0gICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgbV9oYXZlU2V0
VXBDYXB0aW9uQ29udGFpbmVyID0gdHJ1ZTsKICNlbmRpZgpAQCAtNjYwMyw4ICs2NjA3LDEwIEBA
IGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFDb250cm8KICAgICBET01XcmFwcGVy
V29ybGQmIHdvcmxkID0gZW5zdXJlSXNvbGF0ZWRXb3JsZCgpOwogICAgIFNjcmlwdENvbnRyb2xs
ZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlND
OjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvblZh
bHVlID0gZ2xvYmFsT2JqZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KGV4ZWMsICJjcmVhdGVDb250cm9scyIpKTsKICAgICBpZiAoZnVuY3Rpb25WYWx1ZS5pc0Z1bmN0
aW9uKCkpCkBAIC02NjE3LDggKzY2MjMsOCBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3Vy
ZU1lZGlhQ29udHJvCiAgICAgVVJMIHNjcmlwdFVSTDsKICNlbmRpZgogICAgIHNjcmlwdENvbnRy
b2xsZXIuZXZhbHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUobWVkaWFDb250cm9sc1Njcmlw
dCwgc2NyaXB0VVJMKSwgd29ybGQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjY3Niw4ICs2NjgyLDEwIEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNj
cmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhl
Y1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIC8vIFRoZSBtZWRpYSBjb250cm9scyBzY3JpcHQg
bXVzdCBwcm92aWRlIGEgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyBkZXRhaWxzLgogICAgIC8v
IE5hbWU6IGNyZWF0ZUNvbnRyb2xzCkBAIC02NzA0LDIxICs2NzEyLDIxIEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6ZGlkQWRkVXNlckFnZW50U2gKICAgICBhcmdMaXN0LmFwcGVuZChtZWRpYUNv
bnRyb2xzSG9zdEpTV3JhcHBlcik7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9IGZ1
bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0
YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1ldGhv
ZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxU
eXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6
SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgSlNDOjpKU09iamVj
dCogY29udHJvbGxlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxKU0M6OkpTT2JqZWN0Kj4o
Y29udHJvbGxlclZhbHVlKTsKICAgICBpZiAoIWNvbnRyb2xsZXJPYmplY3QpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIENvbm5lY3QgdGhlIE1lZGlhLCBNZWRpYUNvbnRyb2xsZXJIb3N0LCBh
bmQgQ29udHJvbGxlciBzbyB0aGUgR0Mga25vd3MgYWJvdXQgdGhlaXIgcmVsYXRpb25zaGlwCiAg
ICAgSlNDOjpKU09iamVjdCogbWVkaWFKU1dyYXBwZXJPYmplY3QgPSBtZWRpYUpTV3JhcHBlci50
b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBKU0M6OklkZW50aWZpZXIgY29udHJvbHNI
b3N0ID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLT52bSgpLCAiY29udHJvbHNI
b3N0Iik7CiAgICAgCiAgICAgQVNTRVJUKCFtZWRpYUpTV3JhcHBlck9iamVjdC0+aGFzUHJvcGVy
dHkoZXhlYywgY29udHJvbHNIb3N0KSk7CkBAIC02NzM4LDggKzY3NDYsOCBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAgICAgdXBkYXRlUGFnZVNjYWxlRmFjdG9y
SlNQcm9wZXJ0eSgpOwogICAgIHVwZGF0ZVVzZXNMVFJVc2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0
aW9uSlNQcm9wZXJ0eSgpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2V0TWVkaWFDb250cm9sc0RlcGVuZE9uUGFnZVNjYWxlRmFjdG9yKGJvb2wg
ZGVwZW5kc09uUGFnZVNjYWxlKQpAQCAtNjc3NCwyMSArNjc4MiwyMyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9
IGVuc3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250
cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3Jp
cHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbGxlclZhbHVlID0gY29udHJv
bGxlckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmplY3QsICp0aGlzKTsKICAgICBKU0M6OkpTT2Jq
ZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gY29udHJvbGxlclZhbHVlLnRvT2JqZWN0KGV4ZWMpOwog
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlv
blZhbHVlID0gY29udHJvbGxlck9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyhleGVjLCAiaGFuZGxlUHJlc2VudGF0aW9uTW9kZUNoYW5nZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OkpTT2JqZWN0
KiBmdW5jdGlvbiA9IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFl
eGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAg
ICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0g
ZnVuY3Rpb24tPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7
CiAgICAgaWYgKGNhbGxUeXBlID09IEpTQzo6Q2FsbFR5cGU6Ok5vbmUpCkBAIC02ODE1LDIxICs2
ODI1LDIzIEBAIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpnZXRDdXJyZW50TWVkaWEKIAogICAg
IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCkt
PnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6Ompz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KHdv
cmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNW
YWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgqZXhlYywgKmdsb2JhbE9i
amVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xsZXJPYmplY3QgPSBjb250
cm9sbGVyVmFsdWUudG9PYmplY3QoZXhlYyk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGNvbnRy
b2xsZXJPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywg
ImdldEN1cnJlbnRDb250cm9sc1N0YXR1cyIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkgfHwgZnVuY3Rpb25WYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAogICAgIEpTQzo6SlNPYmplY3QqIGZ1
bmN0aW9uID0gZnVuY3Rpb25WYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBK
U0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5j
dGlvbi0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ0xpc3Q7CkBAIC02ODM4LDcgKzY4NTAsNyBA
QCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAKICAgICBKU0M6OkpT
VmFsdWUgb3V0cHV0VmFsdWUgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgY29udHJvbGxlck9iamVjdCwgYXJnTGlzdCk7CiAKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gb3V0cHV0VmFsdWUuZ2V0U3Ry
aW5nKGV4ZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDU0OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsOSArMzkyLDEx
IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckEKIAogICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1bWVudCgpLmZyYW1lKCktPnNjcmlw
dCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFsT2JqZWN0KGlzb2xhdGVk
V29ybGQpKTsKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpOwogCi0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgSlNDOjpF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKICAgICBhcmdMaXN0LmFwcGVuZCh0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgcm9vdCkpOwpAQCAtNDA4LDggKzQxMCw4IEBAIHZvaWQgSFRNTFBs
dWdJbkltYWdlRWxlbWVudDo6ZGlkQWRkVXNlckEKICAgICAvLyBJdCBpcyBleHBlY3RlZCB0aGUg
SlMgZmlsZSBwcm92aWRlcyBhIGNyZWF0ZU92ZXJsYXkoc2hhZG93Um9vdCwgdGl0bGUsIHN1YnRp
dGxlKSBmdW5jdGlvbi4KICAgICBKU0M6OkpTT2JqZWN0KiBvdmVybGF5ID0gZ2xvYmFsT2JqZWN0
LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJjcmVhdGVPdmVy
bGF5IikpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghb3ZlcmxheSkgewotICAgICAgICBBU1NF
UlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7CkBAIC00MTgsNyArNDIwLDcgQEAgdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
OjpkaWRBZGRVc2VyQQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OmNhbGwoZXhlYywgb3Zl
cmxheSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAog
Ym9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpwYXJ0T2ZTbmFwc2hvdE92ZXJsYXkoY29uc3Qg
Tm9kZSogbm9kZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisy
MDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQg
Q2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlhIFRocm93
U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpoYXNNZXRob2QpOgorICAgICAgICAoV2Vi
S2l0OjpOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmpl
Y3Q6OmdldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6c2V0UHJvcGVy
dHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5Q
SlNPYmplY3Q6Omludm9rZSk6CisKIDIwMTYtMDktMDEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZy
YXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIFRlbXBvcmFyeUNoYW5nZTw+IHRvIG1haW50
YWluIG1fdXNlcklzSW50ZXJhY3RpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlzaW9u
IDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
UEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDEwICsxMDEsMTIgQEAgYm9vbCBO
UEpTT2JqZWN0OjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIAogICAgIGlmICghZXhlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
anNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAoZXhlYywgaWRl
bnRpZmllclJlcCkpOyAgICAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICByZXR1cm4g
Z2V0Q2FsbERhdGEodmFsdWUsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZTo6Tm9uZTsKQEAgLTE0Nyw3
ICsxNDksOSBAQCBib29sIE5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllCiAgICAg
aWYgKCFleGVjKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAg
ICAgYm9vbCByZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCkBAIC0x
NTUsNyArMTU5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQog
ICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywg
aWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOwogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTE2Nyw3ICsxNzEsMTAgQEAgYm9vbCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eShOUElkZW50aWZp
ZQogICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9s
ZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CiAgICAgSlNWYWx1ZSBqc1Jlc3VsdDsKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmco
KSkKICAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApKTsKQEAgLTE3NSw3ICsxODIsNyBA
QCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgICAgIGpzUmVz
dWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAg
ICAKICAgICBtX29iamVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChleGVjLCBqc1Jl
c3VsdCwgKnJlc3VsdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODcsNyArMTk0LDkg
QEAgYm9vbCBOUEpTT2JqZWN0OjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmICghZXhl
YykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTVmFs
dWUganNWYWx1ZSA9IG1fb2JqZWN0TWFwLT5jb252ZXJ0TlBWYXJpYW50VG9KU1ZhbHVlKGV4ZWMs
IG1fb2JqZWN0TWFwLT5nbG9iYWxPYmplY3QoKSwgKnZhbHVlKTsKICAgICBpZiAoaWRlbnRpZmll
clJlcC0+aXNTdHJpbmcoKSkgewpAQCAtMTk1LDcgKzIwNCw3IEBAIGJvb2wgTlBKU09iamVjdDo6
c2V0UHJvcGVydHkoTlBJZGVudGlmaWUKICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUo
KS0+cHV0KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJGcm9tSWRlbnRpZmllclJl
cChleGVjLCBpZGVudGlmaWVyUmVwKSwganNWYWx1ZSwgc2xvdCk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dEJ5SW5kZXgobV9qc09iamVjdC5nZXQo
KSwgZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCksIGpzVmFsdWUsIGZhbHNlKTsKLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDgsMjYgKzIxNywyOSBAQCBib29sIE5QSlNPYmpl
Y3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAgICAgaWYgKCFleGVjKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBpZiAoaWRlbnRpZmllclJlcC0+aXNTdHJp
bmcoKSkgewogICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRnJvbUlk
ZW50aWZpZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkobV9qc09iamVj
dC5nZXQoKSwgZXhlYywgaWRlbnRpZmllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFt
X2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpIHsK
LSAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAK
ICAgICAgICAgbV9qc09iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KG1fanNPYmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKICAgICB9
CiAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1OSw3ICsyNzEsOSBAQCBib29sIE5QSlNP
YmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAgaWYgKCFleGVjKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBDb25zdHJ1Y3REYXRhIGNvbnN0cnVj
dERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0gZ2V0Q29uc3RydWN0RGF0
YShtX2pzT2JqZWN0LmdldCgpLCBjb25zdHJ1Y3REYXRhKTsKQEAgLTI3NSwxMyArMjg5LDE2IEBA
IGJvb2wgTlBKU09iamVjdDo6Y29uc3RydWN0KGNvbnN0IE5QVmFyaWEKICAgICAKICAgICAvLyBD
b252ZXJ0IGFuZCByZXR1cm4gdGhlIG5ldyBvYmplY3QuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZl
cnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCiBib29sIE5QSlNPYmplY3Q6Omludm9rZShFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZnVuY3Rpb24sIGNvbnN0IE5QVmFy
aWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBl
IGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2Fs
bFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCkBAIC0yOTYsNyArMzEzLDcgQEAgYm9vbCBOUEpTT2Jq
ZWN0OjppbnZva2UoRXhlY1N0YXRlKiBleGVjLAogCiAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJu
IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuCiAgICAgbV9vYmplY3RNYXAtPmNvbnZl
cnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywgdmFsdWUsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQ5OCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0
IEBACisyMDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3MgdG8gYmUgdmlh
IFRocm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6
Omludm9rZURlZmF1bHQpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHk6OmNvbnN0cnVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFu
Y2VQcm94eTo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpyZW1vdmVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZW51bWVyYXRlKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6CisKIDIwMTYtMDkt
MDYgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjIwNTQwNy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHkubW0JKHJldmlzaW9uIDIwNTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtODg1
LDggKzg4NSwxMSBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6ZXZhbHVhCiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2socGx1Z2luV29ybGQoKS52bSgpKTsKLSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+IGds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpLnZtKCksIGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmpl
Y3QocGx1Z2luV29ybGQoKSkpOworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3Qodm0s
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSkpOwogICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihhbGxvd1BvcHVwcyA/IE9wdGlvbmFsPFByb2Nl
c3NpbmdVc2VyR2VzdHVyZVN0YXRlPihQcm9jZXNzaW5nVXNlckdlc3R1cmUpIDogTnVsbG9wdCk7
CkBAIC04OTQsNyArODk3LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2
YWx1YQogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNl
KHNjcmlwdCkpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCByZXN1bHQsIHJlc3VsdERh
dGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05MTUsOSArOTE4
LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3Js
ZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5n
ZXQoZXhlYywgbWV0aG9kTmFtZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwpAQCAtOTMwLDcg
KzkzNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UKICAgICBK
U1ZhbHVlIHZhbHVlID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBv
YmplY3QsIGFyZ0xpc3QpOwogICAgICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWUs
IHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC05
NDgsOSArOTU0LDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjppbnZva2UK
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAgICAgQ2FsbERhdGEgY2FsbERh
dGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENh
bGxEYXRhKG9iamVjdCwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6
Tm9uZSkKQEAgLTk2Miw3ICs5NzEsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6aW52b2tlCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGwoZXhlYywgb2JqZWN0LCBjYWxsVHlw
ZSwgY2FsbERhdGEsIG9iamVjdCwgYXJnTGlzdCk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4
ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtOTgwLDkgKzk4OSwxMiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6Y29uc3RyCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAg
Vk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBDb25zdHJ1
Y3REYXRhIGNvbnN0cnVjdERhdGE7CiAgICAgQ29uc3RydWN0VHlwZSBjb25zdHJ1Y3RUeXBlID0g
b2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3REYXRhKG9iamVjdCwgY29uc3RydWN0
RGF0YSk7CkBAIC05OTUsNyArMTAwNyw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Ojpjb25zdHIKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNDOjpjb25zdHJ1Y3QoZXhlYywgb2Jq
ZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdMaXN0KTsKICAgICAKICAgICBt
YXJzaGFsVmFsdWUoZXhlYywgdmFsdWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xMDEzLDEzICsxMDI1LDE2IEBAIGJvb2wgTmV0c2NhcGVQ
bHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3Bs
dWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qo
cGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVj
KTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1
bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKQEAgLTEwMzQsMTMgKzEwNDks
MTYgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldFBybwogICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxk
KCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNj
cmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgdmFs
dWUsIHJlc3VsdERhdGEsIHJlc3VsdExlbmd0aCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xMDU4LDE1ICsxMDc2LDE4IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Ojpz
ZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYg
dm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2Jh
bEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsgICAgCiAKICAgICBKU1ZhbHVl
IHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2YWx1ZUxlbmd0aCk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxl
KCktPnB1dChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgIAot
ICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA4NCwxNCArMTEwNSwxNyBAQCBib29sIE5ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShb
bV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2Jq
ZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2so
ZXhlYyk7ICAgIAogICAgIAogICAgIEpTVmFsdWUgdmFsdWUgPSBkZW1hcnNoYWxWYWx1ZShleGVj
LCB2YWx1ZURhdGEsIHZhbHVlTGVuZ3RoKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1
dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmYWxzZSk7CiAgICAg
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTEwLDE1ICsxMTM0LDE4IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIG9i
amVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAgIAorICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCkBAIC0xMTM2LDE2ICsxMTYz
LDE5IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpyZW1vdmUKICAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3Js
ZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5z
Y3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBpZiAoIW9iamVjdC0+aGFzUHJvcGVydHkoZXhl
YywgcHJvcGVydHlOYW1lKSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIAogICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OyAgICAKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0xMTYzLDExICsxMTkzLDE1IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
OjpoYXNQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVd
KTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBW
TSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmds
b2JhbEV4ZWMoKTsKICAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywg
cHJvcGVydHlOYW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIAorICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMTg1
LDExICsxMjE5LDE1IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNQcm8K
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBw
bHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9
IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKICAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIAorICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIApAQCAtMTIwNywxMSAr
MTI0NSwxNCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzTWV0CiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2lu
V29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFt
ZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0g
ICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jID0gb2JqZWN0LT5n
ZXQoZXhlYywgbWV0aG9kTmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVybiAhZnVuYy5pc1VuZGVmaW5lZCgpOwog
fQogCkBAIC0xMjI5LDkgKzEyNzAsMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OmVudW1lcgogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFt
ZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+
Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogIAogICAgIFByb3Bl
cnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3RyaW5n
cyk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpAQCAtMTI1MSw3ICsxMjk1
LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcgogCiAgICAgbWVt
Y3B5KHJlc3VsdERhdGEsIFtkYXRhIGJ5dGVzXSwgcmVzdWx0TGVuZ3RoKTsKIAotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2
aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02OTM2LDYgKzY5MzYsOSBAQCAtIChCT09MKXNob3VsZENsb3NlCiAj
aWYgIVBMQVRGT1JNKElPUykKIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NG
cm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogeworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOworCiAgICAgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjID0gMDsKICAgICBp
ZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNj
cmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVhbjpqc1ZhbHVlLmFzQm9vbGVhbigpXTsKQEAgLTY5
NzYsOCArNjk3OSw4IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBKU0M6OkpTVmFsdWUgcHJpbWl0aXZl
ID0gb2JqZWN0LT50b1ByaW1pdGl2ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9y
IG51bGxEZXNjcmlwdG9yXTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYWVEZXNjRnJvbUpT
VmFsdWUoZXhlYywgcHJpbWl0aXZlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
NTQ5OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE0IEBACisyMDE2LTA5LTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlvbiBjaGVja3Mg
dG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9QbHVnaW5QYWNrYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5QTl9FdmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpOUE5f
SW52b2tlKToKKwogMjAxNi0wOS0wNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dpbl0gTnVsbCBwb2ludGVyIGNyYXNoIHVuZGVyIFdlYlZpZXc6OnNj
cm9sbE9mZnNldC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2Fn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9QbHVnaW5QYWNr
YWdlLmNwcAkocmV2aXNpb24gMjA1NDk4KQorKysgU291cmNlL1dlYktpdC93aW4vUGx1Z2lucy9Q
bHVnaW5QYWNrYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDE0ICsyMTAsMTggQEAgc3Rh
dGljIGJvb2wgTlBOX0V2YWx1YXRlKE5QUCBpbnN0YW5jZSwgTgogICAgICAgICAvLyBQbHVnaW5W
aWV3LCBzbyB3ZSBkZXN0cm95IGl0IGFzeW5jaHJvbm91c2x5LgogICAgICAgICBQbHVnaW5WaWV3
OjprZWVwQWxpdmUoaW5zdGFuY2UpOwogCi0gICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0g
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgSlNDOjpK
U0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxPYmplY3QgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICAgICAgSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgU3RyaW5nIHNj
cmlwdFN0cmluZyA9IEpTQzo6QmluZGluZ3M6OmNvbnZlcnROUFN0cmluZ1RvVVRGMTYocyk7CiAK
LSAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShyb290T2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtlU291cmNlKHNjcmlwdFN0cmlu
ZyksIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0g
SlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNlKHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1
ZSgpKTsKIAogICAgICAgICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChl
eGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtMjQ3LDggKzI1MSwxMyBAQCBzdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5Q
UCBucHAsIE5QT2JqZWN0CiAgICAgICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9v
dE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxF
eGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICAgICAg
YXV0byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
YXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisKKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVj
LCBKU0M6OkJpbmRpbmdzOjppZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJp
bmcoKSkpOwogICAgICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBKU0M6OkNh
bGxUeXBlIGNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTI2
Miw3ICsyNzEsNyBAQCBzdGF0aWMgYm9vbCBOUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0CiAK
ICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9u
IGNhbGwuCiAgICAgICAgIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4
ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAo=
</data>
<flag name="review"
          id="311437"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288184</attachid>
            <date>2016-09-07 14:20:55 -0700</date>
            <delta_ts>2016-09-07 14:45:26 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-161498.patch</filename>
            <type>text/plain</type>
            <size>854877</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MSBA
QAorMjAxNi0wOS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZpYSBU
aHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0aGUgVGhyb3dTY29wZSBjbGFz
cywgYW5kIGludHJvZHVjZXMgYSBiYXNlIEV4Y2VwdGlvblNjb3BlCisgICAgICAgIHRoYXQgVGhy
b3dTY29wZSBleHRlbmRzLiAgQSBDYXRjaFNjb3BlIHdoaWNoIGV4dGVuZHMgdGhlIEV4Y2VwdGlv
blNjb3BlIGlzIGFsc28KKyAgICAgICAgaW50cm9kdWNlZC4KKworICAgICAgICBFTkFCTEUoVEhS
T1dfU0NPUEVfVkVSSUZJQ0FUSU9OKSBpcyBub3cgcmVuYW1lZCB0byBFTkFCTEUoRVhDRVBUSU9O
X1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAgICAgd2hpY2ggaXMgYSBtb3JlIHN1aXRhYmxlIG5h
bWUgbm93LgorCisgICAgICAgIE5vdGU6IGV4Y2VwdGlvbiBzY29wZSB2ZXJpZmljYXRpb24gaXMg
c3RpbGwgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRoZXJlIGFyZSBzdGlsbAorICAgICAgICBtYW55
IHBsYWNlcyB0aGF0IG5lZWQgdG8gYmUgZml4ZWQgdXAgb3IgcmUtZXhwcmVzc2VkIGluIGEgd2F5
IHRoYXQgaXMgZnJpZW5kbHkKKyAgICAgICAgdG8gdGhlIHZlcmlmaWNhdGlvbi4gIEknbGwgYWRk
cmVzcyB0aG9zZSBpbiBzdWJzZXF1ZW50IHBhdGNoZXMuCisKKyAgICAgICAgQWZ0ZXIgdGhpcyBw
YXRjaCwgdGhlIGNvZGUgd2lsbCBzdGF0aWNhbGx5IGVuZm9yY2UgdGhhdDoKKyAgICAgICAgMS4g
YWxsIGNhbGxzIHRvIHRocm93RXhjZXB0aW9uKCkgZ28gdGhyb3VnaCBhIFRocm93U2NvcGUuCisg
ICAgICAgIDIuIGFsbCBjYWxscyB0byBjbGVhckV4Y2VwdGlvbigpIGdvIHRocm91Z2ggYSBDYXRj
aFNjb3BlLgorICAgICAgICAzLiBhbGwgZXhjZXB0aW9uIGNoZWNrcyBnbyB0aHJvdWdoIGFuIEV4
Y2VwdGlvblNjb3BlIGluIHRoZSBmb3JtIG9mIGEgVGhyb3dTY29wZQorICAgICAgICAgICBvciBD
YXRjaFNjb3BlLgorCisgICAgICAgIEEgU3VtbWFyeSBvZiBob3cgdG8gdXNlIEV4Y2VwdGlvblNj
b3BlcworICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAg
ICAgICAgMS4gSWYgYSBmdW5jdGlvbiBjYW4gdGhyb3cgYSBKUyBleGNlcHRpb24sIGl0IHNob3Vs
ZCBkZWNsYXJlIGEgVGhyb3dTY29wZSBhdCB0aGUKKyAgICAgICAgICAgdG9wIG9mIHRoZSBmdW5j
dGlvbiAoYXMgZWFybHkgYXMgcG9zc2libGUpLgorCisgICAgICAgIDIuIElmIGEgZnVuY3Rpb24g
Y2FuIGNsZWFyIEpTIGV4Y2VwdGlvbnMsIGl0IHNob3VsZCBkZWNsYXJlIGEgQ2F0Y2hTY29wZSBh
dCB0aGUKKyAgICAgICAgICAgdG9wIG9mIHRoZSBmdW5jdGlvbiAoYXMgZWFybHkgYXMgcG9zc2li
bGUpLgorCisgICAgICAgIERlY2xhcmluZyBhIFRocm93U2NvcGUgaW4gYSBmdW5jdGlvbiBtZWFu
cyB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uCisgICAgICAgIHRoYXQg
aXRzIGNhbGxlciB3aWxsIGhhdmUgdG8gaGFuZGxlLiAgRGVjbGFyaW5nIGEgQ2F0Y2hTY29wZSBp
biBhIGZ1bmN0aW9uIG1lYW5zCisgICAgICAgIHRoYXQgdGhlIGZ1bmN0aW9uIGludGVuZHMgdG8g
Y2xlYXIgcGVuZGluZyBleGNlcHRpb25zIGJlZm9yZSByZXR1cm5pbmcgdG8gaXRzCisgICAgICAg
IGNhbGxlci4gCisKKyAgICAgICAgRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBub3RlcyBiZWxv
dy4KKyAgICAgICAgCisgICAgICAgIEV2ZXJ5dGhpbmcgeW91IG1heSB3YW50IHRvIGtub3cgYWJv
dXQgRXhjZXB0aW9uU2NvcGVzCisgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgIEV4Y2VwdGlvblNjb3BlIHZlcmlmaWNh
dGlvbiB3b3JrcyB0byBzaW11bGF0ZSBleGNlcHRpb24gdGhyb3dzIGFuZCBkZXRlY3QgY2FzZXMK
KyAgICAgICAgd2hlcmUgZXhjZXB0aW9uIGNoZWNrcyBhcmUgbWlzc2luZy4gIFRoZSBub3RlcyBi
ZWxvdyB3aWxsIGNvdmVyOgorCisgICAgICAgICAgICAxLiBUaGUgVk06Om1fbmVlZEV4Y2VwdGlv
bkNoZWNrIGJpdAorICAgICAgICAgICAgMi4gVGhyb3dTY29wZXMgYW5kIENhdGNoU2NvcGVzCisg
ICAgICAgICAgICAzLiBWZXJpZmljYXRpb24gb2YgbmVlZGVkIGV4Y2VwdGlvbiBjaGVja3MKKyAg
ICAgICAgICAgIDMuIENoZWNraW5nIEV4Y2VwdGlvbnMKKyAgICAgICAgICAgIDQuIFNpbXVsYXRp
bmcgdGhyb3dzCisgICAgICAgICAgICA1LiBVc2luZyBUaHJvd1Njb3BlOjpyZWxlYXNlKCkgYW5k
IENhdGNoU2NvcGU6OnJlbGVhc2UoKQorICAgICAgICAgICAgNi4gQ2hlY2tpbmcgZXhjZXB0aW9u
cyB3aXRoIFRocm93U2NvcGU6OmV4Y2VwdGlvbigpIC8gQ2F0Y2hTY29wZTo6ZXhjZXB0aW9uKCkK
KyAgICAgICAgICAgIDcuIENoZWNraW5nIGV4Y2VwdGlvbnMgYnkgY2hlY2tpbmcgY2FsbGVlIHJl
c3VsdHMKKyAgICAgICAgICAgIDguIERlYnVnZ2luZyB2ZXJpZmljYXRpb24gZXJyb3JzCisKKyAg
ICAgICAgMS4gVGhlIFZNOjptX25lZWRFeGNlcHRpb25DaGVjayBiaXQKKworICAgICAgICAgICBU
aGUgVk0gaGFzIGEgbV9uZWVkRXhjZXB0aW9uQ2hlY2sgYml0IHRoYXQgaW5kaWNhdGVzIHdoZW4g
YW4gZXhjZXB0aW9uIG1heSBiZQorICAgICAgICAgICB0aHJvd24uICBZb3UgY2FuIHRoaW5rIG9m
IHRoZSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQgYmVpbmcgc2V0IGFzIGEgc2ltdWxhdGVkCisg
ICAgICAgICAgIHRocm93LgorCisgICAgICAgIDIuIFRocm93U2NvcGVzIGFuZCBDYXRjaFNjb3Bl
cworCisgICAgICAgICAgIE9ubHkgVGhyb3dTY29wZXMgbWF5IHRocm93RXhjZXB0aW9uLiAgT25s
eSBDYXRjaFNjb3BlcyBtYXkgY2F0Y2hFeGNlcHRpb24uCisKKyAgICAgICAgICAgRXZlcnkgdGhy
b3cgc2l0ZSBtdXN0IGRlY2xhcmUgYSBUaHJvd1Njb3BlIGluc3RhbmNlIHVzaW5nIERFQ0xBUkVf
VEhST1dfU0NPUEUKKyAgICAgICAgICAgYXQgdGhlIHRvcCBvZiBpdHMgZnVuY3Rpb24gKGFzIGVh
cmx5IGFzIHBvc3NpYmxlKSBlLmcuCisgCisgICAgICAgICAgICAgICAgdm9pZCBmb28oLi4uKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIC4uLik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgIE5vdGU6IGJ5IGNvbnZlbnRpb24sIGV2ZXJ5IHRocm93IGhlbHBl
ciBmdW5jdGlvbiBtdXN0IHRha2UgYSBUaHJvd1Njb3BlIGFyZ3VtZW50CisgICAgICAgICAgIGlu
c3RlYWQgb2YgaW5zdGFudGlhdGluZyBpdHMgb3duIFRocm93U2NvcGUuICBUaGlzIGFsbG93cyB0
aGUgdGhyb3cgdG8gYmUKKyAgICAgICAgICAgYXR0cmlidXRlZCB0byB0aGUgY2xpZW50IGNvZGUg
cmF0aGVyIHRoYW4gdGhlIHRocm93IGhlbHBlciBpdHNlbGYuCisKKyAgICAgICAgICAgRXZlcnkg
Y2F0Y2ggc2l0ZSAoaS5lLiBhIHNpdGUgdGhhdCBjYWxscyBjbGVhckV4Y2VwdGlvbigpKSBtdXN0
IGRlY2xhcmUgYQorICAgICAgICAgICBDYXRjaFNjb3BlIGluc3RhbmNlIHVzaW5nIERFQ0xBUkVf
Q0FUQ0hfU0NPUEUgYXQgdGhlIHRvcCBvZiBpdHMgZnVuY3Rpb24uCisKKyAgICAgICAgICAgSWYg
YSBmdW5jdGlvbiBjYW4gYm90aCB0aHJvdyBvciBjbGVhciBleGNlcHRpb25zLCB0aGVuIHRoZSBU
aHJvd1Njb3BlIHNob3VsZAorICAgICAgICAgICBiZSBkZWNsYXJlZCBmaXJzdCBzbyB0aGF0IGl0
IGNhbiBzaW11bGF0ZSBhIHRocm93IHRvIHRoZSBmdW5jdGlvbidzIGNhbGxlci4KKworICAgICAg
ICAgICBOb3RlOiBUaHJvd1Njb3BlIGFuZCBDYXRjaFNjb3BlIGJvdGggZXh0ZW5kIEV4Y2VwdGlv
blNjb3BlIHNvIHRoYXQgVGhyb3dTY29wZXMKKyAgICAgICAgICAgY2FuIGJlIGF3YXJlIGlmIHRo
ZXJlJ3MgYW4gZW5jbG9zaW5nIENhdGNoU2NvcGUgYmV0d2VlbiBpdCBhbmQgdGhlIHBvaW50IHdo
ZXJlCisgICAgICAgICAgIEMrKyBjb2RlIHJldHVybnMgdG8gSlMgY29kZS4gIFRoaXMgaXMgbmVl
ZGVkIHRvIGRldGVybWluZSBpZiB0aGUgVGhyb3dTY29wZQorICAgICAgICAgICBzaG91bGQgc2lt
dWxhdGUgYSByZS10aHJvdyBvciBub3QuICBTZWUgKDQpIGJlbG93IGZvciBtb3JlIGRldGFpbHMg
b24gcmV0dXJuaW5nCisgICAgICAgICAgIHRvIEpTIGNvZGUuCisKKyAgICAgICAgMy4gVmVyaWZp
Y2F0aW9uIG9mIG5lZWRlZCBleGNlcHRpb24gY2hlY2tzCisKKyAgICAgICAgICAgYS4gT24gY29u
c3RydWN0aW9uLCBlYWNoIFRocm93U2NvcGUgYW5kIENhdGNoU2NvcGUgd2lsbCB2ZXJpZnkgdGhh
dAorICAgICAgICAgICAgICBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sgaXMgbm90IHNldC4KKyAK
KyAgICAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNhbGxlciBvZiB0aGUgY3VycmVu
dCBmdW5jdGlvbiBoYXMgY2hlY2tlZCBmb3IgZXhjZXB0aW9ucworICAgICAgICAgICAgICB3aGVy
ZSBuZWVkZWQgYmVmb3JlIGRvaW5nIG1vcmUgd29yayB3aGljaCBsZWFkIHRvIGNhbGxpbmcgdGhl
IGN1cnJlbnQgZnVuY3Rpb24uCisKKyAgICAgICAgICAgYi4gT24gZGVzdHJ1Y3Rpb24sIGVhY2gg
VGhyb3dTY29wZSBhbmQgQ2F0Y2hTY29wZSB3aWxsIHZlcmlmeSB0aGF0CisgICAgICAgICAgICAg
IFZNOjptX25lZWRFeGNlcHRpb25DaGVjayBpcyBub3Qgc2V0LiBUaGlzIHZlcmlmaWNhdGlvbiB3
aWxsIGJlIHNraXBwZWQgaWYKKyAgICAgICAgICAgICAgdGhlIFRocm93U2NvcGUgaGFzIGJlZW4g
cmVsZWFzZWQgKHNlZSAoNSkgYmVsb3cpLgorCisgICAgICAgICAgICAgIFRoaXMgZW5zdXJlcyB0
aGF0IHRoZSBmdW5jdGlvbiB0aGF0IG93bnMgdGhpcyBleGNlcHRpb24gc2NvcGUgaXMgbm90IG1p
c3NpbmcKKyAgICAgICAgICAgICAgYW55IGV4Y2VwdGlvbiBjaGVja3MgYmVmb3JlIHJldHVybmlu
Zy4KKworICAgICAgICAgICBjLiBXaGVuIHRocm93aW5nIGFuIGV4Y2VwdGlvbiwgdGhlIFRocm93
U2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sKKyAgICAgICAg
ICAgICAgaXMgbm90IGFscmVhZHkgc2V0LCB1bmxlc3MgaXQncyBiZWVuIGFzayB0byByZXRocm93
IHRoZSBzYW1lIEV4Y2VwdGlvbiBvYmplY3QuCisKKyAgICAgICAgNC4gU2ltdWxhdGluZyB0aHJv
d3MKKworICAgICAgICAgICBUaHJvd3MgYXJlIHNpbXVsYXRlZCBieSBzZXR0aW5nIHRoZSBtX25l
ZWRFeGNlcHRpb25DaGVjayBiaXQuCisKKyAgICAgICAgICAgVGhlIGJpdCB3aWxsIG9ubHkgYmUg
c2V0IGluIHRoZSBUaHJvd1Njb3BlIGRlc3RydWN0b3IgZXhjZXB0IHdoZW4gdGhlIFRocm93U2Nv
cGUKKyAgICAgICAgICAgZGV0ZWN0cyB0aGUgY2FsbGVyIGlzIGEgTExJbnQgb3IgSklUIGZ1bmN0
aW9uLiAgTExJbnQgb3IgSklUIGZ1bmN0aW9ucyB3aWxsIGFsd2F5cworICAgICAgICAgICBjaGVj
ayBmb3IgZXhjZXB0aW9ucyBhZnRlciBhIGhvc3QgQysrIGZ1bmN0aW9uIHJldHVybnMgdG8gaXQu
ICBIb3dldmVyLCB0aGV5IHdpbGwKKyAgICAgICAgICAgbm90IGNsZWFyIHRoZSBtX25lZWRFeGNl
cHRpb25DaGVjayBiaXQuCisKKyAgICAgICAgICAgSGVuY2UsIGlmIHRoZSBUaHJvd1Njb3BlIGRl
c3RydWN0b3IgZGV0ZWN0cyB0aGUgY2FsbGVyIGlzIGEgTExJbnQgb3IgSklUIGZ1bmN0aW9uLAor
ICAgICAgICAgICBpdCB3aWxsIGp1c3Qgc2tpcCB0aGUgc2V0dGluZyBvZiB0aGUgYml0LgorCisg
ICAgICAgICAgIE5vdGU6IGl0IGlzIG5vdCBuZWVkZWQgbm9yIGNvcnJlY3QgdG8gc2V0IHRoZSBt
X25lZWRFeGNlcHRpb25DaGVjayBiaXQgaW4gdGhlCisgICAgICAgICAgIHRocm93RXhjZXB0aW9u
IG1ldGhvZHMuICBUaGlzIGlzIGJlY2F1c2UsIGluIHByYWN0aWNlLCB3ZSBhbHdheXMgcmV0dXJu
CisgICAgICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4gIEl0
IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBzZXQgdGhlIGJpdCBpbgorICAgICAgICAgICB0aGUgdGhy
b3cganVzdCB0byBoYXZlIHRvIGNsZWFyIGl0IGltbWVkaWF0ZWx5IGFmdGVyIGJlZm9yZSB3ZSBk
byB2ZXJpZmljYXRpb24gaW4KKyAgICAgICAgICAgdGhlIFRocm93U2NvcGUgZGVzdHJ1Y3Rvci4K
KworICAgICAgICA1LiBVc2luZyBUaHJvd1Njb3BlOjpyZWxlYXNlKCkgYW5kIENhdGNoU2NvcGU6
OnJlbGVhc2UoKQorCisgICAgICAgICAgIENhbGxpbmcgcmVsZWFzZSgpIG1lYW5zIHRoYXQgdGhl
IHNjb3BlIGlzIHJlbGVhc2VkIGZyb20gaXRzIG9ibGlnYXRpb24gdG8KKyAgICAgICAgICAgdmVy
aWZ5IHRoZSBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sgYml0IG9uIGRlc3RydWN0aW9uLgorCisg
ICAgICAgICAgIHJlbGVhc2UoKSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBib3R0b20gb2Yg
YSBmdW5jdGlvbiBpZjoKKworICAgICAgICAgICBhLiBUaGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRv
IGxldCBpdHMgY2FsbGVyIGNoZWNrIGFuZCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgZS5nLgorCisg
ICAgICAgICAgICAgICAgdm9pZCBmb28oLi4uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGdvbygpOyAvLyBtYXkgdGhyb3cuCisKKyAgICAg
ICAgICAgICAgICAgICAgLi4uIC8vIENvZGUgdGhhdCB3aWxsIGFyZSBub3QgYWZmZWN0ZWQgYnkg
YSBwZW5kaW5nIGV4Y2VwdGlvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFz
ZSgpOyAvLyB0ZWxsIHRoZSBUaHJvd1Njb3BlIHRoYXQgdGhlIGNhbGxlciB3aWxsIGhhbmRsZSB0
aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICBiLiBUaGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGRv
IGEgdGFpbCBjYWxsIHRoYXQgbWF5IHRocm93LgorCisgICAgICAgICAgICAgICAgdm9pZCBmb28o
Li4uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAg
ICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOyAvLyB0ZWxsIHRoZSBUaHJvd1Njb3BlIHRo
YXQgdGhlIGNhbGxlciB3aWxsIGhhbmRsZSB0aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ29vKCk7IC8vIG1heSB0aHJvdy4KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgcmVsZWFzZSgpIHNob3VsZCBub3QgYmUgdXNlZCBpbiBjb2RlIHBhdGhzIHRo
YXQgYnJhbmNoLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgICAgICAgIHZvaWQgZm9vKC4uLikK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGdvbzEoKTsgLy8gbWF5IHRocm93LgorICAgICAgICAgICAgICAgICAgICBzY29wZS5yZWxlYXNl
KCk7IC8vIFdST05HICEhISBEb24ndCBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGdvbzIoKTsgLy8gbWF5IHRocm93LgorICAgICAgICAgICAgICAgICAg
ICAuLi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFRoZSBhYm92ZSB3aWxsIHJlc3VsdCBpbiBhIHZlcmlmaWNhdGlv
biBlcnJvciBpbiBnb28yKCkncyBUaHJvd1Njb3BlLiAgVGhlCisgICAgICAgICAgICBwcm9wZXIg
d2F5IHRvIGZpeCB0aGlzIHZlcmlmaWNhdGlvbiBpcyB0byBkbyBlaXRoZXIgKDYpIG9yICg3KSBi
ZWxvdy4KKworICAgICAgICAgNi4gQ2hlY2tpbmcgZXhjZXB0aW9ucyB3aXRoIFRocm93U2NvcGU6
OmV4Y2VwdGlvbigpIC8gQ2F0Y2hTY29wZTo6ZXhjZXB0aW9uKCkKKworICAgICAgICAgICAgVGhy
b3dTY29wZS9DYXRjaFNjb3BlOjpleGNlcHRpb24oKSByZXR1cm5zIHRoZSB0aHJvd24gRXhjZXB0
aW9uIG9iamVjdCBpZgorICAgICAgICAgICAgdGhlcmUgaXMgb25lIHBlbmRpbmcuICBFbHNlLCBp
dCByZXR1cm5zIG51bGxwdHIuCisKKyAgICAgICAgICAgIEl0IGFsc28gY2xlYXJzIHRoZSBtX25l
ZWRFeGNlcHRpb25DaGVjayBiaXQgdGhlcmVieSBpbmRpY2F0aW5nIHRoYXQgd2UndmUKKyAgICAg
ICAgICAgIHNhdGlzZmllZCB0aGUgbmVlZGVkIGV4Y2VwdGlvbiBjaGVjay4gIEZvciBleGFtcGxl
LAorCisgICAgICAgICAgICAgICAgdm9pZCBmb28oLi4uKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZ29vMSgpOyAvLyBtYXkgdGhyb3cu
CisgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBnb28y
KCk7IC8vIG1heSB0aHJvdy4KKyAgICAgICAgICAgICAgICAgICAgLi4uCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBC
dXQgc29tZXRpbWVzLCBmb3Igb3B0aW1pemF0aW9uIHJlYXNvbnMsIHdlIG1heSBjaG9vc2UgdG8g
dGVzdCB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICB0aGUgY2FsbGVlIGZ1bmN0aW9uIGluc3Rl
YWQgZG9pbmcgYSBsb2FkIG9mIHRoZSBWTSBleGNlcHRpb24gdmFsdWUuICBTZWUgKDcpCisgICAg
ICAgICAgICBiZWxvdy4KKworICAgICAgICAgNy4gQ2hlY2tpbmcgZXhjZXB0aW9ucyBieSBjaGVj
a2luZyBjYWxsZWUgcmVzdWx0cworCisgICAgICAgICAgICBUaGlzIGFwcHJvYWNoIHNob3VsZCBv
bmx5IGJlIGFwcGxpZWQgd2hlbiBpdCBtYWtlcyBhIGRpZmZlcmVuY2UgdG8gcGVyZm9ybWFuY2Uu
CisgICAgICAgICAgICBJZiB3ZSBuZWVkIHRvIGRvIHRoaXMsIHdlIHNob3VsZCBhZGQgYW4gQVNT
RVJUKCkgdGhhdCBpbnZva2VzIHRoZSBzY29wZSdzCisgICAgICAgICAgICBleGNlcHRpb24oKSBt
ZXRob2QgdG8gdmVyaWZ5IHRoZSByZXN1bHQuICBTaW5jZSBleGNlcHRpb24gc2NvcGUgdmVyaWZp
Y2F0aW9uCisgICAgICAgICAgICBpcyBvbmx5IGRvbmUgb24gREVCVUcgYnVpbGRzLCB0aGlzIEFT
U0VSVCB3aWxsIHNhdGlzZnkgdGhlIHZlcmlmaWNhdGlvbgorICAgICAgICAgICAgcmVxdWlyZW1l
bnRzIHdpdGhvdXQgaW1wYWN0aW5nIHBlcmZvcm1hbmNlLiAgRm9yIGV4YW1wbGUsCisKKyAgICAg
ICAgICAgICAgICB2b2lkIGZvbyguLi4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBmYWlsZWQgPSBnb28xKCk7IC8vIG1heSB0aHJvdy4KKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gZmFpbGVkKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdvbzIoKTsgLy8gbWF5IHRocm93Lgor
ICAgICAgICAgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgIDguIERlYnVnZ2luZyB2ZXJpZmljYXRp
b24gZXJyb3JzCisKKyAgICAgICAgICAgIGEuIFdoZW4gdmVyaWZpY2F0aW9uIGZhaWxzLCB5b3Ug
d2lsbCBzZWUgYSBtZXNzYWdlIGZvbGxvd2VkIGJ5IGFuIGFzc2VydGlvbgorICAgICAgICAgICAg
ICAgZmFpbHVyZS4gIEZvciBleGFtcGxlOgorCisgICAgICAgICAgICBFUlJPUjogVW5jaGVja2Vk
IEpTIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBUaGlzIHNjb3BlIGNhbiB0aHJvdyBhIEpT
IGV4Y2VwdGlvbjogc2V0VXBDYWxsIEAgL1ZvbHVtZXMvRGF0YS93czYvT3BlblNvdXJjZS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEyNDUKKyAgICAgICAg
ICAgICAgICAgICAgKEV4Y2VwdGlvblNjb3BlOjptX3JlY3Vyc2lvbkRlcHRoIHdhcyAuLi4pCisg
ICAgICAgICAgICAgICAgQnV0IHRoZSBleGNlcHRpb24gd2FzIHVuY2hlY2tlZCBhcyBvZiB0aGlz
IHNjb3BlOiB2YXJhcmdzU2V0dXAgQCAvVm9sdW1lcy9EYXRhL3dzNi9PcGVuU291cmNlL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHA6MTM5OAorICAgICAgICAg
ICAgICAgICAgICAoRXhjZXB0aW9uU2NvcGU6Om1fcmVjdXJzaW9uRGVwdGggd2FzIC4uLikKKyAg
ICAgICAgICAgICAgICBbIGJhY2t0cmFjZSBoZXJlIF0KKworICAgICAgICAgICAgICAgVGhlIG1l
c3NhZ2UgdGVsbHMgeW91IHRoYXQgZmFpbHVyZSB3YXMgZGV0ZWN0ZWQgYXQgaW4gdmFyYXJnc1Nl
dHVwKCkgYXQKKyAgICAgICAgICAgICAgIExMSW50U2xvd1BhdGhzLmNwcCBsaW5lIDEzOTgsIGFu
ZCB0aGF0IHRoZSBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVjayBzaG91bGQKKyAgICAgICAgICAgICAg
IGhhdmUgaGFwcGVuZWQgc29tZXdoZXJlIGJldHdlZW4gdGhlIGNhbGwgdG8gc2V0VXBDYWxsKCkg
YXQgTExJbnRTbG93UGF0aHMuY3BwCisgICAgICAgICAgICAgICBsaW5lIDEyNDUgYW5kIGl0Lgor
CisgICAgICAgICAgICAgICBJZiB0aGF0IGlzIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbiwgeW91
IGNhbiAuLi4KKworICAgICAgICAgICAgYi4gRHVtcCBzaW11bGF0ZWQgdGhyb3dzCisKKyAgICAg
ICAgICAgICAgIFJlLXJ1biB0aGUgdGVzdCBjYXNlIHdpdGggSlNDX2R1bXBTaW11bGF0ZWRUaHJv
d3M9dHJ1ZS4gIFlvdSB3aWxsIGFsc28gc2VlCisgICAgICAgICAgICAgICBiYWNrIHRyYWNlcyBh
dCBlYWNoIHNpbXVsYXRlZCB0aHJvdy4KKworICAgICAgICAgICAgYy4gTmFycm93aW5nIGRvd24g
dGhlIHNvdXJjZSBvZiBhIHNpbXVsYXRlZCB0aHJvdworCisgICAgICAgICAgICAgICBBbm90aGVy
IHRlY2huaXF1ZSBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNvdXJjZSBvZiBzaW11bGF0ZWQgdGhy
b3dzIGlzIGJ5CisgICAgICAgICAgICAgICBmdXJ0aGVyIGRpdmlkaW5nIGEgZnVuY3Rpb24gdG8g
c21hbGxlciByZWdpb25zIGJ5IHNlcGFyYXRpbmcgZWFjaCByZWdpb24KKyAgICAgICAgICAgICAg
IHdpdGggYWRkaXRpb25hbCBsb2NhbCB0aHJvdyBzY29wZXMuICBGb3IgZXhhbXBsZSwKKworICAg
ICAgICAgICAgICAgIC4uLiAvLyBSZWdpb24gMQorICAgICAgICAgICAgICAgIHsgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOyB9CisgICAgICAgICAgICAgICAgLi4uIC8vIFJl
Z2lvbiAyCisgICAgICAgICAgICAgICAgeyBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7IH0KKyAgICAgICAgICAgICAgICAuLi4gLy8gUmVnaW9uIDMKKworICAgICAgICAqIEFQ
SS9BUElVdGlscy5oOgorICAgICAgICAoaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQpOgorICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNw
cDoKKyAgICAgICAgKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y2FsbCk6CisgICAg
ICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWU6OnRvU3RyaW5nKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKiBkZWJ1Z2dl
ci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1l
OjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Om9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI6OmNyZWF0ZUluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpyZXBvcnRBUElFeGNlcHRp
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAg
ICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZVdpdGhTY29wZUV4
dGVuc2lvbik6CisgICAgICAgIChJbnNwZWN0b3I6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJ
bnRlcm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2NyaXB0
SG9zdDo6d2Vha01hcEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVkU2Ny
aXB0SG9zdDo6d2Vha1NldEVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpKU0luamVjdGVk
U2NyaXB0SG9zdDo6aXRlcmF0b3JFbnRyaWVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNKYXZh
U2NyaXB0Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SlNKYXZhU2NyaXB0Q2Fs
bEZyYW1lOjpldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbik6CisgICAgICAgICogaW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpleHRyYWN0
U291cmNlSW5mb3JtYXRpb25Gcm9tRXhjZXB0aW9uKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9D
YWNoZWRDYWxsLmg6CisgICAgICAgIChKU0M6OkNhY2hlZENhbGw6OkNhY2hlZENhbGwpOgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6
OmNsZWFyRXhjZXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjpleGNl
cHRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjU3RhdGU6OmhhZEV4Y2VwdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6bGFzdEV4Y2VwdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6Y2xlYXJMYXN0RXhjZXB0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OmV2YWwpOgorICAgICAgICAoSlNDOjpzaXplT2ZWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6bm90
aWZ5RGVidWdnZXJPZlVud2luZGluZyk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp1bndp
bmQpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpl
eGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JS
ZXBlYXRDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpTdXNwZW5kRXhjZXB0
aW9uU2NvcGU6OlN1c3BlbmRFeGNlcHRpb25TY29wZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5jcHA6CisgICAgICAgIChKU0M6OlNoYWRvd0NoaWNrZW46OmZ1bmN0aW9u
c09uU3RhY2spOgorICAgICAgICAqIGppdC9KSVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Q29kZTo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAo
V1RGOjpJbXB1cmVHZXR0ZXI6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoR2xvYmFsT2JqZWN0Ojptb2R1
bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUVsZW1lbnQpOgorICAgICAg
ICAoZnVuY3Rpb25SdW4pOgorICAgICAgICAoZnVuY3Rpb25SdW5TdHJpbmcpOgorICAgICAgICAo
ZnVuY3Rpb25Mb2FkKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZFN0cmluZyk6CisgICAgICAgIChm
dW5jdGlvblJlYWRGaWxlKToKKyAgICAgICAgKGZ1bmN0aW9uQ2hlY2tTeW50YXgpOgorICAgICAg
ICAoZnVuY3Rpb25TZXRSYW5kb21TZWVkKToKKyAgICAgICAgKGZ1bmN0aW9uTG9hZE1vZHVsZSk6
CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZUJ1aWx0aW4pOgorICAgICAgICAoZnVuY3Rpb25DaGVj
a01vZHVsZVN5bnRheCk6CisgICAgICAgIChmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KToK
KyAgICAgICAgKGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzKToKKyAgICAgICAg
KGR1bXBFeGNlcHRpb24pOgorICAgICAgICAoY2hlY2tVbmNhdWdodEV4Y2VwdGlvbik6CisgICAg
ICAgIChydW5XaXRoU2NyaXB0cyk6CisgICAgICAgIChydW5JbnRlcmFjdGl2ZSk6CisgICAgICAg
ICogbGxpbnQvTExJbnRFeGNlcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnJldHVy
blRvVGhyb3cpOgorICAgICAgICAoSlNDOjpMTEludDo6Y2FsbFRvVGhyb3cpOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NM
T1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2Vx
dWVuY2VQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlckNvbXBpbGF0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkNvbXBpbGF0aW9uOjp0b0pTKToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckRhdGFiYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmls
ZXI6OkRhdGFiYXNlOjp0b0pTKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9TUkV4aXRT
aXRlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ok9TUkV4aXRTaXRlOjp0b0pTKToKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6
UHJvZmlsZXI6Ok9yaWdpblN0YWNrOjp0b0pTKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdEFycmF5KToKKyAgICAg
ICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlNDOjp1bnNoaWZ0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jVG9M
b2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpzbG93Sm9pbik6CisgICAgICAgIChKU0M6OmZh
c3RKb2luKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpT
Qzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1JldmVyc2UpOgorICAgICAgICAoSlNDOjph
cnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6
CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJy
YXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9m
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgIChK
U0M6Om1vdmVFbGVtZW50cyk6CisgICAgICAgIChKU0M6OmNvbmNhdEFwcGVuZE9uZSk6CisgICAg
ICAgIChKU0M6OmFycmF5UHJvdG9Qcml2YXRlRnVuY0NvbmNhdE1lbWNweSk6CisgICAgICAgICog
cnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RX
aXRoQm9vbGVhbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6Y2FsbCk6CisgICAgICAgICogcnVudGltZS9DYXRjaFNjb3BlLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkNhdGNoU2NvcGU6OkNhdGNoU2NvcGUpOgorICAgICAgICAo
SlNDOjpDYXRjaFNjb3BlOjp+Q2F0Y2hTY29wZSk6CisgICAgICAgICogcnVudGltZS9DYXRjaFNj
b3BlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYXRjaFNjb3BlOjpjbGVhckV4Y2VwdGlvbik6
CisgICAgICAgIChKU0M6OkNhdGNoU2NvcGU6OkNhdGNoU2NvcGUpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1v
blNsb3dQYXRoczo6b3BJbik6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHNFeGNl
cHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjppbnRlcnByZXRlclRo
cm93SW5DYWxsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAg
IChKU0M6OmV2YWx1YXRlKToKKyAgICAgICAgKEpTQzo6cmVqZWN0UHJvbWlzZSk6CisgICAgICAg
IChKU0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6CisgICAgICAgIChKU0M6OmxvYWRNb2R1bGUp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNv
bnNvbGVQcm90b0Z1bmNBc3NlcnQpOgorICAgICAgICAoSlNDOjpjb25zb2xlUHJvdG9GdW5jUHJv
ZmlsZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNQcm9maWxlRW5kKToKKyAgICAg
ICAgKEpTQzo6Y29uc29sZVByb3RvRnVuY1Rha2VIZWFwU25hcHNob3QpOgorICAgICAgICAoSlND
Ojpjb25zb2xlUHJvdG9GdW5jVGltZSk6CisgICAgICAgIChKU0M6OmNvbnNvbGVQcm90b0Z1bmNU
aW1lRW5kKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdERhdGUpOgorICAgICAgICAoSlNDOjpkYXRlUGFyc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1
bmNUb1ByaW1pdGl2ZVN5bWJvbCk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNUb0pTT04p
OgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICog
cnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6
c2FuaXRpemVkVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBydW50
aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJp
bnRJbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGVMb2Nh
dGlvbi5oLgorICAgICAgICAoSlNDOjpFeGNlcHRpb25FdmVudExvY2F0aW9uOjpFeGNlcHRpb25F
dmVudExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZUxvY2F0aW9uOjpUaHJvd1Nj
b3BlTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OkV4Y2VwdGlvblNjb3BlKToKKyAgICAgICAgKEpTQzo6
RXhjZXB0aW9uU2NvcGU6On5FeGNlcHRpb25TY29wZSk6CisgICAgICAgICogcnVudGltZS9FeGNl
cHRpb25TY29wZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OnZtKToK
KyAgICAgICAgKEpTQzo6RXhjZXB0aW9uU2NvcGU6OnJlY3Vyc2lvbkRlcHRoKToKKyAgICAgICAg
KEpTQzo6RXhjZXB0aW9uU2NvcGU6OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OkV4Y2VwdGlv
blNjb3BlOjpFeGNlcHRpb25TY29wZSk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RnVuY3Rpb25Ta2lwcGluZ0V2YWxF
bmFibGVkQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50
czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRl
ci5jcHA6CisgICAgICAgIChKU0M6OmNhbGxHZXR0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6aW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uT2JqZWN0TG9nKToKKyAgICAgICAgKiBydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFz
c1N0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpJbnRsQ29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcik6CisgICAgICAgIChKU0M6
OkludGxDb2xsYXRvcjo6Y3JlYXRlQ29sbGF0b3IpOgorICAgICAgICAoSlNDOjpJbnRsQ29sbGF0
b3I6OnJlc29sdmVkT3B0aW9ucyk6CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3JDb25z
dHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEludGxDb2xsYXRvcik6CisgICAg
ICAgIChKU0M6OkludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6
CisgICAgICAgICogcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkludGxDb2xsYXRv
clByb3RvdHlwZUdldHRlckNvbXBhcmUpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bERhdGVUaW1l
Rm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6dG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKToKKyAg
ICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQp
OgorICAgICAgICAoSlNDOjpJbnRsRGF0ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyk6Cisg
ICAgICAgIChKU0M6OkludGxEYXRlVGltZUZvcm1hdDo6Zm9ybWF0KToKKyAgICAgICAgKiBydW50
aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0SW50bERhdGVUaW1lRm9ybWF0KToKKyAgICAgICAgKEpTQzo6SW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3JGdW5jU3VwcG9ydGVkTG9jYWxlc09mKToKKyAgICAgICAgKiBydW50aW1l
L0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkludGxEYXRl
VGltZUZvcm1hdEZ1bmNGb3JtYXREYXRlVGltZSk6CisgICAgICAgIChKU0M6OkludGxEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZUdldHRlckZvcm1hdCk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVt
YmVyRm9ybWF0LmNwcDoKKyAgICAgICAgKEpTQzo6SW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6
ZU51bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OmNyZWF0ZU51
bWJlckZvcm1hdCk6CisgICAgICAgIChKU0M6OkludGxOdW1iZXJGb3JtYXQ6OnJlc29sdmVkT3B0
aW9ucyk6CisgICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RJbnRsTnVtYmVyRm9ybWF0KToKKyAgICAgICAgKEpT
Qzo6SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZik6Cisg
ICAgICAgICogcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6SW50bE51bWJlckZvcm1hdEZ1bmNGb3JtYXROdW1iZXIpOgorICAgICAgICAoSlNDOjpJ
bnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlR2V0dGVyRm9ybWF0KToKKyAgICAgICAgKiBydW50aW1l
L0ludGxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjppbnRsQm9vbGVhbk9wdGlvbik6CisgICAg
ICAgIChKU0M6OmludGxTdHJpbmdPcHRpb24pOgorICAgICAgICAoSlNDOjppbnRsTnVtYmVyT3B0
aW9uKToKKyAgICAgICAgKEpTQzo6Y2Fub25pY2FsaXplTG9jYWxlTGlzdCk6CisgICAgICAgIChK
U0M6OnN1cHBvcnRlZExvY2FsZXMpOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVjdElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmthcm91bmRG
b3JMZWdhY3lJbnRsQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpTQzo6
aXRlcmF0b3JTdGVwKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JDbG9zZSk6CisgICAgICAgIChK
U0M6Oml0ZXJhdG9yRm9ySXRlcmFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmg6CisgICAgICAgIChKU0M6OmZvckVhY2hJbkl0ZXJhYmxlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXkuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpwdXNoKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6Y29weVRvQXJn
dW1lbnRzKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OmNvbnN0cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclBy
b3RvRnVuY1NsaWNlKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OmdldExlbmd0aCk6CisgICAgICAgIChKU0M6OnRvTGVuZ3RoKToKKyAgICAgICAg
KiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdldEJvdW5kRnVu
Y3Rpb25TdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2
ZUJ5SW5kZXgpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKToKKyAg
ICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnRvUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmdldFByb3BlcnR5
U2xvdCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmVxdWFsU2xvd0Nhc2VJbmxpbmUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNEYXRhVmlld1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Omdl
dERhdGEpOgorICAgICAgICAoSlNDOjpzZXREYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVu
Y3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpzZXRGdW5jdGlvbk5hbWUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaDoKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc6OnNldEluZGV4KToKKyAgICAgICAgKiBydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld0Zyb21JdGVyYXRvcik6CisgICAgICAg
IChKU0M6OmNvbnN0cnVjdEdlbmVyaWNUeXBlZEFycmF5Vmlld1dpdGhBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaDoKKyAgICAg
ICAgKEpTQzo6c3BlY2llc0NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY0NvcHlXaXRoaW4pOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRB
cnJheVZpZXdQcm90b0Z1bmNJbmNsdWRlcyk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvRnVuY0luZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b0Z1bmNKb2luKToKKyAgICAgICAgKEpTQzo6Z2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG9GdW5jTGFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjpnZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmdlbmVyaWNUeXBlZEFycmF5Vmlld1By
aXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0RW1wdHlBcnJheSk6CisgICAgICAgIChKU0M6
OmNvbnN0cnVjdEFycmF5KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlOZWdhdGl2ZUlu
ZGV4ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgor
ICAgICAgICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisgICAgICAgICogcnVudGltZS9KU0pvYi5j
cHA6CisgICAgICAgIChKU0M6OkpTSm9iTWljcm90YXNrOjpydW4pOgorICAgICAgICAqIHJ1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlRW52aXJv
bm1lbnQ6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpmZXRjaCk6CisgICAgICAg
ICogcnVudGltZS9KU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpT
TW9kdWxlTmFtZXNwYWNlT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6
aW5zdGFudGlhdGVEZWNsYXJhdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcik6CisgICAgICAgIChK
U0M6OlN0cmluZ2lmaWVyOjpzdHJpbmdpZnkpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6
dG9KU09OKToKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFs
dWUpOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorICAgICAgICAoSlNDOjpKU09OUHJv
dG9GdW5jUGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpvcmRpbmFyeVNldFNsb3cpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2V0UHJvdG90
eXBlV2l0aEN5Y2xlQ2hlY2spOgorICAgICAgICAoSlNDOjpjYWxsVG9QcmltaXRpdmVGdW5jdGlv
bik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZlKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmRlZmluZU93bk5vbkluZGV4UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0TWV0aG9kKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpjcmVhdGVMaXN0RnJvbUFycmF5TGlrZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQ
cm9wZXJ0eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RQcm9taXNlKToKKyAgICAgICAgKiBydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorICAgICAgICAoSlNDOjpwcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmlzVW5zY29wYWJsZSk6CisgICAg
ICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcu
Y3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6ZXF1YWxTbG93Q2FzZSk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHA6CisgICAgICAgIChKU0M6OkpTU3RyaW5nSm9pbmVy
Ojpqb2luKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UpOgorICAgICAgICAqIHJ1bnRpbWUv
TWFwQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RNYXApOgorICAgICAg
ICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmND
bHozMik6CisgICAgICAgIChKU0M6Om1hdGhQcm90b0Z1bmNIeXBvdCk6CisgICAgICAgIChKU0M6
Om1hdGhQcm90b0Z1bmNJTXVsKToKKyAgICAgICAgKiBydW50aW1lL01vZHVsZUxvYWRlclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZVBhcnNlTW9kdWxl
KToKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUHJvdG90eXBlUmVxdWVzdGVkTW9kdWxlcyk6
CisgICAgICAgIChKU0M6Om1vZHVsZUxvYWRlclByb3RvdHlwZU1vZHVsZURlY2xhcmF0aW9uSW5z
dGFudGlhdGlvbik6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aE51bWJlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZik6Cisg
ICAgICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yU2V0UHJvdG90eXBlT2YpOgorICAgICAgICAo
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyk6CisgICAg
ICAgIChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlOYW1lcyk6CisgICAgICAg
IChKU0M6Om9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlTeW1ib2xzKToKKyAgICAgICAg
KEpTQzo6b2JqZWN0Q29uc3RydWN0b3JLZXlzKToKKyAgICAgICAgKEpTQzo6b3duRW51bWVyYWJs
ZVByb3BlcnR5S2V5cyk6CisgICAgICAgIChKU0M6OnRvUHJvcGVydHlEZXNjcmlwdG9yKToKKyAg
ICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JEZWZpbmVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OmRlZmluZVByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvclNl
YWwpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSk6CisgICAgICAgIChK
U0M6Om9iamVjdENvbnN0cnVjdG9ySXNTZWFsZWQpOgorICAgICAgICAoSlNDOjpvYmplY3RDb25z
dHJ1Y3RvcklzRnJvemVuKToKKyAgICAgICAgKEpTQzo6b2JqZWN0Q29uc3RydWN0b3JJc0V4dGVu
c2libGUpOgorICAgICAgICAoSlNDOjpvd25Qcm9wZXJ0eUtleXMpOgorICAgICAgICAqIHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0T2JqZWN0RnJv
bVByb3BlcnR5RGVzY3JpcHRvcik6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0eSk6CisgICAg
ICAgIChKU0M6Om9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2YpOgorICAgICAgICAoSlNDOjpv
YmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1
bmNEZWZpbmVTZXR0ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIpOgorICAgICAg
ICAoSlNDOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSk6CisgICAgICAgIChK
U0M6Om9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6b2JqZWN0
UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OmpzQWRkU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5o
OgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yOjpzbG93R2V0dGVyU2V0dGVyKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3h5Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjptYWtlUmV2b2NhYmxlUHJv
eHkpOgorICAgICAgICAqIHJ1bnRpbWUvUHJveHlPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpQ
cm94eU9iamVjdDo6dG9TdHJpbmdOYW1lKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5R2V0
KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1HZXQpOgorICAgICAgICAoSlND
OjpQcm94eU9iamVjdDo6cGVyZm9ybUludGVybmFsTWV0aG9kR2V0T3duUHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6UHJveHlPYmplY3Q6OnBlcmZvcm1QdXQpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6
cHV0QnlJbmRleENvbW1vbik6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm94eUNhbGwpOgorICAg
ICAgICAoSlNDOjpwZXJmb3JtUHJveHlDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpQcm94eU9i
amVjdDo6cGVyZm9ybURlbGV0ZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3Jt
UHJldmVudEV4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUlz
RXh0ZW5zaWJsZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtRGVmaW5lT3du
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybUdldE93blByb3Bl
cnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpQcm94eU9iamVjdDo6cGVyZm9ybVNldFByb3RvdHlw
ZSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpwZXJmb3JtR2V0UHJvdG90eXBlKToKKyAg
ICAgICAgKiBydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpyZWZsZWN0
T2JqZWN0Q29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdERlZmluZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdEdldCk6CisgICAgICAgIChKU0M6OnJl
ZmxlY3RPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpyZWZs
ZWN0T2JqZWN0SXNFeHRlbnNpYmxlKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFByZXZl
bnRFeHRlbnNpb25zKToKKyAgICAgICAgKEpTQzo6cmVmbGVjdE9iamVjdFNldCk6CisgICAgICAg
IChKU0M6OnJlZmxlY3RPYmplY3RTZXRQcm90b3R5cGVPZik6CisgICAgICAgICogcnVudGltZS9S
ZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnRvRmxhZ3MpOgorICAgICAgICAo
SlNDOjpyZWdFeHBDcmVhdGUpOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RSZWdFeHApOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKEpTQzo6aXNSZWdF
eHApOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
Y29sbGVjdE1hdGNoZXMpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6Om1hdGNoR2xvYmFs
KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoSlNDOjpmbGFnc1N0cmluZyk6Cisg
ICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6cmVn
RXhwUHJvdG9HZXR0ZXJGbGFncyk6CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1NlYXJj
aEZhc3QpOgorICAgICAgICAoSlNDOjpyZWdFeHBQcm90b0Z1bmNTcGxpdEZhc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RT
ZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpzdHJpbmdGcm9tQ29kZVBvaW50KToKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0V2l0aFN0
cmluZ0NvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAq
IHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5n
UmVnRXhwU2VhcmNoKToKKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uU3RyaW5nUHJvdG9GdW5jUmVw
bGFjZVJlZ0V4cEVtcHR5U3RyKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZVVzaW5nU3RyaW5nU2Vh
cmNoKToKKyAgICAgICAgKEpTQzo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3Rv
RnVuY1JlcGxhY2VVc2luZ1JlZ0V4cCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2VVc2luZ1N0cmluZ1NlYXJjaCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0Nv
ZGVQb2ludEF0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU2xpY2UpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QpOgorICAgICAgICAoSlNDOjpzdHJpbmdQ
cm90b0Z1bmNTdWJzdHIpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWJzdHJpbmcp
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKToKKyAgICAgICAg
KEpTQzo6dG9Mb2NhbGVDYXNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jQmlnKToK
KyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU21hbGwpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNCbGluayk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0JvbGQpOgor
ICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGaXhlZCk6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0l0YWxpY3MpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdHJpa2Up
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNTdWIpOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNTdXApOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250Y29sb3Ip
OgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSk6CisgICAgICAgIChKU0M6
OnN0cmluZ1Byb3RvRnVuY0FuY2hvcik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xp
bmspOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jU3RhcnRzV2l0aCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0VuZHNXaXRo
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nSW5jbHVkZXNJbXBsKToKKyAgICAgICAgKEpTQzo6c3Ry
aW5nUHJvdG9GdW5jSW5jbHVkZXMpOgorICAgICAgICAoSlNDOjpidWlsdGluU3RyaW5nSW5jbHVk
ZXNJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY05vcm1hbGl6ZSk6Cisg
ICAgICAgICogcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnN5
bWJvbENvbnN0cnVjdG9yRm9yKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnku
Y3BwOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVjdCk6
CisgICAgICAgICogcnVudGltZS9UaHJvd1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6VGhyb3dT
Y29wZTo6VGhyb3dTY29wZSk6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6On5UaHJvd1Njb3Bl
KToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAo
SlNDOjpUaHJvd1Njb3BlOjpzaW11bGF0ZVRocm93KToKKyAgICAgICAgKEpTQzo6VGhyb3dTY29w
ZTo6cHJpbnRJZk5lZWRDaGVjayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlRocm93U2NvcGU6
OnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL1Rocm93U2NvcGUuaDoKKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6cmVsZWFz
ZSk6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6OlRocm93U2NvcGUpOgorICAgICAgICAoSlND
OjpUaHJvd1Njb3BlOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlRocm93U2NvcGU6
OnZtKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VGhyb3dTY29wZTo6ZXhjZXB0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6dmVyaWZ5RXhjZXB0
aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKEpTQzo6Vk06OmV4Y2VwdGlvbik6CisgICAgICAgIChKU0M6OlZNOjpjbGVhckV4Y2VwdGlv
bik6CisgICAgICAgIChKU0M6OlZNOjpzZXRFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0
V2Vha01hcCk6CisgICAgICAgICogcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpjb25zdHJ1Y3RXZWFrU2V0KToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZN
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25QcmludCk6CisKIDIwMTYtMDkt
MDcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIGVtaXRB
bGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yJ3Mgc3ViMzIoKSBkaXNhbGxvdy1zY3JhdGNoLWZy
aWVuZGx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
MDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTYzMSw2ICs2MzEsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHAKICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCiAgICAgcnVudGltZS9DYWxsRGF0YS5jcHAKKyAgICBydW50aW1lL0NhdGNoU2NvcGUuY3Bw
CiAgICAgcnVudGltZS9DbG9uZWRBcmd1bWVudHMuY3BwCiAgICAgcnVudGltZS9Db2RlQ2FjaGUu
Y3BwCiAgICAgcnVudGltZS9Db2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcApAQCAtNjYwLDggKzY2
MSwxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHAKICAgICBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvRXhj
ZXB0aW9uLmNwcAorICAgIHJ1bnRpbWUvRXhjZXB0aW9uRXZlbnQuY3BwCisgICAgcnVudGltZS9F
eGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAogICAgIHJ1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHAK
ICAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisgICAgcnVudGltZS9FeGNlcHRpb25T
Y29wZS5jcHAKICAgICBydW50aW1lL0V4ZWN1dGFibGUuY3BwCiAgICAgcnVudGltZS9GdW5jdGlv
bkNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDEyICszMDEsMTQgQEAg
cHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIG5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKICAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgSW1wdXJlR2V0dGVyKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEltcHVyZUdldHRlcio+KG9iamVjdCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAodGhpc09iamVjdC0+bV9kZWxlZ2F0ZSkgewogICAgICAgICAgICAgaWYgKHRoaXNP
YmplY3QtPm1fZGVsZWdhdGUtPmdldFByb3BlcnR5U2xvdChleGVjLCBuYW1lLCBzbG90KSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTEwMzcsMTEgKzEw
MzksMTQgQEAgc3RhdGljIFN0cmluZyByZXNvbHZlUGF0aChjb25zdCBEaXJlY3RvcgogCiBKU0lu
dGVybmFsUHJvbWlzZSogR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFsdWUpCiB7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKKwogICAgIEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVk
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CiAgICAgY29uc3QgSWRlbnRpZmllciBrZXkgPSBrZXlWYWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1
ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9u
KTsKICAgICB9CiAKQEAgLTEwNTQsOSArMTA1OSw5IEBAIEpTSW50ZXJuYWxQcm9taXNlKiBHbG9i
YWxPYmplY3Q6Om1vZHVsZUwKICAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4
ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQ291bGQgbm90IHJlc29sdmUgdGhl
IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBj
b25zdCBJZGVudGlmaWVyIHJlZmVycmVyID0gcmVmZXJyZXJWYWx1ZS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwor
ICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBk
ZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KHJlZmVycmVyLmlzU3ltYm9sKCkpIHsKQEAgLTExNDIsMTEgKzExNDcsMTMgQEAgc3RhdGljIGJv
b2wgZmV0Y2hNb2R1bGVGcm9tTG9jYWxGaWxlU3lzdAogCiBKU0ludGVybmFsUHJvbWlzZSogR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUp
CiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBk
ZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOwogICAgIFN0cmluZyBtb2R1bGVLZXkgPSBrZXkudG9XVEZTdHJpbmcoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4
Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwogICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOwog
ICAgIH0KIApAQCAtMTI1Nyw5ICsxMjY0LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkNyZQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0
ZUVsZW1lbnQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIFJvb3QqIHJv
b3QgPSBqc0R5bmFtaWNDYXN0PFJvb3QqPihleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKCFy
b290KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjcmVhdGUgRWxl
bWVudCB3aXRob3V0IGEgUm9vdC4iKSkpKTsKQEAgLTE0NDcsNyArMTQ1NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25SdW4KICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAg
IGlmICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQpA
QCAtMTQ4MSw3ICsxNDg4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blJ1bgogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0
cmluZyBzb3VyY2UgPSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgIEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0s
IEdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLCBqc051bGwoKSksIFZlY3RvcjxTdHJp
bmc+KCkpOwpAQCAtMTUwOSw3ICsxNTE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkxvYQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAgICAgaWYgKCFmZXRjaFNjcmlwdEZy
b21Mb2NhbEZpbGVTeXN0ZW0oZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNTMwLDcgKzE1MzcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIHNvdXJjZUNvZGUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogCkBAIC0xNTQ3
LDcgKzE1NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUmVhCiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZp
bGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVj
dG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
ZmlsZU5hbWUsIHNjcmlwdCkpCkBAIC0xNTYyLDcgKzE1NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGZpbGVOYW1lID0gZXhlYy0+YXJndW1lbnQoMCkudG9X
VEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgVmVjdG9yPGNoYXI+IHNjcmlwdDsKICAgICBpZiAoIWZl
dGNoU2NyaXB0RnJvbUxvY2FsRmlsZVN5c3RlbShmaWxlTmFtZSwgc2NyaXB0KSkKQEAgLTE2MjIs
OCArMTYyOSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRSYW5kb21TZWVkKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIHVuc2lnbmVkIHNlZWQgPSBleGVjLT5h
cmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPndlYWtSYW5kb20oKS5zZXRTZWVkKHNlZWQpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0xODc2LDE0ICsxODg2LDE0IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2EKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgZmlsZU5hbWUgPSBleGVjLT5hcmd1bWVudCgw
KS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBWZWN0b3I8Y2hhcj4gc2NyaXB0OwogICAgIGlm
ICghZmV0Y2hTY3JpcHRGcm9tTG9jYWxGaWxlU3lzdGVtKGZpbGVOYW1lLCBzY3JpcHQpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBj
cmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7
CiAKICAgICBKU0ludGVybmFsUHJvbWlzZSogcHJvbWlzZSA9IGxvYWRBbmRFdmFsdWF0ZU1vZHVs
ZShleGVjLCBmaWxlTmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGVycm9yOwpAQCAtMTkwMSwxNCAr
MTkxMSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hCiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVCdWlsdGluKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PCAxIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU3RyaW5nIGZ1bmN0aW9uVGV4dCA9
IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKLSAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSA9IG1ha2VTb3VyY2UoZnVuY3Rp
b25UZXh0KTsKICAgICBKU0Z1bmN0aW9uKiBmdW5jID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRp
bkZ1bmN0aW9uKHZtLCBjcmVhdGVCdWlsdGluRXhlY3V0YWJsZSh2bSwgc291cmNlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZvbyIpLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIENvbnN0
cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCktPmxpbmsodm0sIHNvdXJjZSksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7CiAKQEAgLTE5MjcsNyArMTkzOSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DaGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhlYy0+YXJndW1lbnQoMCku
dG9XVEZTdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdG9wV2F0Y2ggc3RvcFdhdGNoOwpAQCAtMTk1
MywxNCArMTk2NSwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxh
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFw
c2hvdChFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSGVhcFNuYXBzaG90
QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIoZXhlYy0+dm0oKS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7
CiAgICAgc25hcHNob3RCdWlsZGVyLmJ1aWxkU25hcHNob3QoKTsKIAogICAgIFN0cmluZyBqc29u
U3RyaW5nID0gc25hcHNob3RCdWlsZGVyLmpzb24oKTsKICAgICBFbmNvZGVkSlNWYWx1ZSByZXN1
bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBhcnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTk5OCw3
ICsyMDEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNhbQogCiAg
ICAgU3RyaW5nIGpzb25TdHJpbmcgPSB2bS5zYW1wbGluZ1Byb2ZpbGVyKCktPnN0YWNrVHJhY2Vz
QXNKU09OKCk7CiAgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZW5jb2RlKEpT
T05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQpAQCAtMjEwMSw2ICsyMTE1LDE2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
IAogc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlvbihHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBleGNlcHRpb24pCiB7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworI2RlZmluZSBDSEVD
S19FWENFUFRJT04oKSBkbyB7IFwKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7IFwK
KyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7IFwKKyAgICAgICAgICAgIHJldHVy
bjsgXAorICAgICAgICB9IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwogICAgIHByaW50ZigiRXhj
ZXB0aW9uOiAlc1xuIiwgZXhjZXB0aW9uLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIElkZW50aWZpZXIgbmFtZUlEID0gSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZyhnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgIm5hbWUiKTsKQEAg
LTIxMDksOSArMjEzMywxMyBAQCBzdGF0aWMgdm9pZCBkdW1wRXhjZXB0aW9uKEdsb2JhbE9iamVj
dCogCiAgICAgSWRlbnRpZmllciBzdGFja0lEID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgInN0YWNrIik7CiAgICAgCiAgICAgSlNWYWx1ZSBuYW1l
VmFsdWUgPSBleGNlcHRpb24uZ2V0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBuYW1lSUQp
OworICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIEpTVmFsdWUgZmlsZU5hbWVWYWx1ZSA9IGV4
Y2VwdGlvbi5nZXQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lSUQpOworICAg
IENIRUNLX0VYQ0VQVElPTigpOwogICAgIEpTVmFsdWUgbGluZU51bWJlclZhbHVlID0gZXhjZXB0
aW9uLmdldChnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbGluZU51bWJlcklEKTsKKyAgICBD
SEVDS19FWENFUFRJT04oKTsKICAgICBKU1ZhbHVlIHN0YWNrVmFsdWUgPSBleGNlcHRpb24uZ2V0
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzdGFja0lEKTsKKyAgICBDSEVDS19FWENFUFRJ
T04oKTsKICAgICAKICAgICBpZiAobmFtZVZhbHVlLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpKSA9PSAiU3ludGF4RXJyb3IiCiAgICAgICAgICYmICghZmlsZU5hbWVWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpIHx8ICFsaW5lTnVtYmVyVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkpIHsKQEAgLTIxMjMsMTEgKzIxNTEsMTQgQEAgc3RhdGljIHZvaWQgZHVtcEV4Y2VwdGlv
bihHbG9iYWxPYmplY3QqIAogICAgIAogICAgIGlmICghc3RhY2tWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQogICAgICAgICBwcmludGYoIiVzXG4iLCBzdGFja1ZhbHVlLnRvV1RGU3RyaW5nKGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS51dGY4KCkuZGF0YSgpKTsKKworI3VuZGVmIENIRUNL
X0VYQ0VQVElPTgogfQogCiBzdGF0aWMgYm9vbCBjaGVja1VuY2F1Z2h0RXhjZXB0aW9uKFZNJiB2
bSwgR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgZXhjZXB0aW9uLCBjb25zdCBT
dHJpbmcmIGV4cGVjdGVkRXhjZXB0aW9uTmFtZSwgYm9vbCBhbHdheXNEdW1wRXhjZXB0aW9uKQog
ewotICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgaWYgKCFleGNl
cHRpb24pIHsKICAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCB1bmNhdWdodCBleGNlcHRpb24gd2l0
aCBuYW1lICclcycgYnV0IG5vbmUgd2FzIHRocm93blxuIiwgZXhwZWN0ZWRFeGNlcHRpb25OYW1l
LnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTM1LDEzICsyMTY2
LDEzIEBAIHN0YXRpYyBib29sIGNoZWNrVW5jYXVnaHRFeGNlcHRpb24oVk0mIHYKIAogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEpTVmFsdWUg
ZXhjZXB0aW9uQ2xhc3MgPSBnbG9iYWxPYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKGV4ZWMsIGV4cGVjdGVkRXhjZXB0aW9uTmFtZSkpOwotICAgIGlmICghZXhjZXB0aW9u
Q2xhc3MuaXNPYmplY3QoKSB8fCB2bS5leGNlcHRpb24oKSkgeworICAgIGlmICghZXhjZXB0aW9u
Q2xhc3MuaXNPYmplY3QoKSB8fCBzY29wZS5leGNlcHRpb24oKSkgewogICAgICAgICBwcmludGYo
IkV4cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhj
ZXB0aW9uIGNsYXNzIGlzIG5vdCBkZWZpbmVkXG4iLCBleHBlY3RlZEV4Y2VwdGlvbk5hbWUudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29sIGlz
SW5zdGFuY2VPZkV4cGVjdGVkRXhjZXB0aW9uID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhjZXB0aW9u
Q2xhc3MpLT5oYXNJbnN0YW5jZShleGVjLCBleGNlcHRpb24pOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkgeworICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkgewogICAgICAgICBwcmludGYoIkV4
cGVjdGVkIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3aXRoIG5hbWUgJyVzJyBidXQgZ2l2ZW4gZXhjZXB0
aW9uIGNsYXNzIGZhaWxzIHBlcmZvcm1pbmcgaGFzSW5zdGFuY2VcbiIsIGV4cGVjdGVkRXhjZXB0
aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAg
LTIxNjUsNiArMjE5Niw3IEBAIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVj
dCoKICAgICAgICAgSlNDOjpPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVl
OwogCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogCiAgICAg
YXV0byBjaGVja0V4Y2VwdGlvbiA9IFsmXSAoYm9vbCBpc0xhc3RGaWxlLCBib29sIGhhc0V4Y2Vw
dGlvbiwgSlNWYWx1ZSB2YWx1ZSkgewpAQCAtMjIwNyw3ICsyMjM5LDcgQEAgc3RhdGljIGJvb2wg
cnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICBpZiAoaXNNb2R1bGUpIHsKICAg
ICAgICAgICAgIGlmICghcHJvbWlzZSkKICAgICAgICAgICAgICAgICBwcm9taXNlID0gbG9hZEFu
ZEV2YWx1YXRlTW9kdWxlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBqc2NTb3VyY2Uoc2Ny
aXB0QnVmZmVyLCBmaWxlTmFtZSkpOwotICAgICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsK
KyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGZ1bGZpbGxIYW5kbGVyID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIDEsIFN0cmluZygpLCBbJiwgaXNMYXN0RmlsZV0oRXhlY1N0YXRlKiBleGVj
KSB7CiAgICAgICAgICAgICAgICAgY2hlY2tFeGNlcHRpb24oaXNMYXN0RmlsZSwgZmFsc2UsIGV4
ZWMtPmFyZ3VtZW50KDApKTsKQEAgLTIyMjQsMTMgKzIyNTYsMTQgQEAgc3RhdGljIGJvb2wgcnVu
V2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
TmFrZWRQdHI8RXhjZXB0aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgICAgICAgICAgSlNW
YWx1ZSByZXR1cm5WYWx1ZSA9IGV2YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBq
c2NTb3VyY2Uoc2NyaXB0QnVmZmVyLCBmaWxlTmFtZSksIEpTVmFsdWUoKSwgZXZhbHVhdGlvbkV4
Y2VwdGlvbik7CisgICAgICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAg
ICAgICAgIGlmIChldmFsdWF0aW9uRXhjZXB0aW9uKQogICAgICAgICAgICAgICAgIHJldHVyblZh
bHVlID0gZXZhbHVhdGlvbkV4Y2VwdGlvbi0+dmFsdWUoKTsKICAgICAgICAgICAgIGNoZWNrRXhj
ZXB0aW9uKGlzTGFzdEZpbGUsIGV2YWx1YXRpb25FeGNlcHRpb24sIHJldHVyblZhbHVlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHNjcmlwdEJ1ZmZlci5jbGVhcigpOwotICAgICAgICB2bS5jbGVh
ckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KIAog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKQEAgLTIyNDMsNiArMjI3Niw5IEBAIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKIAogc3RhdGljIHZvaWQgcnVuSW50ZXJh
Y3RpdmUoR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KwogICAgIFN0cmluZyBpbnRlcnByZXRlck5hbWUoQVNDSUlMaXRlcmFsKCJJbnRlcnByZXRlciIp
KTsKICAgICAKICAgICBib29sIHNob3VsZFF1aXQgPSBmYWxzZTsKQEAgLTIyOTMsNyArMjMyOSw3
IEBAIHN0YXRpYyB2b2lkIHJ1bkludGVyYWN0aXZlKEdsb2JhbE9iamVjdCoKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgcmV0dXJuVmFsdWUudG9XVEZTdHJpbmcoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICBnbG9iYWxPYmplY3QtPnZtKCkuZHJhaW5NaWNyb3Rh
c2tzKCk7CiAgICAgfQogICAgIHByaW50ZigiXG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvQVBJVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSVV0aWxzLmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvQVBJVXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDEzIEBAIGVudW0g
Y2xhc3MgRXhjZXB0aW9uU3RhdHVzIHsKIAogaW5saW5lIEV4Y2VwdGlvblN0YXR1cyBoYW5kbGVF
eGNlcHRpb25JZk5lZWRlZChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZVJlZiogcmV0dXJu
ZWRFeGNlcHRpb25SZWYpCiB7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAg
ICAgIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICBK
U0M6OlZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAg
ICBpZiAocmV0dXJuZWRFeGNlcHRpb25SZWYpCiAgICAgICAgICAgICAqcmV0dXJuZWRFeGNlcHRp
b25SZWYgPSB0b1JlZihleGVjLCBleGNlcHRpb24tPnZhbHVlKCkpOwotICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgICAgICBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5yZXBvcnRBUElFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ4LDEyICsyMTQ4LDE3IEBA
CiAJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MDY4NjYxQUUy
NUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi87IH07CiAJCUZFNTkzMkE3
MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZN
RW50cnlTY29wZS5jcHAgKi87IH07CiAJCUZFNTkzMkE4MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRTYwMjlEOTFENkUxRTRGMDAz
MDIwNEQgLyogVGhyb3dTY29wZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogVGhyb3dTY29w
ZUxvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRkU2MDI5RDkxRDZFMUU0RjAwMzAyMDREIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNjAyOUQ4
MUQ2RTFFMzMwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkU2NDkxMzcxRDc4RjAxRDAw
QTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTY0OTEzNjFENzhGMDEzMDBBNjk0RDQgLyogRXhjZXB0aW9uU2Nv
cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RTY0OTEzOTFENzhGM0FGMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2NDkxMzgxRDc4RjNBMzAwQTY5
NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmNwcCAqLzsgfTsKIAkJRkU2OEM2MzcxQjkwREUwNDAwNDJC
Q0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2OEM2MzYxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNz
ZW1ibGVyUHJpbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFNjhDNjM4MUI5MERFMEIwMDQyQkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2
OEM2MzUxQjkwREREOTAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAgKi87IH07
CiAJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAw
RjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi87IH07CiAJCUZFN0JBNjEwMUExQTdDRUMwMEYx
RjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFN0JBNjBFMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTdDNDE5
NjFCOTdGQzRCMDBGNEQ1OTggLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRURBNTBENDFCOTdGNDQy
MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAgKi87IH07CisJCUZFODBD
MTk3MUQ3NzVDREQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCUZFODBDMTk5MUQ3NzVGQkUwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBDMTk4MUQ3NzVGQjQwMDg1
MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLzsgfTsKKwkJRkU4MEMxOUIxRDc3NkE5ODAwODUxMEMw
IC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEMxOUExRDc3NjhGRDAwODUxMEMwIC8qIEV4Y2VwdGlv
bkV2ZW50TG9jYXRpb24uY3BwICovOyB9OwogCQlGRTk5QjI0OTFDMjRDM0QzMDBDODIxNTkgLyog
SklUTmVnR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTk5QjI0ODFDMjRCNkQzMDBDODIxNTkgLyogSklUTmVnR2VuZXJhdG9yLmggKi87
IH07CiAJCUZFOTlCMjRBMUMyNEMzRDcwMEM4MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU5OUIyNDcxQzI0
QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi87IH07CiAJCUZFQTA4NjIwMTgy
QjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUEwODYxRTE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
NDc1LDExICs0NDgwLDE2IEBACiAJCUZFNTA2ODY2MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJl
ZFNvdXJjZUR1bXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVm
ZXJyZWRTb3VyY2VEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMy
QTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZNRW50cnlTY29wZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogVGhyb3dTY29w
ZUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocm93U2NvcGVM
b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTYwMjlEODFENkUxRTMz
MDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBFeGNlcHRpb25FdmVudExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZFNjQ5MTM2MUQ3OEYwMTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb25TY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTY0OTEzODFENzhGM0EzMDBBNjk0RDQgLyogRXhj
ZXB0aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhj
ZXB0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTY4QzYzNTFC
OTBEREQ5MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNjhDNjM2MUI5MERERDkwMDQyQkNCMyAvKiBNYWNy
b0Fzc2VtYmxlclByaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFN0JB
NjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVmVyaWZpZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOTYxRDc3NUIyNzAwODUxMEMwIC8qIENhdGNoU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2F0Y2hTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTgwQzE5ODFENzc1RkI0MDA4NTEwQzAgLyogQ2F0
Y2hTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYXRjaFNj
b3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkU4MEMxOUExRDc3NjhGRDAw
ODUxMEMwIC8qIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFOTBCQjNBMUI3Q0Y2NEUwMDZCM0YwMyAvKiBWTUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOThCNUI2MUJCOUFFMTEwMDczRTdBNiAvKiBKSVRTdWJH
ZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3ViR2VuZXJh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFOTlCMjQ3MUMyNEI2RDMwMEM4
MjE1OSAvKiBKSVROZWdHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSklUTmVnR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTU3MzcsNiArNTc0Nyw4IEBACiAJCQkJMEZCN0YzOEMxNUVEOEUzODAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCAqLywKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2Fs
bERhdGEuY3BwICovLAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5o
ICovLAorCQkJCUZFODBDMTk4MUQ3NzVGQjQwMDg1MTBDMCAvKiBDYXRjaFNjb3BlLmNwcCAqLywK
KwkJCQlGRTgwQzE5NjFENzc1QjI3MDA4NTEwQzAgLyogQ2F0Y2hTY29wZS5oICovLAogCQkJCUJD
NkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKIAkJCQkwRkUwNTAxQzFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmNwcCAqLywKIAkJCQkwRkUwNTAxRDFB
QTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRzLmggKi8sCkBAIC01ODAxLDEwICs1ODEz
LDE0IEBACiAJCQkJQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmgg
Ki8sCiAJCQkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8sCiAJ
CQkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovLAorCQkJCUZFODBD
MTlBMUQ3NzY4RkQwMDg1MTBDMCAvKiBFeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcCAqLywKKwkJ
CQlGRTYwMjlEODFENkUxRTMzMDAzMDIwNEQgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oICov
LAogCQkJCTBGMTJERTBEMTk3OUQ1RkQwMDA2RkY0RSAvKiBFeGNlcHRpb25GdXp6LmNwcCAqLywK
IAkJCQkwRjEyREUwRTE5NzlENUZEMDAwNkZGNEUgLyogRXhjZXB0aW9uRnV6ei5oICovLAogCQkJ
CTE0MjlEODc3MEVEMjFBQ0QwMEI4OTYxOSAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLywKIAkJ
CQlBNzI3MDFCMzBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9uSGVscGVycy5oICovLAorCQkJ
CUZFNjQ5MTM4MUQ3OEYzQTMwMEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgKi8sCisJCQkJ
RkU2NDkxMzYxRDc4RjAxMzAwQTY5NEQ0IC8qIEV4Y2VwdGlvblNjb3BlLmggKi8sCiAJCQkJODZD
QTAzMkQxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovLAogCQkJCTg2Q0FGRUUy
MTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8sCiAJCQkJQTdBOEFGMjkxN0FEQjVG
MzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5oICovLApAQCAtNjIwNCw3ICs2MjIwLDYgQEAKIAkJ
CQkwRkEyQzE3QTE3RDdDRjg0MDA5RDAxNUYgLyogVGVzdFJ1bm5lclV0aWxzLmggKi8sCiAJCQkJ
RkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovLAogCQkJCUZFMzQy
MjExMUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi8sCi0JCQkJRkU2MDI5RDgxRDZF
MUUzMzAwMzAyMDREIC8qIFRocm93U2NvcGVMb2NhdGlvbi5oICovLAogCQkJCTBGNTU5ODk3MTdD
ODZDNTYwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oICovLAogCQkJCTBGMkI2NkQ4MTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5QWRhcHRvcnMuaCAqLywKIAkJCQkwRjJCNjZEOTE3
QjZCNUFCMDBBN0FFM0YgLyogVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovLApAQCAtNzc1OSw3
ICs3Nzc0LDcgQEAKIAkJCQlGRTNBMDZDMDFDMTEwNDFBMDAzOTBGREQgLyogSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2
IC8qIEludGxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0ODFENTQz
QTkwMDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lcklubGluZXMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBUaHJvd1Njb3BlTG9jYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZFNjAyOUQ5MUQ2RTFFNEYwMDMwMjA0RCAvKiBFeGNlcHRpb25FdmVudExv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyog
R2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdB
RTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtODI4MCw2ICs4Mjk1LDcgQEAKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1
RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZD
ODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkw
RUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RTY0OTEzNzFENzhGMDFEMDBBNjk0RDQgLyogRXhjZXB0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVt
b3J5T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFGNzM4MkQxOEJCQkY5MjAwOEE1QTM3
IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtODM3Myw2ICs4Mzg5LDcg
QEAKIAkJCQk3MDlGQjg2QzFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0N0EwRTE2RjVDRDAwQjM0NDYwIC8qIFdlYktpdEF2YWls
YWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEQ0I5NzMxMkU1MTkzRjAwOTExOTQwIC8q
IFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkU4MEMxOTcxRDc3NUNERDAwODUx
MEMwIC8qIENhdGNoU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNEVDOTBDMTg2MEQ2QzIw
MDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQjZE
NzUzMThBMzM3OTMwMDRBOTMwMSAvKiBXcml0ZUJhcnJpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTA1LDYgKzg5MjIsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTBGRkE1NDk3MTZCODgzNTAwMEIzQTk4
MiAvKiBBNjRET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFNjQ5MTM5MUQ3OEYzQUYw
MEE2OTRENCAvKiBFeGNlcHRpb25TY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1RjBG
NDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MzQyMkE2NjFDMTYyNjc1MDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zs
b2F0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM4Nyw2ICs5NDA1LDcgQEAKIAkJCQkwRjJCNjZF
NjE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCNjZFODE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkU4MEMxOTkxRDc3NUZCRTAw
ODUxMEMwIC8qIENhdGNoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyMTM1OUIwQTY3
N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0
MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC05NDk5LDYgKzk1MTgsNyBAQAogCQkJCTBGNDY4MEE0MTRCQTdGOEQw
MEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODM5
QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlGRTgwQzE5QjFENzc2QTk4MDA4NTEwQzAgLyogRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJ
bnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUFCNDlEQzFCRUM4MDgyMDA3MDIw
RkIgLyogUGVyR2xvYmFsT2JqZWN0V3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0RnVu
Y3Rpb25DYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGlu
Z3MvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSwxMCArMTA1LDEyIEBAIEpTVmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxsOjpjYWxs
KGJvb2wmIGgKIHsKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IG1fdGhpc09iamVjdC5qc09i
amVjdCgpOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2sobV9leGVjKTsKKyAgICBWTSYgdm0gPSBt
X2V4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgZnVuY3Rpb24gPSB0aGlz
T2JqZWN0LT5nZXQobV9leGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgbV9uYW1l
KSk7Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7CiAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRp
bmdzL1NjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjEsMTAgKzEyMSwxMyBAQCBib29sIFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoRXhlY1N0YXRlKiBz
CiAKIFN0cmluZyBTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkg
Y29uc3QKIHsKKyAgICBWTSYgdm0gPSBzY3JpcHRTdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBTdHJpbmcgcmVzdWx0ID0gbV92YWx1
ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSktPnZhbHVlKHNjcmlwdFN0YXRlKTsKICAgICAv
LyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9m
IGludm9raW5nIHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCi0gICAgaWYgKHNjcmlwdFN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgc2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYyMyw2ICs2MjMsOSBAQCB2b2lkIERlYnVnZ2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmCiAKIHZvaWQgRGVidWdnZXI6OnBhdXNlSWZOZWVkZWQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7CisgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChtX2lzUGF1c2VkKQogICAgICAgICByZXR1
cm47CiAKQEAgLTY2Miw3ICs2NjUsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENh
bGxGcmFtZSogCiAgICAgewogICAgICAgICBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHJlYXNvbigq
dGhpcywgZGlkSGl0QnJlYWtwb2ludCA/IFBhdXNlZEZvckJyZWFrcG9pbnQgOiBtX3JlYXNvbkZv
clBhdXNlKTsKICAgICAgICAgaGFuZGxlUGF1c2Uodm1FbnRyeUdsb2JhbE9iamVjdCwgbV9yZWFz
b25Gb3JQYXVzZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAg
ICB9CiAKICAgICBtX3BhdXNpbmdCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVn
Z2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw5
IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICBpZiAoIWNh
bGxGcmFtZSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBKU0xvY2tIb2xk
ZXIgbG9jayhjYWxsRnJhbWUpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBK
U0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CiAgICAg
aWYgKGlzVGFpbERlbGV0ZWQoKSkKQEAgLTIyOCw3ICsyMzAsNiBAQCBKU1ZhbHVlIERlYnVnZ2Vy
Q2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIAogICAgIERlYnVnZ2VyRXZhbEVuYWJsZXIgZXZhbEVuYWJsZXIoY2FsbEZyYW1lKTsKLSAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAKICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENv
bnRleHRUeXBlOwogICAgIApAQCAtMjQzLDkgKzI0NCw5IEBAIEpTVmFsdWUgRGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlV2l0aFMKICAgICBKU1Njb3BlOjpjb2xsZWN0VmFyaWFibGVzVW5kZXJU
RFooc2NvcGUoKS0+anNTY29wZSgpLCB2YXJpYWJsZXNVbmRlclREWik7CiAKICAgICBFdmFsRXhl
Y3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoY2FsbEZyYW1lLCBtYWtlU291
cmNlKHNjcmlwdCksIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+dW5saW5r
ZWRDb2RlQmxvY2soKS0+ZGVyaXZlZENvbnRleHRUeXBlKCksIGNvZGVCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+aXNBcnJvd0Z1bmN0aW9uKCksIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxl
c1VuZGVyVERaKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9u
ID0gdm0uZXhjZXB0aW9uKCk7Ci0gICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgaWYg
KFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9
IGNhdGNoU2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkBAIC0yNTcsOSAr
MjU4LDkgQEAgSlNWYWx1ZSBEZWJ1Z2dlckNhbGxGcmFtZTo6ZXZhbHVhdGVXaXRoUwogCiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSB0aGlzLT50aGlzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IHZtLmludGVycHJldGVyLT5leGVjdXRlKGV2YWwsIGNhbGxGcmFtZSwgdGhpc1ZhbHVlLCBz
Y29wZSgpLT5qc1Njb3BlKCkpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkgewotICAgICAgICBl
eGNlcHRpb24gPSB2bS5leGNlcHRpb24oKTsKLSAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsK
KyAgICBpZiAoVU5MSUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgZXhj
ZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0Y2hTY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KIAogICAgIGlmIChzY29wZUV4dGVuc2lvbk9iamVjdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE0ICsxMTIsMTUgQEAgZXh0
ZXJuICJDIiB7CiAKIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IGlmIChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoKQotICAgICAgICBSRUxFQVNFX0FTU0VS
VChleGVjLT52bSgpLmNhbGxGcmFtZUZvckNhdGNoID09IGV4ZWMpOworICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisK
KyAgICBpZiAodm0tPmNhbGxGcmFtZUZvckNhdGNoKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh2
bS0+Y2FsbEZyYW1lRm9yQ2F0Y2ggPT0gZXhlYyk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKLQotICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIAogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxl
IHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRu
J3QKICAgICAvLyByZWFsbHkgYmUgcHJvZml0YWJsZS4KQEAgLTEzMSw3ICsxMzIsNyBAQCB2b2lk
IGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAodm0tPmNhbGxGcmFtZUZv
ckNhdGNoKQogICAgICAgICBBU1NFUlQoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7CiAg
ICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpCi0gICAgICAgIEFTU0VSVCghIXZtLT5l
eGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgICAgICAKICAgICAKICAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQo
ZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5
Nyw3IEBAIHRlbXBsYXRlPGJvb2wgc3RyaWN0LCBib29sIGRpcmVjdD4KIEFMV0FZU19JTkxJTkUg
c3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKICAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CkBAIC0xMjEs
NyArMTIyLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBKSVRfT1BFUkFUSU9OIAogCiAg
ICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJvd3MgYW4gZXhjZXB0
aW9uLgogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVj
KTsKLSAgICBpZiAodm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgc3RyaWN0KTsKQEAgLTE4MSwxMSArMTgyLDEyIEBAIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25DcmVhdGVUaGkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yLT50eXBlKCkg
PT0gSlNGdW5jdGlvblR5cGUpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+cmFyZURhdGEoZXhlYywgaW5s
aW5lQ2FwYWNpdHkpLT5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAK
ICAgICBKU1ZhbHVlIHByb3RvID0gY29uc3RydWN0b3ItPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
aWYgKHByb3RvLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjLCBhc09iamVjdChwcm90bykpOwpAQCAtMjA5LDEyICsyMTEsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9wMS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKICAgICBpbnQzMl90IGIgPSBvcDIudG9JbnQzMihleGVjKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEgJiBiKSk7CkBAIC0yMjQsMTIgKzIyNywxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUg
b3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwogICAgIGludDMyX3QgYiA9IG9wMi50b0ludDMyKGV4ZWMpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSB8IGIpKTsKQEAgLTIzOSwxMiArMjQzLDEzIEBA
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0g
PSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVj
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNW
YWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAKICAgICBpbnQzMl90IGEgPSBvcDEudG9J
bnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7CiAgICAgaW50MzJfdCBiID0gb3AyLnRvSW50MzIoZXhlYyk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIF4gYikpOwpAQCAtMjU0LDEyICsyNTks
MTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogewogICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAKICAg
ICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVl
IG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAogICAgIGludDMyX3QgYSA9IG9w
MS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYSA8PCAoYiAmIDB4MWYpKSk7
CkBAIC0yNjksMTIgKzI3NSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblZhCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpOwogICAgIEpTVmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAg
ICAgaW50MzJfdCBhID0gb3AxLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVpbnQzMl90IGIgPSBv
cDIudG9VSW50MzIoZXhlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihh
ID4+IChiICYgMHgxZikpKTsKQEAgLTI4NCwxMiArMjkxLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmEKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wMik7CiAKICAgICB1aW50MzJfdCBhID0gb3AxLnRvVUludDMyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICB1aW50MzJfdCBiID0gb3AyLnRvVUludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDB4MWYpKSkp
OwpAQCAtMzE1LDEyICszMjMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25WYQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKTsKIAog
ICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS0+
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IG9w
Mi50b051bWJlcihleGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGEg
LyBiKSk7CkBAIC0zMzAsMTAgKzMzOSwxMSBAQCBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Bcml0aEFicyhFCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoKnZtKTsKIAogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRPcDEpOwogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChV
TkxJS0VMWSh2bS0+ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBQTmFOOwogICAgIHJldHVybiBmYWJzKGEpOwogfQpAQCAt
MzQyLDEwICszNTIsMTEgQEAgaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2x6
MwogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KCp2bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsK
ICAgICB1aW50MzJfdCB2YWx1ZSA9IG9wMS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtF
TFkodm0tPmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY2x6MzIodmFsdWUpOwogfQpAQCAtMzU0
LDEwICszNjUsMTEgQEAgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhDb3MoRQog
ewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CiAKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAg
ICBkb3VibGUgYSA9IG9wMS50b051bWJlcihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0tPmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIGNvcyhhKTsK
IH0KQEAgLTM2NiwxMCArMzc4LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
aXRoRlJvdW4KIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElL
RUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihh
KTsKIH0KQEAgLTM3OCwxMCArMzkxLDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyaXRoTG9nKEUKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMSk7CiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVO
TElLRUxZKHZtLT5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJuIGxvZyhhKTsKIH0KQEAgLTM5
MCwxMCArNDA0LDExIEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU2luKEUK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgq
dm0pOwogCiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAg
ICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJuIHNpbihhKTsKIH0KQEAgLTQwMiwxMCArNDE3LDEx
IEBAIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU3FydCgKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAg
SlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFBO
YU47CiAgICAgcmV0dXJuIHNxcnQoYSk7CiB9CkBAIC00MzEsNyArNDQ3LDggQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIAor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQcm9wZXJ0eSk7CiAKQEAgLTQ1NywxMCAr
NDc0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICB9
CiAKICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShleGVjKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5TmFtZSkpOwogfQpAQCAtNDY5
LDcgKzQ4Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKLSAgICAKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBKU1ZhbHVlIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRQ
cm9wZXJ0eSk7CiAKICAgICBpZiAocHJvcGVydHkuaXNVSW50MzIoKSkKQEAgLTQ5MCw3ICs1MDgs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgfQogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAg
IGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShiYXNlKS5nZXQoZXhlYywgcHJvcGVydHlOYW1l
KSk7CiB9CkBAIC04NTksNiArODc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25HZQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHRoaXNWYWwgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFRoaXMpOwpAQCAtODg0LDExICs5MDMsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgIH0KIAogICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29l
cmNpYmxlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhl
Yyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgcHJvcGVydHksIHNs
b3QpKTsKIH0KQEAgLTkxMyw5ICs5MzIsMTAgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5VmFsV2l0aAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIElkZW50aWZpZXIgcHJvcGVydHkgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHB1dFdpdGhUaGlzPHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNv
ZGVkVGhpcywgZW5jb2RlZFZhbHVlLCBwcm9wZXJ0eSk7CiB9CkBAIC05MjQsOSArOTQ0LDEwIEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFdpdGgKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBJZGVu
dGlmaWVyIHByb3BlcnR5ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpLnRvUHJv
cGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBwdXRXaXRoVGhpczxm
YWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRUaGlzLCBlbmNvZGVkVmFsdWUsIHByb3Bl
cnR5KTsKIH0KQEAgLTE0NDEsOSArMTQ2Miw5IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25TdHJDYXQyKEUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU1N0cmluZyogc3RyMSA9IEpTVmFsdWU6OmRlY29kZShhKS50b1N0cmluZyhleGVj
KTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2Ug
bXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJpbWl0aXZlcy4KKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsgLy8gSW1wb3NzaWJsZSwgc2luY2Ugd2UgbXVzdCBoYXZlIGJlZW4gZ2l2ZW4gcHJp
bWl0aXZlcy4KICAgICBKU1N0cmluZyogc3RyMiA9IEpTVmFsdWU6OmRlY29kZShiKS50b1N0cmlu
ZyhleGVjKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4oc3RyMS0+bGVu
Z3RoKCksIHN0cjItPmxlbmd0aCgpKSkgewogICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3Io
ZXhlYywgc2NvcGUpOwpAQCAtMTQ2MCwxMSArMTQ4MSwxMSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU3RyQ2F0MyhFCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgSlNTdHJpbmcqIHN0cjEgPSBKU1ZhbHVlOjpkZWNvZGUoYSkudG9TdHJp
bmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNp
bmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdpdmVuIHByaW1pdGl2ZXMuCisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7IC8vIEltcG9zc2libGUsIHNpbmNlIHdlIG11c3QgaGF2ZSBiZWVuIGdp
dmVuIHByaW1pdGl2ZXMuCiAgICAgSlNTdHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYiku
dG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNTdHJpbmcqIHN0cjMgPSBKU1ZhbHVlOjpkZWNv
ZGUoYykudG9TdHJpbmcoZXhlYyk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMy
X3Q+KHN0cjEtPmxlbmd0aCgpLCBzdHIyLT5sZW5ndGgoKSwgc3RyMy0+bGVuZ3RoKCkpKSB7CiAg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1h
bmFnZXIuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw3
ICsxMzQsOSBAQCBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjCiAKIEpT
Qzo6SlNPYmplY3QqIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6Y3JlYXRlSW5qZWN0ZWRTY3JpcHQo
Y29uc3QgU3RyaW5nJiBzb3VyY2UsIEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUsIGludCBpZCkKIHsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhzY3JpcHRTdGF0ZSk7CisgICAgVk0mIHZtID0gc2NyaXB0
U3RhdGUtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIFNvdXJjZUNvZGUgc291cmNlQ29kZSA9
IG1ha2VTb3VyY2Uoc291cmNlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NyaXB0U3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKQEAgLTE1Nyw3ICsxNTksNyBAQCBK
U0M6OkpTT2JqZWN0KiBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmNyCiAgICAgYXJncy5hcHBlbmQo
anNOdW1iZXIoaWQpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKHNjcmlwdFN0
YXRlLCBmdW5jdGlvblZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGdsb2JhbFRoaXNWYWx1ZSwg
YXJncyk7Ci0gICAgc2NyaXB0U3RhdGUtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0LmdldE9iamVjdCgpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDU1
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsOSBAQCB2
b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6CiAgICAgaWYgKGlzVGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
KyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZSh2bSk7CiAKICAgICBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2sgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0
aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9D
YXB0dXJlKTsKICAgICBpZiAoaW5jbHVkZXNOYXRpdmVDYWxsU3RhY2tXaGVuUmVwb3J0aW5nRXhj
ZXB0aW9ucygpKQpAQCAtMjMwLDcgKzIzMiw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0
b3JDb250cm9sbGVyOjoKICAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3
PiBXZWIgSW5zcGVjdG9yOiBTaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcg
ZXhjZXB0aW9ucwogICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9iamVjdCwg
Y2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJlcHJlc2Vu
dGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgogICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBleGNl
cHRpb24tPnZhbHVlKCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIGlmIChK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OmxvZ1RvU3lzdGVtQ29uc29sZSgpKSB7CiAgICAg
ICAgIGlmIChjYWxsU3RhY2stPnNpemUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0luamVjdGVkU2NyaXB0SG9zdC5jcHAJKHJldmlz
aW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNJbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgSlNWYWx1
ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6ZXZhbHVhdGVXaQogICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW5qZWN0ZWRTY3JpcHRIb3N0LmV2
YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcu
IikpOwogCiAgICAgU3RyaW5nIHByb2dyYW0gPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkBAIC0yNTksMTIgKzI1OSwxMyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApOwogCiAgICAgaWYgKEpTUHJvbWlzZSogcHJvbWlzZSA9IGpz
RHluYW1pY0Nhc3Q8SlNQcm9taXNlKj4odmFsdWUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgICAgIHN3aXRjaCAocHJvbWlzZS0+c3RhdHVzKGV4ZWMtPnZtKCkp
KSB7CiAgICAgICAgIGNhc2UgSlNQcm9taXNlOjpTdGF0dXM6OlBlbmRpbmc6CkBAIC0yODYsNyAr
Mjg3LDcgQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlm
IChKU0JvdW5kRnVuY3Rpb24qIGJvdW5kRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTQm91bmRG
dW5jdGlvbio+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyKTsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50
ZXJuYWxQcm9wZXJ0eShleGVjLCAidGFyZ2V0RnVuY3Rpb24iLCBib3VuZEZ1bmN0aW9uLT50YXJn
ZXRGdW5jdGlvbigpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpbmRl
eCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJib3VuZFRoaXMiLCBib3VuZEZ1
bmN0aW9uLT5ib3VuZFRoaXMoKSkpOwpAQCAtMjk4LDcgKzI5OSw3IEBAIEpTVmFsdWUgSlNJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoUHJveHlPYmplY3QqIHByb3h5ID0g
anNEeW5hbWljQ2FzdDxQcm94eU9iamVjdCo+KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQcm9wZXJ0eShleGVjLCBBU0NJSUxpdGVyYWwoInRh
cmdldCIpLCBwcm94eS0+dGFyZ2V0KCkpKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgQVNDSUlMaXRl
cmFsKCJoYW5kbGVyIiksIHByb3h5LT5oYW5kbGVyKCkpKTsKQEAgLTMxMiw3ICszMTMsNyBAQCBK
U1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpnZXRJbnRlcm5hCiAKICAgICAgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAg
YXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJv
cGVydHkoZXhlYywgImFycmF5IiwgaXRlcmF0ZWRWYWx1ZSkpOwogICAgICAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0cnVjdEludGVybmFsUHJvcGVydHko
ZXhlYywgImtpbmQiLCBraW5kKSk7CkBAIC0zMzUsNyArMzM2LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
bmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJtYXAiLCBtYXBJdGVyYXRv
ci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVj
LCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwganNOb250
cml2aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNTcsNyArMzU4LDcgQEAgSlNWYWx1ZSBK
U0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgICAgICB9CiAgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIsIDIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJzZXQiLCBzZXRJ
dGVyYXRvci0+aXRlcmF0ZWRWYWx1ZSgpKSk7CiAgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpbmRleCsrLCBjb25zdHJ1Y3RJbnRlcm5hbFByb3BlcnR5KGV4ZWMsICJraW5kIiwg
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGtpbmQpKSk7CkBAIC0zNjcsNyArMzY4LDcgQEAgSlNW
YWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6Z2V0SW50ZXJuYQogICAgIGlmIChKU1N0cmluZ0l0
ZXJhdG9yKiBzdHJpbmdJdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmdJdGVyYXRvcio+
KHZhbHVlKSkgewogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCAxKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgrKywgY29uc3RydWN0SW50ZXJuYWxQ
cm9wZXJ0eShleGVjLCAic3RyaW5nIiwgc3RyaW5nSXRlcmF0b3ItPml0ZXJhdGVkVmFsdWUoZXhl
YykpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMzc2LDcgKzM3Nyw3IEBAIEpTVmFsdWUg
SlNJbmplY3RlZFNjcmlwdEhvc3Q6OmdldEludGVybmEKICAgICBpZiAoSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogcHJvcGVydHlOYW1lSXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqPih2YWx1ZSkpIHsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwg
MSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGluZGV4KyssIGNvbnN0
cnVjdEludGVybmFsUHJvcGVydHkoZXhlYywgIm9iamVjdCIsIHByb3BlcnR5TmFtZUl0ZXJhdG9y
LT5pdGVyYXRlZFZhbHVlKCkpKTsKICAgICAgICAgcmV0dXJuIGFycmF5OwpAQCAtNDA0LDYgKzQw
NSw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHZhbHVlID0g
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CiAgICAgSlNXZWFrTWFwKiB3ZWFrTWFwID0ganNE
eW5hbWljQ2FzdDxKU1dlYWtNYXAqPih2YWx1ZSk7CiAgICAgaWYgKCF3ZWFrTWFwKQpAQCAtNDE4
LDcgKzQyMCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OndlYWtNYXBFbnQKICAg
ICAgICAgbnVtYmVyVG9GZXRjaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmZXRjaERvdWJsZSk7
CiAKICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0
cik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBm
b3IgKGF1dG8gaXQgPSB3ZWFrTWFwLT53ZWFrTWFwRGF0YSgpLT5iZWdpbigpOyBpdCAhPSB3ZWFr
TWFwLT53ZWFrTWFwRGF0YSgpLT5lbmQoKTsgKytpdCkgewogICAgICAgICBKU09iamVjdCogZW50
cnkgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBKU1Zh
bHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwogICAgIEpTV2Vha1NldCogd2Vha1NldCA9IGpzRHluYW1pY0Nhc3Q8
SlNXZWFrU2V0Kj4odmFsdWUpOwogICAgIGlmICghd2Vha1NldCkKQEAgLTQ2NSw3ICs0NjgsNyBA
QCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojp3ZWFrU2V0RW50CiAgICAgICAgIG51bWJl
clRvRmV0Y2ggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmV0Y2hEb3VibGUpOwogCiAgICAgSlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIpOwotICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yIChhdXRvIGl0
ID0gd2Vha1NldC0+d2Vha01hcERhdGEoKS0+YmVnaW4oKTsgaXQgIT0gd2Vha1NldC0+d2Vha01h
cERhdGEoKS0+ZW5kKCk7ICsraXQpIHsKICAgICAgICAgSlNPYmplY3QqIGVudHJ5ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CkBAIC00OTUsNiArNDk4LDcgQEAgSlNWYWx1ZSBKU0luamVj
dGVkU2NyaXB0SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgaXRlcmF0b3I7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwogICAgIGlmIChKU01hcEl0ZXJhdG9yKiBtYXBJ
dGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KHZhbHVlKSkKQEAgLTUwNSw3
ICs1MDksNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjppdGVyYXRvckVuCiAgICAg
ICAgIGl0ZXJhdG9yID0gc3RyaW5nSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwogICAgIGVsc2UgaWYg
KEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHByb3BlcnR5TmFtZUl0ZXJhdG9yID0ganNEeW5hbWlj
Q2FzdDxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKj4odmFsdWUpKSB7CiAgICAgICAgIGl0ZXJhdG9y
ID0gcHJvcGVydHlOYW1lSXRlcmF0b3ItPmNsb25lKGV4ZWMpOwotICAgICAgICBpZiAoVU5MSUtF
TFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoSlNPYmplY3QqIGl0ZXJhdG9yT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+
KHZhbHVlKSkgewpAQCAtNTI1LDE4ICs1MjksMTggQEAgSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0
SG9zdDo6aXRlcmF0b3JFbgogICAgICAgICBudW1iZXJUb0ZldGNoID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGZldGNoRG91YmxlKTsKIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlclRvRmV0
Y2g7ICsraSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRl
cmF0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpT
VmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIEpTT2JqZWN0KiBlbnRy
eSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9KU0phdmFTY3JpcHRDYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpT
VmFsdWUgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lOjpldmFsdWF0ZVcKICAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkpTSmF2YVNjcmlwdENhbGxG
cmFtZS5ldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbiBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEg
c3RyaW5nLiIpKTsKIAogICAgIFN0cmluZyBzY3JpcHQgPSBzY3JpcHRWYWx1ZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgTmFrZWRQdHI8RXhjZXB0aW9uPiBleGNlcHRpb247CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
RmFjdG9yeS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksOSBAQCBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBjcmVhdGVTY3JpcHRDYWxsU3RhCiAK
IHN0YXRpYyB2b2lkIGV4dHJhY3RTb3VyY2VJbmZvcm1hdGlvbkZyb21FeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBleGNlcHRpb25PYmplY3QsIGludCogbGluZU51bWJl
ciwgaW50KiBjb2x1bW5OdW1iZXIsIFN0cmluZyogc291cmNlVVJMKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
CiAgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3Rv
cjogU2hvdWxkIG5vdCBuZWVkIHRvIGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0
aW9ucwogICAgIEpTVmFsdWUgbGluZVZhbHVlID0gZXhjZXB0aW9uT2JqZWN0LT5nZXREaXJlY3Qo
ZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAibGluZSIpKTsKICAgICAq
bGluZU51bWJlciA9IGxpbmVWYWx1ZSAmJiBsaW5lVmFsdWUuaXNOdW1iZXIoKSA/IGludChsaW5l
VmFsdWUudG9OdW1iZXIoZXhlYykpIDogMDsKQEAgLTEyNiw3ICsxMjksNyBAQCBzdGF0aWMgdm9p
ZCBleHRyYWN0U291cmNlSW5mb3JtYXRpb25Gcm9tCiAgICAgKmNvbHVtbk51bWJlciA9IGNvbHVt
blZhbHVlICYmIGNvbHVtblZhbHVlLmlzTnVtYmVyKCkgPyBpbnQoY29sdW1uVmFsdWUudG9OdW1i
ZXIoZXhlYykpIDogMDsKICAgICBKU1ZhbHVlIHNvdXJjZVVSTFZhbHVlID0gZXhjZXB0aW9uT2Jq
ZWN0LT5nZXREaXJlY3QoZXhlYy0+dm0oKSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
c291cmNlVVJMIikpOwogICAgICpzb3VyY2VVUkwgPSBzb3VyY2VVUkxWYWx1ZSAmJiBzb3VyY2VV
UkxWYWx1ZS5pc1N0cmluZygpID8gc291cmNlVVJMVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpIDogQVNDSUlMaXRlcmFsKCJ1bmRlZmluZWQiKTsKLSAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIFJlZjxTY3JpcHRDYWxs
U3RhY2s+IGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIHNpemVfdCBtYXhTdGFja1NpemUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FjaGVkQ2FsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWNoZWRDYWxsLmgJ
KHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWNoZWRDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICAgICAgbV9jbG9zdXJlID0gbV9pbnRlcnByZXRlci0+cHJlcGFyZUZv
clJlcGVhdENhbGwoZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLCBjYWxsRnJhbWUsICZtX3Byb3Rv
Q2FsbEZyYW1lLCBmdW5jdGlvbiwgYXJndW1lbnRDb3VudCArIDEsIGZ1bmN0aW9uLT5zY29wZSgp
LCBtX2FyZ3VtZW50cy5kYXRhKCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoY2FsbEZyYW1lLCBzY29wZSk7Ci0gICAgICAgICAg
ICBtX3ZhbGlkID0gIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBtX3Zh
bGlkID0gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBK
U1ZhbHVlIGNhbGwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTQgKzExNiw2
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgLy8gcG9pbnRlciwgc28gdGhlc2UgYXJlIGlu
ZWZmaWNpZW50LCBhbmQgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5IGluIG5ldyBjb2RlLgogICAg
ICAgICAvLyBCdXQgdGhleSdyZSB1c2VkIGluIG1hbnkgcGxhY2VzIGluIGxlZ2FjeSBjb2RlLCBz
byB0aGV5J3JlIG5vdCBnb2luZyBhd2F5IGFueSB0aW1lIHNvb24uCiAKLSAgICAgICAgdm9pZCBj
bGVhckV4Y2VwdGlvbigpIHsgdm0oKS5jbGVhckV4Y2VwdGlvbigpOyB9Ci0KLSAgICAgICAgRXhj
ZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiB2bSgpLmV4Y2VwdGlvbigpOyB9Ci0g
ICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gISF2bSgpLmV4Y2VwdGlv
bigpOyB9Ci0KLSAgICAgICAgRXhjZXB0aW9uKiBsYXN0RXhjZXB0aW9uKCkgY29uc3QgeyByZXR1
cm4gdm0oKS5sYXN0RXhjZXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBjbGVhckxhc3RFeGNlcHRp
b24oKSB7IHZtKCkuY2xlYXJMYXN0RXhjZXB0aW9uKCk7IH0KLQogICAgICAgICBBdG9taWNTdHJp
bmdUYWJsZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiB2bSgpLmF0b21pY1N0
cmluZ1RhYmxlKCk7IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqdm0oKS5wcm9wZXJ0eU5hbWVzOyB9CiAgICAgICAgIGNv
bnN0IE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBlbXB0eUxpc3QoKSBjb25zdCB7IHJldHVybiAqdm0o
KS5lbXB0eUxpc3Q7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIFN0cmluZyBwcm9ncmFtU291cmNl
ID0gYXNTdHJpbmcocHJvZ3JhbSktPnZhbHVlKGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFt
ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRnJhbWUqIGNhbGxlckZy
YW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIEpTVmFs
dWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgLy8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwgaXQgc2hvdWxkIG5vdCBoYXZlIHRo
cm93biBleGNlcHRpb25zLgotICAgICAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAgICAgICAgZXZhbCA9IGNhbGxlckNv
ZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwg
ZXZhbENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBwcm9ncmFtU291cmNlLCBj
YWxsZXJTY29wZUNoYWluKTsKIApAQCAtMTg4LDcgKzE4OCw3IEBAIHVuc2lnbmVkIHNpemVPZlZh
cmFyZ3MoQ2FsbEZyYW1lKiBjYWxsRnIKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudHMuaXNPYmplY3QoKSk7CiAgICAgICAgIGxlbmd0aCA9IGdldExlbmd0aChj
YWxsRnJhbWUsIGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTU4NiwxMyArNTg2LDE1IEBAIHByaXZhdGU6CiAKIEFMV0FZU19JTkxJTkUgc3RhdGlj
IHZvaWQgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsK
KyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYgKERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxG
cmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7Ci0gICAgICAgIFN1c3Bl
bmRFeGNlcHRpb25TY29wZSBzY29wZSgmY2FsbEZyYW1lLT52bSgpKTsKKyAgICAgICAgU3VzcGVu
ZEV4Y2VwdGlvblNjb3BlIHNjb3BlKCZ2bSk7CiAgICAgICAgIGlmIChqc0R5bmFtaWNDYXN0PEpT
RnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKSkKICAgICAgICAgICAgIGRlYnVnZ2VyLT5y
ZXR1cm5FdmVudChjYWxsRnJhbWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkZWJ1Z2dl
ci0+ZGlkRXhlY3V0ZVByb2dyYW0oY2FsbEZyYW1lKTsKLSAgICAgICAgQVNTRVJUKCFjYWxsRnJh
bWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh0aHJvd1Njb3BlLCAh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgfQogfQogCkBAIC02ODAsNiArNjgyLDggQEAg
cHJpdmF0ZToKIAogTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dW53aW5k
KFZNJiB2bSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCBFeGNlcHRpb24qIGV4Y2VwdGlvbiwgVW53
aW5kU3RhcnQgdW53aW5kU3RhcnQpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgaWYgKHVud2luZFN0YXJ0ID09IFVud2luZEZyb21DYWxsZXJGcmFt
ZSkgewogICAgICAgICBpZiAoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9yVk1FbnRyeUZyYW1lKCkg
PT0gdm0udG9wVk1FbnRyeUZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02
OTgsNyArNzAyLDcgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dQog
ICAgIGlmIChleGNlcHRpb25WYWx1ZS5pc0VtcHR5KCkgfHwgKGV4Y2VwdGlvblZhbHVlLmlzQ2Vs
bCgpICYmICFleGNlcHRpb25WYWx1ZS5hc0NlbGwoKSkpCiAgICAgICAgIGV4Y2VwdGlvblZhbHVl
ID0ganNOdWxsKCk7CiAKLSAgICBBU1NFUlQodm0uZXhjZXB0aW9uKCkgJiYgdm0uZXhjZXB0aW9u
KCktPnN0YWNrKCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCBzY29wZS5leGNl
cHRpb24oKSAmJiBzY29wZS5leGNlcHRpb24oKS0+c3RhY2soKS5zaXplKCkpOwogCiAgICAgLy8g
Q2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVz
IGFzIG5lY2Vzc2FyeS4KICAgICBIYW5kbGVySW5mbyogaGFuZGxlciA9IG51bGxwdHI7CkBAIC04
OTcsNyArOTAxLDcgQEAgZmFpbGVkSlNPTlA6CiAKICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlOgog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gcHJvZ3JhbS0+Z2VuZXJhdGVkSklUQ29kZSgpLT5leGVjdXRl
KCZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKLQorICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAg
IHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CiB9CiAKQEAgLTkwNiw3ICs5MTAsNyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgVk0mIHZtID0gY2Fs
bEZyYW1lLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCi0gICAgQVNTRVJUKCFjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEFTU0VSVCghdm0uaXNDb2xsZWN0b3JC
dXN5KCkpOwogICAgIGlmICh2bS5pc0NvbGxlY3RvckJ1c3koKSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwpAQCAtOTY5LDcgKzk3Myw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdCgKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7
CiAgICAgQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3koKSk7CiAgICAgLy8gV2UgdGhyb3cgaW4g
dGhpcyBjYXNlIGJlY2F1c2Ugd2UgaGF2ZSB0byByZXR1cm4gc29tZXRoaW5nICJ2YWxpZCIgYnV0
IHdlJ3JlCiAgICAgLy8gYWxyZWFkeSBpbiBhbiBpbnZhbGlkIHN0YXRlLgpAQCAtMTAyMCwxMiAr
MTAyNCwxMiBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlU
b05hdGl2ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiAKLSAgICAgICAgICAgIGlmICghY2FsbEZy
YW1lLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChMSUtFTFkoIXRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc09i
amVjdCgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgQVNTRVJUKHJlc3VsdC5pc09iamVjdCgpKTsKICAgICByZXR1cm4g
Y2hlY2tlZFJldHVybihhc09iamVjdChyZXN1bHQpKTsKQEAgLTEwMzUsNyArMTAzOSw3IEBAIENh
bGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKIHsKICAgICBWTSYgdm0gPSAq
c2NvcGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCF0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICAKICAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCiAgICAg
ICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0xMDg0LDcgKzEwODgsNyBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoc2NvcGUtPnZtKCkgPT0g
JmNhbGxGcmFtZS0+dm0oKSk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICBBU1NFUlQoIXZtLmlzQ29sbGVjdG9y
QnVzeSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKICAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCkBAIC0xMTkwLDcgKzExOTQs
NyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKE1vZHVsZVByb2dyCiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBBU1NFUlQoc2NvcGUt
PnZtKCkgPT0gJmNhbGxGcmFtZS0+dm0oKSk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7
CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICBBU1NFUlQoIXZtLmlz
Q29sbGVjdG9yQnVzeSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAodm0uaXNDb2xsZWN0b3JCdXN5KCkpCkBAIC0xMjMx
LDEyICsxMjM1LDE0IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoTW9kdWxlUHJvZ3IK
IAogTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCkKIHsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIERl
YnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5kZWJ1
Z2dlcigpOwogICAgIGlmICghZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VS
VChjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5oYXNEZWJ1Z2dlclJlcXVlc3RzKCkpOwotICAgIEFT
U0VSVCghY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29w
ZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHN3aXRjaCAoZGVidWdIb29rSUQpIHsKICAg
ICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZToKQEAgLTEyNTgsNyArMTI2NCw3IEBAIE5FVkVS
X0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWwKICAgICAgICAgICAgIGRlYnVnZ2Vy
LT5kaWRSZWFjaEJyZWFrcG9pbnQoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBBU1NFUlQoIWNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwotfSAgICAKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgSW50
ZXJwcmV0ZXJfaAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgorI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTb3VyY2VQcm92aWRl
ci5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSAiU3RhY2tGcmFtZS5o
IgorI2luY2x1ZGUgIlRocm93U2NvcGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtOTIsOCArOTQsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgU3VzcGVuZEV4Y2VwdGlvblNjb3BlKFZNKiB2bSkKICAgICAg
ICAgICAgIDogbV92bSh2bSkKICAgICAgICAgewotICAgICAgICAgICAgb2xkRXhjZXB0aW9uID0g
dm0tPmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgdm0tPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSgqdm0pOworICAgICAgICAg
ICAgb2xkRXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgICAgIH5TdXNwZW5kRXhjZXB0aW9uU2Nv
cGUoKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U2hhZG93Q2hpY2tlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1NoYWRvd0NoaWNrZW4uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU2hhZG93Q2hpY2tlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNiw4ICs0MzYsOSBAQCB2b2lkIFNoYWRvd0NoaWNrZW46OmR1bXAoUHJpbnRTdHJl
YW0mIG91CiBKU0FycmF5KiBTaGFkb3dDaGlja2VuOjpmdW5jdGlvbnNPblN0YWNrKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBpdGVyYXRlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUu
Y3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSw3IEBAIHZvaWQgSklUQ29kZTo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKIAogSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2
bSwgUHJvdG9DYWxsRnJhbWUqIHByb3RvQ2FsbEZyYW1lKQogeworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwogICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4ocHJvdG9DYWxs
RnJhbWUtPmNhbGxlZSgpKTsKIApAQCAtNzgsNyArNzksNyBAQCBKU1ZhbHVlIEpJVENvZGU6OmV4
ZWN1dGUoVk0qIHZtLCBQcm90b0NhCiAgICAgfSBlbHNlCiAgICAgICAgIGVudHJ5QWRkcmVzcyA9
IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb0phdmFTY3JpcHQoZW50
cnlBZGRyZXNzLCB2bSwgcHJvdG9DYWxsRnJhbWUpKTsKLSAgICByZXR1cm4gdm0tPmV4Y2VwdGlv
bigpID8ganNOdWxsKCkgOiByZXN1bHQ7CisgICAgcmV0dXJuIHNjb3BlLmV4Y2VwdGlvbigpID8g
anNOdWxsKCkgOiByZXN1bHQ7CiB9CiAKIERGRzo6Q29tbW9uRGF0YSogSklUQ29kZTo6ZGZnQ29t
bW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNw
cAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNl
cHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIAogdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYWxsRnJhbWUsIFVu
d2luZFN0YXJ0IHVud2luZFN0YXJ0KQogeworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKCp2bSk7CiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CiAgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAgICAg
aWYgKGNvZGVCbG9jaykKQEAgLTU4LDcgKzU5LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2
bSwgRXhlY1N0YXRlKiBjYQogICAgIH0KICAgICB2bS0+c2hhZG93Q2hpY2tlbigpLmxvZygqdm0s
IHNoYWRvd0NoaWNrZW5Ub3BGcmFtZSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aHJvd1BhY2tl
dCgpKTsKICAgICAKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHZtLT5leGNlcHRpb24oKTsK
KyAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIFJFTEVB
U0VfQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXIgPSB2bS0+aW50
ZXJwcmV0ZXItPnVud2luZCgqdm0sIGNhbGxGcmFtZSwgZXhjZXB0aW9uLCB1bndpbmRTdGFydCk7
IC8vIFRoaXMgbWF5IHVwZGF0ZSBjYWxsRnJhbWUuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc1LDcgKzI3NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4K
ICAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkluT3B0aW1pemUsIGJhc2UtPmNsYXNzSW5m
bygpLCBpZGVudCkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgYm9vbCByZXN1bHQgPSBhc09i
amVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90KTsKLSAgICBpZiAo
dm0tPmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAg
UkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBzdHViSW5mby0+YWNjZXNzVHlwZSk7CkBAIC00
ODksNiArNDg5LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYgog
c3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZh
bHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbElu
Zm8pCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQz
MigpKSkgewogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAg
IHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKQEAgLTUxMCw3ICs1MTEsNyBAQCBz
dGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAKICAgICBhdXRvIHByb3Bl
cnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKICAgICAvLyBEb24ndCBw
dXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KLSAgICBpZiAo
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZv
ICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQg
IT0gcHJvcGVydHkpKQpAQCAtNTIyLDYgKzUyMyw4IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENh
bGxGcmFtZSogY2FsbEZyYW0KIAogc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNW
YWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CisgICAgVk0mIHZtID0gY2FsbEZy
YW1lLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBib29sIGlzU3RyaWN0TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIC8v
IERlc3BpdGUgaXRzIG5hbWUsIEpTVmFsdWU6OmlzVUludDMyIHdpbGwgcmV0dXJuIHRydWUgb25s
eSBmb3IgcG9zaXRpdmUgYm94ZWQgaW50MzJfdDsgYWxsIHRob3NlIHZhbHVlcyBhcmUgdmFsaWQg
YXJyYXkgaW5kaWNlcy4KQEAgLTU1Myw3ICs1NTYsNyBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRC
eVZhbChDYWxsRnJhbWUqIGNhCiAKICAgICAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRv
U3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0
LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT52bSgpLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5KSkgewpAQCAtNzc0LDE2ICs3NzcsMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VgogCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxFdmFsKEV4ZWNTdGF0ZSogZXhlYywgRXhlY1N0YXRlKiBleGVjQ2FsbGVlKQogewotICAg
IFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwogCiAgICAgZXhlY0NhbGxlZS0+c2V0
Q29kZUJsb2NrKDApOwogICAgIAogICAgIGlmICghaXNIb3N0RnVuY3Rpb24oZXhlY0NhbGxlZS0+
Y2FsbGVlQXNWYWx1ZSgpLCBnbG9iYWxGdW5jRXZhbCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKIAotICAgIFZNKiB2bSA9ICZleGVjQ2FsbGVlLT52bSgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gZXZhbChleGVjQ2FsbGVlKTsKLSAgICBpZiAodm0tPmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogICAgIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKQEAgLTgwNyw3ICs4MTAsNyBAQCBzdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhh
bmRsZUhvc3RDYWxsCiAgICAgICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBleGVjQ2FsbGVlKTsKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVj
dChjYWxsZWUpKTsKICAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAg
ICAgICBpZiAodm0tPmV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgK
ICAgICAgICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CkBAIC04
MzYsNyArODM5LDcgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAog
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjQ2FsbGVlKTsKICAg
ICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2
bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5h
dGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7Ci0gICAgICAgIGlmICh2bS0+ZXhjZXB0aW9uKCkp
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBU
aGVGcmFtZSkpOwpAQCAtMTQ2Miw4ICsxNDY1LDEwIEBAIGVudW0gY2xhc3MgQWNjZXNzb3JUeXBl
IHsKIAogc3RhdGljIHZvaWQgcHV0QWNjZXNzb3JCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgaW50MzJfdCBhdHRyaWJ1dGUsIEpTT2JqZWN0
KiBhY2Nlc3NvciwgQWNjZXNzb3JUeXBlIGFjY2Vzc29yVHlwZSkKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBhdXRvIHByb3BlcnR5S2V5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChhY2Nlc3NvclR5cGUgPT0gQWNjZXNz
b3JUeXBlOjpHZXR0ZXIpCkBAIC0xNjA4LDggKzE2MTMsMTAgQEAgc3RhdGljIGJvb2wgY2FuQWNj
ZXNzQXJndW1lbnRJbmRleFF1aWNrbAogCiBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0
cmluZygpKSkgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgICAgICBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSA9ICpiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgIGlmIChKU0NlbGw6OmNhblVzZUZhc3RHZXRPd25Qcm9wZXJ0eShzdHJ1Y3R1cmUpKSB7CiAg
ICAgICAgICAgICBpZiAoUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IGV4aXN0aW5nQXRvbWljU3Ry
aW5nID0gYXNTdHJpbmcoc3Vic2NyaXB0KS0+dG9FeGlzdGluZ0F0b21pY1N0cmluZyhleGVjKSkg
ewpAQCAtMTY1MSwxMCArMTY1OCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgfQogCiAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+Ynl0ZWNv
ZGVPZmZzZXQoKSk7CkBAIC0xODQ1LDYgKzE4NTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkdlCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICAKQEAgLTE4NjIsMTAgKzE4NzAsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgYmFzZVZhbHVlLnJlcXVpcmVPYmplY3RDb2VyY2libGUoZXhlYyk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0
eUtleShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdl
dChleGVjLCBwcm9wZXJ0eSk7CiAgICAgfQpAQCAtMTkxNCwxMCArMTkyMiwxMCBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25EZWxldGVCeVZhCiAgICAgaWYgKGtleS5nZXRVSW50MzIo
aW5kZXgpKQogICAgICAgICBjb3VsZERlbGV0ZSA9IGJhc2VPYmotPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KGJhc2VPYmosIGV4ZWMsIGluZGV4KTsKICAgICBlbHNlIHsK
LSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBJZGVudGlm
aWVyIHByb3BlcnR5ID0ga2V5LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY291bGREZWxldGUgPSBiYXNlT2JqLT5t
ZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmosIGV4ZWMsIHByb3BlcnR5KTsK
ICAgICB9CkBAIC0yMTIyLDcgKzIxMzAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0VG9TY29wZShFCiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCksIFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlh
bGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5t
ZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAg
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlD
YWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIGdldFB1dElu
Zm8sIHNsb3QsIGlkZW50KTsKQEAgLTIzNzEsMTEgKzIzNzksMTIgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSB1bnByb2ZpbGVkTXVsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogeworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9wMSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AxKTsKICAgICBKU1ZhbHVlIG9wMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoYSAqIGIpKTsKQEAgLTIzODMsNiArMjM5Miw3IEBAIEFMV0FZU19JTkxJ
TkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHIKIAogQUxXQVlTX0lOTElORSBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgcHJvZmlsZWRNdWwoVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIsIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlLCBib29sIHNob3VsZE9ic2VydmVMSFNBbmRSSFNUeXBlcyA9IHRydWUp
CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFs
dWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpTVmFsdWUgb3AyID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCkBAIC0yMzkwLDEwICsyNDAwLDEwIEBAIEFM
V0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHByb2YKICAgICAgICAgYXJpdGhQcm9m
aWxlLT5vYnNlcnZlTEhTQW5kUkhTKG9wMSwgb3AyKTsKIAogICAgIGRvdWJsZSBhID0gb3AxLnRv
TnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwogICAgIGRvdWJsZSBiID0gb3AyLnRvTnVtYmVyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIAogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoYSAqIGIpOwpAQCAtMjQ2OCwxMSAr
MjQ3OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZhCiAKIEFM
V0FZU19JTkxJTkUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHVucHJvZmlsZWRTdWIoVk0mIHZtLCBF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwogICAgIEpT
VmFsdWUgb3AyID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpOwogCiAgICAgZG91YmxlIGEg
PSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBvcDIudG9OdW1iZXIoZXhl
Yyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihhIC0gYikpOwpAQCAtMjQ4
MCw2ICsyNDkxLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdW5wcgog
CiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBwcm9maWxlZFN1YihWTSYgdm0s
IEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMiwgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIGJvb2wgc2hvdWxkT2Jz
ZXJ2ZUxIU0FuZFJIU1R5cGVzID0gdHJ1ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSk7CiAgICAgSlNWYWx1ZSBvcDIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMik7CiAK
QEAgLTI0ODcsMTAgKzI0OTksMTAgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgcHJvZgogICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVMSFNBbmRSSFMob3AxLCBvcDIp
OwogCiAgICAgZG91YmxlIGEgPSBvcDEudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZ
KHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIg
PSBvcDIudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051
bWJlcihhIC0gYik7CkBAIC0yNTgwLDEzICsyNTkyLDE0IEBAIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25DaGVja0lmRXgKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VS
VCghIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgUkVMRUFTRV9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSk7CiAKLSAgICBp
ZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLmV4Y2VwdGlvbigpKSkgeworICAg
IGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgIGdlbmVyaWNVbndpbmQoJnZtLCBleGVjKTsKICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAog
fSAvLyBleHRlcm4gIkMiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
eGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDggQEAgSW5zdHJ1Y3Rpb24qIHJldHVyblRvVGhyb3coRXhlY1N0YXRlKiBleAogICAgIFVO
VVNFRF9QQVJBTShleGVjKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJBQ0lORwogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+
ZXhjZXB0aW9uKCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24g
Iiwgc2NvcGUuZXhjZXB0aW9uKCksICIgKHJldHVyblRvVGhyb3cpLlxuIik7CiAjZW5kaWYKICAg
ICByZXR1cm4gTExJbnQ6OmV4Y2VwdGlvbkluc3RydWN0aW9ucygpOwogfQpAQCAtNTYsNyArNTcs
OCBAQCB2b2lkKiBjYWxsVG9UaHJvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOwogI2lmIExMSU5UX1NMT1dfUEFUSF9UUkFDSU5HCiAgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7Ci0gICAgZGF0YUxvZygiVGhyb3dpbmcgZXhjZXB0aW9uICIsIHZtLT5leGNlcHRpb24o
KSwgIiAoY2FsbFRvVGhyb3cpLlxuIik7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoKnZtKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhj
ZXB0aW9uKCksICIgKGNhbGxUb1Rocm93KS5cbiIpOwogI2VuZGlmCiAgICAgcmV0dXJuIExMSW50
OjpnZXRDb2RlUHRyKGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODIsNyArODgyLDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogCiAgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9i
amVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCiAgICAgYXV0byBwcm9wZXJ0eSA9
IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT52bSgpLmV4Y2Vw
dGlvbigpKQorICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICBMTElOVF9F
TkQoKTsKIAogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHBy
b3BlcnR5KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
cm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE2IEBAIGNvbnN0IEJ5dGVjb2RlJiBC
eXRlY29kZVNlcXVlbmNlOjpmb3JCeXQKIHZvaWQgQnl0ZWNvZGVTZXF1ZW5jZTo6YWRkU2VxdWVu
Y2VQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBoZWFkZXIgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2hlYWRlci5zaXplKCk7ICsraSkKICAgICAgICAgaGVhZGVyLT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCBTdHJpbmc6OmZyb21VVEY4KG1faGVh
ZGVyW2ldKSkpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuaGVhZGVyLCBoZWFkZXIpOwogICAgIAogICAgIEpTQXJyYXkqIHNlcXVlbmNlID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXF1ZW5jZS5zaXplKCk7ICsraSkKICAg
ICAgICAgc2VxdWVuY2UtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fc2VxdWVuY2VbaV0udG9K
UyhleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJD
b21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVyQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSwyOCArMTE1LDI5IEBAIHZvaWQgQ29tcGlsYXRpb246OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkKIEpTVmFsdWUgQ29tcGlsYXRpb246OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBj
b25zdAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZWNvZGVzSUQsIGpzTnVtYmVyKG1fYnl0ZWNvZGVzLT5pZCgpKSk7CiAgICAgcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxhdGlvbktpbmQsIGpzU3RyaW5n
KGV4ZWMsIFN0cmluZzo6ZnJvbVVURjgodG9DU3RyaW5nKG1fa2luZCkpKSk7CiAgICAgCiAgICAg
SlNBcnJheSogcHJvZmlsZWRCeXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvZmlsZWRCeXRlY29kZXMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIHByb2ZpbGVkQnl0ZWNvZGVzLT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBtX3Byb2Zp
bGVkQnl0ZWNvZGVzW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvZmlsZWRCeXRlY29kZXMsIHByb2ZpbGVkQnl0ZWNvZGVz
KTsKICAgICAKICAgICBKU0FycmF5KiBkZXNjcmlwdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVzY3JpcHRpb25zLnNpemUoKTsgKytp
KQogICAgICAgICBkZXNjcmlwdGlvbnMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fZGVzY3Jp
cHRpb25zW2ldLnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZGVzY3JpcHRpb25zLCBkZXNjcmlwdGlvbnMpOwogICAgIAogICAgIEpT
QXJyYXkqIGNvdW50ZXJzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoYXV0byBpdCA9
IG1fY291bnRlcnMuYmVnaW4oKSwgZW5kID0gbV9jb3VudGVycy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CiAgICAgICAgIEpTT2JqZWN0KiBjb3VudGVyRW50cnkgPSBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjKTsKQEAgLTE0NywxNCArMTQ4LDE0IEBAIEpTVmFsdWUgQ29tcGlsYXRpb246OnRv
SlMoRXhlY1N0YXRlKiBleGUKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvdW50ZXJzLCBjb3VudGVycyk7CiAgICAgCiAgICAgSlNBcnJheSogZXhpdFNp
dGVzID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X29zckV4aXRTaXRlcy5zaXplKCk7ICsraSkKICAgICAgICAgZXhpdFNpdGVzLT5wdXREaXJlY3RJ
bmRleChleGVjLCBpLCBtX29zckV4aXRTaXRlc1tpXS50b0pTKGV4ZWMpKTsKICAgICByZXN1bHQt
PnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm9zckV4aXRTaXRlcywgZXhpdFNp
dGVzKTsKICAgICAKICAgICBKU0FycmF5KiBleGl0cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vc3JFeGl0cy5zaXplKCk7ICsraSkKICAgICAg
ICAgZXhpdHMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fb3NyRXhpdHNbaV0udG9KUyhleGVj
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZXJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCwy
NCArMTAwLDI1IEBAIHZvaWQgRGF0YWJhc2U6OmFkZENvbXBpbGF0aW9uKENvZGVCbG9jayoKIEpT
VmFsdWUgRGF0YWJhc2U6OnRvSlMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKICAg
ICAKICAgICBKU0FycmF5KiBieXRlY29kZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnl0ZWNvZGVzLnNpemUoKTsgKytpKQogICAgICAgICBi
eXRlY29kZXMtPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIG1fYnl0ZWNvZGVzW2ldLnRvSlMoZXhl
YykpOwogICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYnl0
ZWNvZGVzLCBieXRlY29kZXMpOwogICAgIAogICAgIEpTQXJyYXkqIGNvbXBpbGF0aW9ucyA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxh
dGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGNvbXBpbGF0aW9ucy0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwgbV9jb21waWxhdGlvbnNbaV0tPnRvSlMoZXhlYykpOwogICAgIHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsYXRpb25zLCBjb21waWxhdGlv
bnMpOwogICAgIAogICAgIEpTQXJyYXkqIGV2ZW50cyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ldmVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAg
IGV2ZW50cy0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgbV9ldmVudHNbaV0udG9KUyhleGVjKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDggKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBQcm9maWxlciB7CiBKU1Zh
bHVlIE9TUkV4aXRTaXRlOjp0b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBKU0FycmF5KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUFkZHJlc3Nlcy5zaXplKCk7ICsraSkKICAgICAgICAg
cmVzdWx0LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCBqc1N0cmluZyhleGVjLCB0b1N0cmluZyhS
YXdQb2ludGVyKG1fY29kZUFkZHJlc3Nlc1tpXSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcHJvZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW5TdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOSBAQCB2b2lkIE9y
aWdpblN0YWNrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiBKU1ZhbHVlIE9yaWdpblN0YWNrOjp0
b0pTKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc3RhY2suc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5Niw2ICsxOTYsOSBAQCBlbnVtIGNsYXNzIFNwZWNpZXNDb25zdHJ1Y3RSZXN1
bHQgewogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVjdFJl
c3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzQ29uc3RydWN0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gRUNNQSA5LjQuMi4zOiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1h
cnJheXNwZWNpZXNjcmVhdGUKICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0ganNVbmRlZmluZWQo
KTsKICAgICBpZiAoTElLRUxZKGlzQXJyYXkoZXhlYywgdGhpc09iamVjdCkpKSB7CkBAIC0yMDUs
NyArMjA4LDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkZh
c3RQYXRoLCBudWxscHRyKTsKIAogICAgICAgICBjb25zdHJ1Y3RvciA9IHRoaXNPYmplY3QtPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlz
Q29uc3RydWN0b3IoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yT2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4oY29uc3RydWN0b3IpOwpAQCAtMjE0LDEyICsyMTcsMTIgQEAg
c3RhdGljIEFMV0FZU19JTkxJTkUgc3RkOjpwYWlyPFNwZWNpZXNDbwogICAgICAgICB9CiAgICAg
ICAgIGlmIChjb25zdHJ1Y3Rvci5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBjb25zdHJ1Y3Rv
ciA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5
bWJvbCk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24sIG51bGxw
dHIpOwogICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpGYXN0UGF0
aCwgbnVsbHB0cik7OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICB9IGVsc2UgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlv
biwgbnVsbHB0cik7CiAKICAgICBpZiAoY29uc3RydWN0b3IuaXNVbmRlZmluZWQoKSkKQEAgLTIy
OCw3ICsyMzEsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBzdGQ6OnBhaXI8U3BlY2llc0NvCiAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKICAgICBhcmdzLmFwcGVuZChqc051bWJlcihs
ZW5ndGgpKTsKICAgICBKU09iamVjdCogbmV3T2JqZWN0ID0gY29uc3RydWN0KGV4ZWMsIGNvbnN0
cnVjdG9yLCBhcmdzLCAiU3BlY2llcyBjb25zdHJ1Y3Rpb24gZGlkIG5vdCBnZXQgYSB2YWxpZCBj
b25zdHJ1Y3RvciIpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
U3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6RXhjZXB0aW9uLCBudWxscHRyKTsKICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCwgbmV3
T2JqZWN0KTsKIH0KQEAgLTI4NCwxMCArMjg3LDEwIEBAIHZvaWQgc2hpZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGgKICAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50Q291
bnQ7CiAgICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3VsdENvdW50OwogICAgICAgICBpZiAo
SlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGZyb20pKSB7Ci0gICAg
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgdG8sIHZhbHVlLCB0cnVlKTsKLSAg
ICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9IGVsc2UgaWYgKCF0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqLCBleGVjLCB0bykpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOwpA
QCAtMzMwLDMxICszMzMsMzIgQEAgdm9pZCB1bnNoaWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIAogICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7CiAgICAg
ICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAgaWYgKEpTVmFs
dWUgdmFsdWUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBmcm9tKSkgewotICAgICAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0
aGlzT2JqLT5wdXRCeUluZGV4SW5saW5lKGV4ZWMsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmosIGV4ZWMsIHRvKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0ZSBwcm9wZXJ0eS4iKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBh
cnJheVByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKTsKIAogICAgIC8vIDEuIExldCBhcnJheSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
VG9PYmplY3Qgb24gdGhlIHRoaXMgdmFsdWUuCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0
aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgCiAgICAgLy8gMi4gTGV0IGZ1bmMgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBb
W0dldF1dIGludGVybmFsIG1ldGhvZCBvZiBhcnJheSB3aXRoIGFyZ3VtZW50ICJqb2luIi4KICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gSlNWYWx1ZSh0aGlzT2JqZWN0KS5nZXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmpvaW4pOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDMuIElmIElzQ2FsbGFibGUo
ZnVuYykgaXMgZmFsc2UsIHRoZW4gbGV0IGZ1bmMgYmUgdGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1l
dGhvZCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nICgxNS4yLjQuMikuCkBAIC0zODMsMTggKzM4
NywxOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKICAgICBKU1N0cmlu
Z0pvaW5lciBqb2luZXIoKmV4ZWMsICcsJywgbGVuZ3RoKTsKLSAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50
ID0gdGhpc0FycmF5LT50cnlHZXRJbmRleFF1aWNrbHkoaSk7CiAgICAgICAgIGlmICghZWxlbWVu
dCkgewogICAgICAgICAgICAgZWxlbWVudCA9IHRoaXNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgfQogICAgICAgICBqb2luZXIuYXBw
ZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC00MDMs
MTQgKzQwNywxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAKICAgICBKU09i
amVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqZWN0KTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0
cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tlcihleGVjLCB0aGlzT2JqZWN0KTsKQEAgLTQxOCw1
MiArNDI0LDUyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJseVJldHVyblZhbHVlKTsKIAogICAgIEpT
U3RyaW5nSm9pbmVyIHN0cmluZ0pvaW5lcigqZXhlYywgJywnLCBsZW5ndGgpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAjaWYg
RU5BQkxFKElOVEwpCiAgICAgQXJnTGlzdCBhcmd1bWVudHMoZXhlYyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9
IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBp
ZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgZWxlbWVudCA9IGpz
RW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBj
b252ZXJzaW9uRnVuY3Rpb24gPSBlbGVtZW50LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkudG9Mb2NhbGVTdHJpbmcpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdl
dENhbGxEYXRhKGNvbnZlcnNpb25GdW5jdGlvbiwgY2FsbERhdGEpOwogICAgICAgICAgICAgaWYg
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudCA9
IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1l
bnQsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBl
bGVtZW50KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAjZWxzZSAvLyAhRU5BQkxFKElOVEwpCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFs
dWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldEluZGV4KGV4ZWMsIGkpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIEpTVmFsdWUgY29udmVyc2lvbkZ1bmN0aW9uID0gZWxlbWVudC5n
ZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKTsKLSAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAg
IGlmIChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgZWxlbWVudCA9
IGNhbGwoZXhlYywgY29udmVyc2lvbkZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsIGVsZW1l
bnQsIGV4ZWMtPmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgfQogICAgICAgICBzdHJpbmdKb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKLSAgICAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICB9CiAjZW5kaWYgLy8gIUVOQUJMRShJTlRMKQpAQCAtNDk4LDE1ICs1MDQs
MTYgQEAgc3RhdGljIGlubGluZSBib29sIGhvbGVzTXVzdEZvcndhcmRUb1BybwogCiBzdGF0aWMg
SlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBK
U1N0cmluZyogc2VwYXJhdG9yLCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAg
IC8vIDUuIElmIGxlbiBpcyB6ZXJvLCByZXR1cm4gdGhlIGVtcHR5IFN0cmluZy4KICAgICBpZiAo
IWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogCi0gICAgVk0m
IHZtID0gZXhlYy52bSgpOwotCiAgICAgLy8gNi4gTGV0IGVsZW1lbnQwIGJlIEdldChPLCAiMCIp
LgogICAgIEpTVmFsdWUgZWxlbWVudDAgPSB0aGlzT2JqZWN0LT5nZXRJbmRleCgmZXhlYywgMCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA3LiBJZiBlbGVtZW50
MCBpcyB1bmRlZmluZWQgb3IgbnVsbCwgbGV0IFIgYmUgdGhlIGVtcHR5IFN0cmluZzsgb3RoZXJ3
aXNlLCBsZXQgUiBiZSA/IFRvU3RyaW5nKGVsZW1lbnQwKS4KQEAgLTUxNSw3ICs1MjIsNyBAQCBz
dGF0aWMgSlNWYWx1ZSBzbG93Sm9pbihFeGVjU3RhdGUmIGV4ZWMsCiAgICAgICAgIHIgPSBqc0Vt
cHR5U3RyaW5nKCZleGVjKTsKICAgICBlbHNlCiAgICAgICAgIHIgPSBlbGVtZW50MC50b1N0cmlu
ZygmZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICAvLyA4LiBM
ZXQgayBiZSAxLgpAQCAtNTI0LDcgKzUzMSw3IEBAIHN0YXRpYyBKU1ZhbHVlIHNsb3dKb2luKEV4
ZWNTdGF0ZSYgZXhlYywKICAgICBmb3IgKHVpbnQ2NF90IGsgPSAxOyBrIDwgbGVuZ3RoOyArK2sp
IHsKICAgICAgICAgLy8gYi4gTGV0IGVsZW1lbnQgYmUgPyBHZXQoTywgISBUb1N0cmluZyhrKSku
CiAgICAgICAgIEpTVmFsdWUgZWxlbWVudCA9IHRoaXNPYmplY3QtPmdldCgmZXhlYywgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmZXhlYywgQXRvbWljU3RyaW5nOjpudW1iZXIoaykpKTsKLSAgICAg
ICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBjLiBJ
ZiBlbGVtZW50IGlzIHVuZGVmaW5lZCBvciBudWxsLCBsZXQgbmV4dCBiZSB0aGUgZW1wdHkgU3Ry
aW5nOyBvdGhlcndpc2UsIGxldCBuZXh0IGJlID8gVG9TdHJpbmcoZWxlbWVudCkuCkBAIC01MzUs
NyArNTQyLDcgQEAgc3RhdGljIEpTVmFsdWUgc2xvd0pvaW4oRXhlY1N0YXRlJiBleGVjLAogICAg
ICAgICAgICAgbmV4dCA9IGpzRW1wdHlTdHJpbmcoJmV4ZWMpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG5leHQgPSBlbGVtZW50LnRvU3RyaW5nKCZleGVjKTsKLSAgICAgICAgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgICAgICAvLyBhLiBMZXQgUyBiZSB0
aGUgU3RyaW5nIHZhbHVlIHByb2R1Y2VkIGJ5IGNvbmNhdGVuYXRpbmcgUiBhbmQgc2VwLgpAQCAt
NTYxLDYgKzU2OCw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5Vc2VGYXN0Sm9pbihjb25zdCAK
IAogc3RhdGljIGlubGluZSBKU1ZhbHVlIGZhc3RKb2luKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBTdHJpbmdWaWV3IHNlcGFyYXRvciwgdW5zaWduZWQgbGVuZ3RoKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCiAgICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CiAgICAgY2FzZSBBTExf
SU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKQEAgLTU2OCw3ICs1NzgsNyBAQCBzdGF0aWMgaW5saW5l
IEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJm
bHkucHVibGljTGVuZ3RoKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgSlNTdHJpbmdK
b2luZXIgam9pbmVyKHN0YXRlLCBzZXBhcmF0b3IsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICBhdXRvIGRhdGEg
PSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKICAgICAgICAgYm9vbCBob2xlc0tub3du
VG9CZU9LID0gZmFsc2U7CkBAIC01OTIsNyArNjAyLDcgQEAgc3RhdGljIGlubGluZSBKU1ZhbHVl
IGZhc3RKb2luKEV4ZWNTdGF0ZQogICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1Ymxp
Y0xlbmd0aCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpv
aW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgYXV0byBkYXRhID0gYnV0dGVy
Zmx5LmNvbnRpZ3VvdXNEb3VibGUoKS5kYXRhKCk7CiAgICAgICAgIGJvb2wgaG9sZXNLbm93blRv
QmVPSyA9IGZhbHNlOwpAQCAtNjAyLDcgKzYxMiw3IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBm
YXN0Sm9pbihFeGVjU3RhdGUKICAgICAgICAgICAgICAgICBqb2luZXIuYXBwZW5kKHN0YXRlLCBq
c0RvdWJsZU51bWJlcih2YWx1ZSkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFob2xlc0tub3duVG9CZU9LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUoc3RhdGUudm0oKSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlw
ZShzdGF0ZS52bSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGdlbmVyYWxDYXNlOwogICAgICAgICAgICAgICAgICAgICBob2xlc0tu
b3duVG9CZU9LID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC02MTUsMTQgKzYyNSwxNCBA
QCBzdGF0aWMgaW5saW5lIEpTVmFsdWUgZmFzdEpvaW4oRXhlY1N0YXRlCiAKIGdlbmVyYWxDYXNl
OgogICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcihzdGF0ZSwgc2VwYXJhdG9yLCBsZW5ndGgpOwot
ICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBlbGVtZW50ID0g
dGhpc09iamVjdC0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGpvaW5lci5hcHBlbmQoc3Rh
dGUsIGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAgICAgcmV0dXJuIGpvaW5lci5qb2luKHN0YXRlKTsKQEAgLTYz
MCw2ICs2NDAsOSBAQCBnZW5lcmFsQ2FzZToKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheVByb3RvRnVuY0pvaW4oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAg
ICAgLy8gMS4gTGV0IE8gYmUgPyBUb09iamVjdCh0aGlzIHZhbHVlKS4KICAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50
b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmplY3QpCkBAIC02NDEsNyArNjU0LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgLy8gMi4gTGV0
IGxlbiBiZSA/IFRvTGVuZ3RoKD8gR2V0KE8sICJsZW5ndGgiKSkuCiAgICAgZG91YmxlIGxlbmd0
aCA9IHRvTGVuZ3RoKGV4ZWMsIHRoaXNPYmplY3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAvLyAzLiBJZiBzZXBhcmF0b3Ig
aXMgdW5kZWZpbmVkLCBsZXQgc2VwYXJhdG9yIGJlIHRoZSBzaW5nbGUtZWxlbWVudCBTdHJpbmcg
IiwiLgpAQCAtNjUzLDcgKzY2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aDY0ID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihs
ZW5ndGg2NCkgPT0gbGVuZ3RoKTsKICAgICAgICAgICAgIEpTU3RyaW5nKiBqc1NlcGFyYXRvciA9
IGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV4ZWMsIGNvbW1hKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwogCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNsb3dKb2luKCpleGVj
LCB0aGlzT2JqZWN0LCBqc1NlcGFyYXRvciwgbGVuZ3RoNjQpKTsKQEAgLTY2Niw3ICs2NzksNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKICAgICAvLyA0LiBM
ZXQgc2VwIGJlID8gVG9TdHJpbmcoc2VwYXJhdG9yKS4KICAgICBKU1N0cmluZyoganNTZXBhcmF0
b3IgPSBzZXBhcmF0b3JWYWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGlmIChVTkxJS0VM
WShsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfHwgIWNhblVz
ZUZhc3RKb2luKHRoaXNPYmplY3QpKSkgewpAQCAtNjkyLDcgKzcwNSw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsKQEAg
LTcwMSw3ICs3MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
cmVzdWx0ID0gdGhpc09iai0+Z2V0KGV4ZWMsIGxlbmd0aCAtIDEpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXNPYmosIGV4ZWMsIGxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5
LiIpKTsKQEAgLTcxNCw2ICs3MjcsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQ
dXNoKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1
ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKTsKIAogICAgIGlm
IChpc0pTQXJyYXkodGhpc1ZhbHVlKSAmJiBleGVjLT5hcmd1bWVudENvdW50KCkgPT0gMSkgewpA
QCAtNzI2LDcgKzc0MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgZXhlYy0+YXJndW1lbnRDb3VudCgp
OyBuKyspIHsKQEAgLTczOCw3ICs3NTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5n
dGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGV4ZWMpKTsKICAgICAg
ICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKCktPnB1dCh0aGlzT2JqLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCBzbG90KTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAgLTc1Nyw3ICs3NzIsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0
aGlzT2JqZWN0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBlKCkpIHsKQEAg
LTc5OCw0MSArODEzLDQxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKysp
IHsKICAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAg
IGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBsb3dlcik7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1ZTsKICAgICAgICAgaWYgKGxvd2Vy
RXhpc3RzKSB7CiAgICAgICAgICAgICBsb3dlclZhbHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMs
IGxvd2VyKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBib29sIHVwcGVyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgdXBw
ZXIpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgSlNWYWx1ZSB1cHBlclZhbHVlOwogICAg
ICAgICBpZiAodXBwZXJFeGlzdHMpIHsKICAgICAgICAgICAgIHVwcGVyVmFsdWUgPSB0aGlzT2Jq
ZWN0LT5nZXQoZXhlYywgdXBwZXIpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09i
amVjdC0+cHV0QnlJbmRleElubGluZShleGVjLCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFi
bGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgbG93ZXIpKSB7
Ci0gICAgICAgICAgICBpZiAoIXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChsb3dlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVjdC0+cHV0QnlJbmRl
eElubGluZShleGVjLCB1cHBlciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
ICAgICAgICAgfSBlbHNlIGlmICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgdXBwZXIpKSB7Ci0gICAgICAgICAgICBp
ZiAoIXZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAgICAgfQpAQCAtODQyLDExICs4NTcsMTMgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jU2hpZnQoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgcmVz
dWx0OwpAQCAtODU2LDcgKzg3Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQgPSB0aGlzT2JqLT5nZXRJbmRl
eChleGVjLCAwKTsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0Pihl
eGVjLCB0aGlzT2JqLCAwLCAxLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBw
dXRMZW5ndGgoZXhlYywgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogICAgIH0KQEAg
LTg2NywxMSArODg0LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKIHsKICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLm5ldHNjYXBlLmNvbS9kb2NzL21hbnVhbHMv
anMvY2xpZW50L2pzcmVmL2FycmF5Lmh0bSMxMTkzNzEzIG9yIDE1LjQuNC4xMAogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMs
IFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwogICAgIGlmICghdGhpc09iaikKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9
IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgbGVuZ3RoKTsKQEAg
LTg5MiwxNCArOTEwLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7CiAgICAgZWxzZSB7CiAg
ICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZW5kIC0g
YmVnaW4pOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBuID0gMDsK
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAgICAg
ICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgayk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBpZiAodikKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgbiwgdik7CkBAIC05MTksNyArOTM3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmICghdGhpc09iaikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0
aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQo
KSkgewpAQCAtOTMyLDcgKzk1MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhl
YywgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9CiAK
QEAgLTk2NywxMiArOTg1LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGRlbGV0ZUNvdW50OyArK2spIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9w
ZXJ0eShleGVjLCB0aGlzT2JqLCBrICsgYmVnaW4pOwotICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICByZXN1bHQtPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgaywgdiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtOTgy
LDcgKzEwMDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZWxldGVD
b3VudDsgKytrKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZXhl
YywgdGhpc09iaiwgayArIGJlZ2luKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0u
ZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC05OTQsMTYgKzEwMTIsMTYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxBcmdzID0g
c3RkOjptYXg8aW50PihleGVjLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoYWRk
aXRpb25hbEFyZ3MgPCBkZWxldGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpTaGlm
dENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFkZGl0
aW9uYWxBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9IGVsc2UgaWYgKGFk
ZGl0aW9uYWxBcmdzID4gZGVsZXRlQ291bnQpIHsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpT
aGlmdENvdW50Rm9yU3BsaWNlPihleGVjLCB0aGlzT2JqLCBiZWdpbiwgZGVsZXRlQ291bnQsIGFk
ZGl0aW9uYWxBcmdzLCBsZW5ndGgpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGFkZGl0aW9uYWxBcmdzOyArK2spIHsKICAgICAgICAgdGhp
c09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBrICsgYmVnaW4sIGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KGsgKyAyKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICAKQEAg
LTEwMTMsMjQgKzEwMzEsMjYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jVW5TaGlm
dChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTUuNC40LjEzCiAKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJp
Y3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRM
ZW5ndGgoZXhlYywgdGhpc09iaik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBuckFyZ3MgPSBleGVjLT5h
cmd1bWVudENvdW50KCk7CiAgICAgaWYgKG5yQXJncykgewogICAgICAgICB1bnNoaWZ0PEpTQXJy
YXk6OlNoaWZ0Q291bnRGb3JTaGlmdD4oZXhlYywgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5n
dGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
bnJBcmdzOyArK2spIHsKICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShleGVjLCBr
LCBleGVjLT51bmNoZWNrZWRBcmd1bWVudChrKSwgdHJ1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
fQogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIobGVuZ3RoICsgbnJBcmdzKTsKQEAgLTEw
NDAsMjYgKzEwNjAsMjggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jSW5kZXhPZihF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxNS40LjQuMTQKICAgICBK
U09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RN
b2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKLSAgICBpZiAoVU5M
SUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhl
YywgMSwgbGVuZ3RoKTsKICAgICBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgSlNW
YWx1ZSBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
IChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCkBAIC0xMDY4LDYgKzEwOTAsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0Z1bmNMYXN0SW5kZXhPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
ICAgICAvLyAxNS40LjQuMTUKICAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1
ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKICAgICBpZiAoIXRo
aXNPYmopCkBAIC0xMDg5LDE4ICsxMTE0LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGZyb21Eb3VibGUpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNW
YWx1ZSBzZWFyY2hFbGVtZW50ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgZG8gewogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCk7CiAgICAgICAgIEpTVmFsdWUgZSA9IGdl
dFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoSlNWYWx1ZTo6
c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0gd2hpbGUgKGluZGV4LS0pOwogCkBAIC0xMTA5LDIzICsxMTMzLDI1IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogc3RhdGljIGJvb2wgbW92ZUVsZW1lbnRz
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0FycmF5KiB0YXJnZXQsIHVuc2lnbmVkIHRhcmdl
dE9mZnNldCwgSlNBcnJheSogc291cmNlLCB1bnNpZ25lZCBzb3VyY2VMZW5ndGgpCiB7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKExJS0VMWSgh
aGFzQW55QXJyYXlTdG9yYWdlKHNvdXJjZS0+aW5kZXhpbmdUeXBlKCkpICYmICFzb3VyY2UtPnN0
cnVjdHVyZSgpLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBzb3VyY2UtPnRyeUdldEluZGV4UXVpY2tseShpKTsKICAgICAgICAg
ICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgdGFyZ2V0T2Zmc2V0ICsgaSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c291cmNlTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCBzb3VyY2UsIGkpOwotICAgICAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAg
ICAgICB0YXJnZXQtPnB1dERpcmVjdEluZGV4KGV4ZWMsIHRhcmdldE9mZnNldCArIGksIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTU0LDcgKzExODAsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgY29uY2F0QXBwZW5kT25lKEV4CiAKICAgICBpZiAoIXJl
c3VsdC0+YXBwZW5kTWVtY3B5KGV4ZWMsIHZtLCAwLCBmaXJzdCkpIHsKICAgICAgICAgaWYgKCFt
b3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3VsdCwgMCwgZmlyc3QsIGZpcnN0QXJyYXlTaXplKSkg
ewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTk5LDEyICsxMjI1LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b1AKICAgICBJbmRleGluZ1R5cGUg
dHlwZSA9IGZpcnN0QXJyYXktPm1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhzZWNvbmRUeXBl
KTsKICAgICBpZiAodHlwZSA9PSBOb25BcnJheSB8fCAhZmlyc3RBcnJheS0+Y2FuRmFzdENvcHko
dm0sIHNlY29uZEFycmF5KSB8fCBmaXJzdEFycmF5U2l6ZSArIHNlY29uZEFycmF5U2l6ZSA+PSBN
SU5fU1BBUlNFX0FSUkFZX0lOREVYKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgZmlyc3RBcnJheVNpemUgKyBzZWNvbmRBcnJh
eVNpemUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAKICAgICAgICAgaWYgKCFtb3ZlRWxlbWVudHMoZXhlYywgdm0sIHJlc3Vs
dCwgMCwgZmlyc3RBcnJheSwgZmlyc3RBcnJheVNpemUpCiAgICAgICAgICAgICB8fCAhbW92ZUVs
ZW1lbnRzKGV4ZWMsIHZtLCByZXN1bHQsIGZpcnN0QXJyYXlTaXplLCBzZWNvbmRBcnJheSwgc2Vj
b25kQXJyYXlTaXplKSkgewotICAgICAgICAgICAgQVNTRVJUKHZtLmV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTQgQEAgdm9pZCBC
b29sZWFuQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKAogLy8gRUNNQSAxNS42LjIKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdFdpdGhCb29sZWFuQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgYm9vbGVh
biA9IGpzQm9vbGVhbihleGVjLT5hcmd1bWVudCgwKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIFN0
cnVjdHVyZSogYm9vbGVhblN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNs
YXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rpb24o
ZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwotICAgIEJvb2xlYW5PYmplY3QqIG9iaiA9IEJvb2xlYW5PYmplY3Q6OmNyZWF0ZShleGVjLT52
bSgpLCBib29sZWFuU3RydWN0dXJlKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoZXhlYy0+
dm0oKSwgYm9vbGVhbik7CisgICAgQm9vbGVhbk9iamVjdCogb2JqID0gQm9vbGVhbk9iamVjdDo6
Y3JlYXRlKHZtLCBib29sZWFuU3RydWN0dXJlKTsKKyAgICBvYmotPnNldEludGVybmFsVmFsdWUo
dm0sIGJvb2xlYW4pOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAkocmV2aXNpb24g
MjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MiwxMCArNDIsMTIgQEAgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBmdQogCiBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRh
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgTmFrZWRQdHI8RXhjZXB0
aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNW
YWx1ZSwgYXJncyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhdGNoU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKwor
Q2F0Y2hTY29wZTo6Q2F0Y2hTY29wZShWTSYgdm0sIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbG9j
YXRpb24pCisgICAgOiBFeGNlcHRpb25TY29wZSh2bSwgbG9jYXRpb24pCit7CisgICAgbV92bS52
ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChtX3JlY3Vyc2lvbkRlcHRoLCBtX2xv
Y2F0aW9uKTsKK30KKworQ2F0Y2hTY29wZTo6fkNhdGNoU2NvcGUoKQoreworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CisgICAgbV92bS52ZXJpZnlFeGNlcHRp
b25DaGVja05lZWRJc1NhdGlzZmllZChtX3JlY3Vyc2lvbkRlcHRoLCBtX2xvY2F0aW9uKTsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorICAgIAor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YXRjaFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2F0Y2hTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhdGNoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYXRjaFNjb3Bl
X2gKKyNkZWZpbmUgQ2F0Y2hTY29wZV9oCisKKyNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKyAgICAKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklG
SUNBVElPTikKKyAgICAKKy8vIElmIGEgZnVuY3Rpb24gY2FuIGNsZWFyIEpTIGV4Y2VwdGlvbnMs
IGl0IHNob3VsZCBkZWNsYXJlIGEgQ2F0Y2hTY29wZSBhdCB0aGUKKy8vIHRvcCBvZiB0aGUgZnVu
Y3Rpb24gKGFzIGVhcmx5IGFzIHBvc3NpYmxlKSB1c2luZyB0aGUgREVDTEFSRV9DQVRDSF9TQ09Q
RSBtYWNyby4KKy8vIERlY2xhcmluZyBhIENhdGNoU2NvcGUgaW4gYSBmdW5jdGlvbiBtZWFucyB0
aGF0IHRoZSBmdW5jdGlvbiBpbnRlbmRzIHRvIGNsZWFyCisvLyBwZW5kaW5nIGV4Y2VwdGlvbnMg
YmVmb3JlIHJldHVybmluZyB0byBpdHMgY2FsbGVyLgorICAgIAorY2xhc3MgQ2F0Y2hTY29wZSA6
IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CitwdWJsaWM6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q2F0Y2hTY29wZShWTSYsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOworICAgIENhdGNoU2NvcGUo
Y29uc3QgQ2F0Y2hTY29wZSYpID0gZGVsZXRlOworICAgIENhdGNoU2NvcGUoQ2F0Y2hTY29wZSYm
KSA9IGRlZmF1bHQ7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q2F0Y2hTY29wZSgpOworCisg
ICAgdm9pZCBjbGVhckV4Y2VwdGlvbigpIHsgbV92bS5jbGVhckV4Y2VwdGlvbigpOyB9Cit9Owor
CisjZGVmaW5lIERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm1fXykgXAorICAgIEpTQzo6Q2F0Y2hTY29w
ZSgodm1fXyksIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9fRklM
RV9fLCBfX0xJTkVfXykpCisKKyNlbHNlIC8vIG5vdCBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZF
UklGSUNBVElPTikKKworY2xhc3MgQ2F0Y2hTY29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7
CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSBDYXRjaFNjb3BlKFZNJiB2bSkKKyAgICAgICAg
OiBFeGNlcHRpb25TY29wZSh2bSkKKyAgICB7IH0KKyAgICBDYXRjaFNjb3BlKGNvbnN0IENhdGNo
U2NvcGUmKSA9IGRlbGV0ZTsKKyAgICBDYXRjaFNjb3BlKENhdGNoU2NvcGUmJikgPSBkZWZhdWx0
OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX3ZtLmNsZWFy
RXhjZXB0aW9uKCk7IH0KK307CisKKyNkZWZpbmUgREVDTEFSRV9DQVRDSF9TQ09QRSh2bV9fKSBc
CisgICAgSlNDOjpDYXRjaFNjb3BlKCh2bV9fKSkKKworI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJ
T05fU0NPUEVfVkVSSUZJQ0FUSU9OKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IENhdGNoU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIEJFR0lOX05PX1NFVF9QQygp
IFwKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgICAgIFwKLSAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYykKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7IFwKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsgXAorICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKQogCiAjaWZuZGVmIE5ERUJVRwog
I2RlZmluZSBTRVRfUENfRk9SX1NUVUJTKCkgZG8geyBcCkBAIC05OSwxMCArMTAxLDEwIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIENIRUNLX0VYQ0VQVElPTigpIGRvIHsgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgZG9FeGNlcHRpb25GdXp6aW5nSWZFbmFibGVkKGV4ZWMsICJD
b21tb25TbG93UGF0aHMiLCBwYyk7ICAgXAotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKSB7ICAgICAgICAgICBcCi0gICAgICAgICAgICBSRVRVUk5fVE9fVEhST1coZXhlYywg
cGMpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKSB7ICAgXAorICAgICAgICAgICAgUkVUVVJOX1RPX1RIUk9XKGV4ZWMsIHBjKTsg
ICAgICAgICAgICBcCiAgICAgICAgICAgICBFTkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgRU5EKCkgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgIFwKQEAgLTE0NCw3ICsxNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNk
ZWZpbmUgQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgcGMpIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgRXhlY1N0YXRlKiBjY2VFeGVjID0gKGV4ZWMpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGNjZVBDID0g
KHBjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFVO
TElLRUxZKHZtLmV4Y2VwdGlvbigpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIENBTExfRU5EX0lNUEwoY2NlRXhlYywgTExJbnQ6
OmNhbGxUb1Rocm93KGNjZUV4ZWMpKTsgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIApAQCAt
NDI3LDcgKzQyOSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tdWwpCiAgICAgSlNWYWx1
ZSBsZWZ0ID0gT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByaWdodCA9IE9QX0MoMyku
anNWYWx1ZSgpOwogICAgIGRvdWJsZSBhID0gbGVmdC50b051bWJlcihleGVjKTsKLSAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIgPSBy
aWdodC50b051bWJlcihleGVjKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGEgKiBi
KTsKQEAgLTQ0Miw3ICs0NDQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3ViKQogICAg
IEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmlnaHQgPSBP
UF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxlZnQudG9OdW1iZXIoZXhlYyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIGRvdWJs
ZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihhIC0gYik7CkBAIC00NTcsMTAgKzQ1OSwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
ZGl2KQogICAgIEpTVmFsdWUgbGVmdCA9IE9QX0MoMikuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUg
cmlnaHQgPSBPUF9DKDMpLmpzVmFsdWUoKTsKICAgICBkb3VibGUgYSA9IGxlZnQudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwog
ICAgIGRvdWJsZSBiID0gcmlnaHQudG9OdW1iZXIoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZt
LmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1i
ZXIoYSAvIGIpOwogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKQEAgLTQ3Miw3
ICs0NzQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbW9kKQogewogICAgIEJFR0lOKCk7
CiAgICAgZG91YmxlIGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKLSAgICBp
ZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgZG91YmxlIGIg
PSBPUF9DKDMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIo
anNNb2QoYSwgYikpKTsKQEAgLTQ4MiwxMCArNDg0LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9wb3cpCiB7CiAgICAgQkVHSU4oKTsKICAgICBkb3VibGUgYSA9IE9QX0MoMikuanNWYWx1
ZSgpLnRvTnVtYmVyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4o
SlNWYWx1ZSgpKTsKICAgICBkb3VibGUgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRvTnVtYmVyKGV4
ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAg
ICBSRVRVUk4oanNOdW1iZXIob3BlcmF0aW9uTWF0aFBvdyhhLCBiKSkpOwogfQpAQCAtNDk0LDcg
KzQ5Niw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sc2hpZnQpCiB7CiAgICAgQkVHSU4o
KTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICB1aW50MzJf
dCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVt
YmVyKGEgPDwgKGIgJiAzMSkpKTsKQEAgLTUwNCw3ICs1MDYsNyBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcnNoaWZ0KQogewogICAgIEJFR0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygy
KS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
UkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgdWludDMyX3QgYiA9IE9QX0MoMykuanNWYWx1ZSgpLnRv
VUludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhID4+IChiICYgMzEpKSk7CkBAIC01
MTQsNyArNTE2LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Vyc2hpZnQpCiB7CiAgICAg
QkVHSU4oKTsKICAgICB1aW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1ZhbHVlKCkpOwogICAg
IHVpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRV
Uk4oanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDMxKSkpKTsKQEAgLTUz
MSw3ICs1MzMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0YW5kKQogewogICAgIEJF
R0lOKCk7CiAgICAgaW50MzJfdCBhID0gT1BfQygyKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgaW50
MzJfdCBiID0gT1BfQygzKS5qc1ZhbHVlKCkudG9JbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNO
dW1iZXIoYSAmIGIpKTsKQEAgLTU0MSw3ICs1NDMsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfYml0b3IpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQzMl90IGEgPSBPUF9DKDIpLmpzVmFs
dWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4o
SlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBPUF9DKDMpLmpzVmFsdWUoKS50b0ludDMyKGV4
ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhIHwgYikpOwpAQCAtNTUxLDcgKzU1Myw3IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXR4b3IpCiB7CiAgICAgQkVHSU4oKTsKICAgICBpbnQz
Ml90IGEgPSBPUF9DKDIpLmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKICAgICBpbnQzMl90IGIgPSBPUF9DKDMp
LmpzVmFsdWUoKS50b0ludDMyKGV4ZWMpOwogICAgIFJFVFVSTihqc051bWJlcihhIF4gYikpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIGlubGluZSBi
b29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICAgICAgcmV0dXJuIGJhc2VPYmot
Pmhhc1Byb3BlcnR5KGV4ZWMsIGkpOwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHByb3BOYW1lLnRv
UHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChzY29w
ZS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBiYXNlT2Jq
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDcgQEAgdm9pZCBpbnRlcnByZXRlclRocm93SW5DYWxsZXIoRXhlY1N0YXRlKgogCiAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGVycm9yKTsKICNpZiBMTElOVF9TTE9XX1BBVEhfVFJB
Q0lORwotICAgIGRhdGFMb2coIlRocm93aW5nIGV4Y2VwdGlvbiAiLCB2bS0+ZXhjZXB0aW9uKCks
ICIuXG4iKTsKKyAgICBkYXRhTG9nKCJUaHJvd2luZyBleGNlcHRpb24gIiwgc2NvcGUuZXhjZXB0
aW9uKCksICIuXG4iKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDE2ICs4NywxOSBAQCBib29sIGNoZWNrTW9kdWxlU3ludGF4KEV4ZWNTdGF0ZSogZXhlYywgCiAK
IEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2Vw
dGlvbikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21p
Y1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVj
dG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
UkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCku
YXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9y
QnVzeSgpKTsKIAogICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwogCiAgICAgUHJv
Z3JhbUV4ZWN1dGFibGUqIHByb2dyYW0gPSBQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMs
IHNvdXJjZSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHByb2dyYW0pOwogICAg
IGlmICghcHJvZ3JhbSkgewotICAgICAgICByZXR1cm5lZEV4Y2VwdGlvbiA9IGV4ZWMtPnZtKCku
ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPnZtKCkuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQog
CkBAIC0xMDUsOSArMTA4LDkgQEAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IAogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVl
LnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2RlKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBleGVj
LT5pbnRlcnByZXRlcigpLT5leGVjdXRlKHByb2dyYW0sIGV4ZWMsIHRoaXNPYmopOwogCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
aWYgKHNjb3BlLmV4Y2VwdGlvbigpKSB7CisgICAgICAgIHJldHVybmVkRXhjZXB0aW9uID0gc2Nv
cGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIApAQCAtMTQ3LDkgKzE1MCwxMSBAQCBzdGF0
aWMgU3ltYm9sKiBjcmVhdGVTeW1ib2xGb3JFbnRyeVBvaW50CiAKIHN0YXRpYyBKU0ludGVybmFs
UHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCiB7Ci0gICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKLSAgICBK
U1ZhbHVlIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpOwotICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpLT52YWx1ZSgp
OworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZl
cnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywg
Z2xvYmFsT2JqZWN0KTsKICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CiAg
ICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CkBAIC0xNzYsMTcgKzE4MSwxOSBAQCBKU0lu
dGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlCiAKIEpTSW50ZXJuYWxQcm9taXNl
KiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIEpTVmFsdWUgaW5pdGlhdG9yKQogewotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuYXRvbWljU3RyaW5nVGFibGUoKSA9
PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWMtPnZtKCkuaXNDb2xsZWN0b3JCdXN5KCkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJs
ZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5KCkpOwogCi0gICAgU3ltYm9sKiBrZXkgPSBjcmVh
dGVTeW1ib2xGb3JFbnRyeVBvaW50TW9kdWxlKGV4ZWMtPnZtKCkpOworICAgIFN5bWJvbCoga2V5
ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1vZHVsZSh2bSk7CiAKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpOwogCiAgICAg
Ly8gSW5zZXJ0IHRoZSBnaXZlbiBzb3VyY2UgY29kZSB0byB0aGUgTW9kdWxlTG9hZGVyIHJlZ2lz
dHJ5IGFzIHRoZSBmZXRjaGVkIHJlZ2lzdHJ5IGVudHJ5LgogICAgIGdsb2JhbE9iamVjdC0+bW9k
dWxlTG9hZGVyKCktPnByb3ZpZGUoZXhlYywga2V5LCBKU01vZHVsZUxvYWRlcjo6U3RhdHVzOjpG
ZXRjaCwgc291cmNlLnZpZXcoKS50b1N0cmluZygpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIHJlamVjdFByb21pc2UoZXhlYywgZ2xvYmFsT2JqZWN0KTsKIAogICAgIHJldHVybiBsb2Fk
QW5kRXZhbHVhdGVNb2R1bGUobG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXksIGpzVW5kZWZp
bmVkKCksIGluaXRpYXRvcik7CkBAIC0yMTMsMTggKzIyMCwyMCBAQCBKU0ludGVybmFsUHJvbWlz
ZSogbG9hZE1vZHVsZShFeGVjU3RhdGUqCiAKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkTW9kdWxl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1ZhbHVlIGluaXRp
YXRvcikKIHsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChleGVjLT52bSgpLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21p
Y1N0cmluZ1RhYmxlKCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjLT52bSgpLmlzQ29sbGVj
dG9yQnVzeSgpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
UkVMRUFTRV9BU1NFUlQodm0uYXRvbWljU3RyaW5nVGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCku
YXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9y
QnVzeSgpKTsKIAotICAgIFN5bWJvbCoga2V5ID0gY3JlYXRlU3ltYm9sRm9yRW50cnlQb2ludE1v
ZHVsZShleGVjLT52bSgpKTsKKyAgICBTeW1ib2wqIGtleSA9IGNyZWF0ZVN5bWJvbEZvckVudHJ5
UG9pbnRNb2R1bGUodm0pOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4
ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKTsKIAogICAgIC8vIEluc2VydCB0aGUgZ2l2ZW4gc291
cmNlIGNvZGUgdG8gdGhlIE1vZHVsZUxvYWRlciByZWdpc3RyeSBhcyB0aGUgZmV0Y2hlZCByZWdp
c3RyeSBlbnRyeS4KICAgICAvLyBGSVhNRTogSW50cm9kdWNlIEpTU291cmNlQ29kZSBvYmplY3Qg
dG8gd3JhcCBhcm91bmQgdGhpcyBzb3VyY2UuCiAgICAgZ2xvYmFsT2JqZWN0LT5tb2R1bGVMb2Fk
ZXIoKS0+cHJvdmlkZShleGVjLCBrZXksIEpTTW9kdWxlTG9hZGVyOjpTdGF0dXM6OkZldGNoLCBz
b3VyY2UudmlldygpLnRvU3RyaW5nKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gcmVq
ZWN0UHJvbWlzZShleGVjLCBnbG9iYWxPYmplY3QpOwogCiAgICAgcmV0dXJuIGxvYWRNb2R1bGUo
bG9jaywgZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXksIGpzVW5kZWZpbmVkKCksIGluaXRpYXRvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlT2JqZWN0
LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc29sZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMiArMTk2LDE0IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY0Fzc2VydChFeGVjU3RhdGUqIGV4
ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBib29s
IGNvbmRpdGlvbiA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IGlmIChjb25kaXRpb24pCkBAIC0yMjUsNiArMjI3LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29ucwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBjb25zb2xlUHJvdG9GdW5jUHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC0yMzYsNyArMjQwLDcgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIH0KIAogICAgIGNvbnN0IFN0cmlu
ZyYgdGl0bGUodmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVj
LT5hcmd1bWVudCgwKSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY2xpZW50LT5wcm9maWxlKGV4ZWMsIHRpdGxlKTsK
QEAgLTI0NSw2ICsyNDksOCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnNvbGVQcm90b0Z1
bmNQcm9maWxlRW5kKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBDb25zb2xl
Q2xpZW50KiBjbGllbnQgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmNvbnNvbGVDbGll
bnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTI1Niw3ICsyNjIsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgfQogCiAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSh2YWx1
ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICBjbGllbnQtPnByb2ZpbGVFbmQoZXhlYywgdGl0bGUpOwpAQCAtMjY1LDYg
KzI3MSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1Rha2VIZWFw
U25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGll
bnQqIGNsaWVudCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgp
OwogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMjc2LDcgKzI4NCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNvbnMKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKHZhbHVlVG9T
dHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIGNsaWVudC0+dGFrZUhlYXBTbmFwc2hvdChleGVjLCB0aXRsZSk7CkBAIC0yOTIs
NiArMzAwLDggQEAgc3RhdGljIFN0cmluZyB2YWx1ZU9yRGVmYXVsdExhYmVsU3RyaW5nKAogCiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zb2xlUHJvdG9GdW5jVGltZShF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc29sZUNsaWVudCogY2xpZW50
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5jb25zb2xlQ2xpZW50KCk7CiAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC0zMDEsNyArMzExLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICB0aXRsZSA9IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdCIpOwogICAgIGVsc2Ug
ewogICAgICAgICB0aXRsZSA9IHZhbHVlT3JEZWZhdWx0TGFiZWxTdHJpbmcoZXhlYywgZXhlYy0+
YXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMzExLDYgKzMyMSw4IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc29sZVByb3RvRnVuY1RpbWVFbmQoRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIENvbnNvbGVDbGllbnQqIGNsaWVudCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Y29uc29sZUNsaWVudCgpOwogICAgIGlmICghY2xpZW50
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMzIw
LDcgKzMzMiw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAg
ICAgICAgdGl0bGUgPSAgQVNDSUlMaXRlcmFsKCJkZWZhdWx0Iik7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHRpdGxlID0gdmFsdWVPckRlZmF1bHRMYWJlbFN0cmluZyhleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQCBzdGF0aWMgZG91YmxlIG1pbGxpc2Vjb25k
c0Zyb21Db21wb25lbnRzCiBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludCBudW1BcmdzID0gYXJncy5zaXpl
KCk7CiAKICAgICBkb3VibGUgdmFsdWU7CkBAIC0xNjcsNyArMTY4LDcgQEAgSlNPYmplY3QqIGNv
bnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB2YWx1ZSA9IG1pbGxpc2Vjb25k
c0Zyb21Db21wb25lbnRzKGV4ZWMsIGFyZ3MsIFdURjo6TG9jYWxUaW1lKTsKIAogICAgIFN0cnVj
dHVyZSogZGF0ZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3Ry
dWN0dXJlKGV4ZWMsIG5ld1RhcmdldCwgZ2xvYmFsT2JqZWN0LT5kYXRlU3RydWN0dXJlKCkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBEYXRlSW5z
dGFuY2U6OmNyZWF0ZSh2bSwgZGF0ZVN0cnVjdHVyZSwgdmFsdWUpOwpAQCAtMjAyLDEwICsyMDMs
MTIgQEAgQ2FsbFR5cGUgRGF0ZUNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKUwogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQYXJzZShFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAgICAgU3RyaW5nIGRhdGVTdHIgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihwYXJzZURhdGUoZXhlYy0+dm0oKSwgZGF0ZVN0cikpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKHBhcnNlRGF0ZSh2bSwgZGF0ZVN0cikpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlTm93KEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAzLDcgKzYwMyw4IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBk
YXRlUHJvdG9GdW5jVG9QcmltaXRpdmVTeW1ib2woRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGV4ZWMtPnZtKCkpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywg
c2NvcGUsICJEYXRlLnByb3RvdHlwZVtTeW1ib2wudG9QcmltaXRpdmVdIGV4cGVjdGVkIHx0aGlz
fCB0byBiZSBhbiBvYmplY3QuIik7CkBAIC02MTQsNyArNjE1LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogCiAgICAgSlNWYWx1ZSBoaW50VmFsdWUgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHR5cGUg
PSB0b1ByZWZlcnJlZFByaW1pdGl2ZVR5cGUoZXhlYywgaGludFZhbHVlKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogCiAgICAgaWYgKHR5
cGUgPT0gTm9QcmVmZXJlbmNlKQpAQCAtMTEyMywyMCArMTEyNCwyMSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZGF0ZVByb3RvRnVuY1RvSlNPTihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoZXhlYy0+dm0oKSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhleGVjLCBOb3RTdHJpY3RNb2Rl
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkp
OwogCiAgICAgSlNWYWx1ZSB0aW1lVmFsdWUgPSBvYmplY3QtPnRvUHJpbWl0aXZlKGV4ZWMsIFBy
ZWZlck51bWJlcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOwogICAgIGlmICh0aW1lVmFsdWUuaXNOdW1iZXIoKSAmJiAhKHRpbWVWYWx1ZS5p
c0ludDMyKCkgfHwgc3RkOjppc2Zpbml0ZSh0aW1lVmFsdWUuYXNEb3VibGUoKSkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKIAotICAgIEpTVmFsdWUgdG9JU09W
YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dG9JU09T
dHJpbmcpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBKU1ZhbHVlIHRvSVNP
VmFsdWUgPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0lTT1N0cmluZyk7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTEx
NDUsNyArMTE0Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgidG9JU09TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKSk7CiAKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGNhbGwoZXhlYywgYXNPYmplY3QodG9JU09WYWx1ZSksIGNhbGxUeXBlLCBjYWxsRGF0YSwg
b2JqZWN0LCBleGVjLT5lbXB0eUxpc3QoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGlmIChyZXN1bHQuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
dG9JU09TdHJpbmcgZGlkIG5vdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUiKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNw
cAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJy
b3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDExIEBAIHZvaWQg
RXJyb3JDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRpb24oVk0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDApIDoganNVbmRlZmluZWQoKTsKICAg
ICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3Vi
Y2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVyZSgpKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9y
U3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRyLCBUeXBlTm90aGluZywgZmFsc2UpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
CShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
ckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw3IEBAIHZvaWQgRXJy
b3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1MKIFN0cmluZyBFcnJvckluc3RhbmNlOjpz
YW5pdGl6ZWRUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIG5hbWVWYWx1ZTsKICAgICBhdXRvIG5hbWVQcm9wZXJ0TmFtZSA9IHZtLnByb3BlcnR5
TmFtZXMtPm5hbWU7CkBAIC0xNzcsMTQgKzE3OCwxNCBAQCBTdHJpbmcgRXJyb3JJbnN0YW5jZTo6
c2FuaXRpemVkVG9TdHJpbmcoCiAgICAgICAgIH0KICAgICAgICAgY3VycmVudE9iaiA9IG9iai0+
Z2V0UHJvdG90eXBlRGlyZWN0KCk7CiAgICAgfQotICAgIEFTU0VSVCghdm0uZXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgU3RyaW5nIG5hbWVTdHJp
bmc7CiAgICAgaWYgKCFuYW1lVmFsdWUpCiAgICAgICAgIG5hbWVTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIkVycm9yIik7CiAgICAgZWxzZSB7CiAgICAgICAgIG5hbWVTdHJpbmcgPSBuYW1lVmFsdWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xOTMsMTQgKzE5NCwxNCBAQCBTdHJpbmcgRXJy
b3JJbnN0YW5jZTo6c2FuaXRpemVkVG9TdHJpbmcoCiAgICAgUHJvcGVydHlTbG90IG1lc3NhZ2VT
bG90KHRoaXMsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpOwog
ICAgIGlmIChKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXMsIGV4ZWMsIG1lc3NhZ2VQ
cm9wZXJ0TmFtZSwgbWVzc2FnZVNsb3QpICYmIG1lc3NhZ2VTbG90LmlzVmFsdWUoKSkKICAgICAg
ICAgbWVzc2FnZVZhbHVlID0gbWVzc2FnZVNsb3QuZ2V0VmFsdWUoZXhlYywgbWVzc2FnZVByb3Bl
cnROYW1lKTsKLSAgICBBU1NFUlQoIXZtLmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKIAogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nOwogICAgIGlmICghbWVz
c2FnZVZhbHVlKQogICAgICAgICBtZXNzYWdlU3RyaW5nID0gU3RyaW5nKCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBlcnJvclByb3RvRgogCiAgICAgLy8gMy4g
TGV0IG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1l
dGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm5hbWUiLgogICAgIEpTVmFsdWUgbmFtZSA9IHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA0
LiBJZiBuYW1lIGlzIHVuZGVmaW5lZCwgdGhlbiBsZXQgbmFtZSBiZSAiRXJyb3IiOyBlbHNlIGxl
dCBuYW1lIGJlIFRvU3RyaW5nKG5hbWUpLgpAQCAtOTQsMTMgKzk0LDEzIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAgICAgbmFtZVN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiRXJyb3IiKTsKICAgICBlbHNlIHsKICAgICAgICAgbmFtZVN0cmluZyA9IG5hbWUu
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAg
IC8vIDUuIExldCBtc2cgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVy
bmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgIm1lc3NhZ2UiLgogICAgIEpTVmFsdWUgbWVz
c2FnZSA9IHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAKICAgICAvLyAoc2ljKQpAQCAtMTExLDcgKzExMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZXJyb3JQcm90b0YKICAgICAgICAgbWVzc2FnZVN0cmluZyA9IFN0cmluZygp
OwogICAgIGVsc2UgewogICAgICAgICBtZXNzYWdlU3RyaW5nID0gbWVzc2FnZS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0
aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25FdmVudExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaCIKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKyAgICAKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkV4Y2VwdGlvbkV2ZW50TG9jYXRpb24g
bG9jYXRpb24pCit7CisgICAgb3V0LnByaW50KGxvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIs
IGxvY2F0aW9uLmZpbGUsICI6IiwgbG9jYXRpb24ubGluZSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVu
dExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDU1NjYpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGVMb2NhdGlvbi5oOjIwNTU2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkV2ZW50TG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1
Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKKyAgICBUaHJvd1Njb3BlTG9jYXRpb24oKSB7IH0KKyAg
ICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFy
KiBmaWxlLCB1bnNpZ25lZCBsaW5lKQorICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlvbk5h
bWUpCisgICAgICAgICwgZmlsZShmaWxlKQorICAgICAgICAsIGxpbmUobGluZSkKKyAgICB7IH0K
KyAgICAKKyAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07CisgICAgY29u
c3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBsaW5lIHsgMCB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25FdmVudExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDU1NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25FdmVudExvY2F0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXN0cnVjdCBUaHJvd1Njb3BlTG9jYXRpb24gewotICAgIFRocm93U2NvcGVMb2NhdGlvbigpIHsg
fQotICAgIFRocm93U2NvcGVMb2NhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGZpbGUsIHVuc2lnbmVkIGxpbmUpCitzdHJ1Y3QgRXhjZXB0aW9uRXZlbnRMb2NhdGlv
biB7CisgICAgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbigpIHsgfQorICAgIEV4Y2VwdGlvbkV2ZW50
TG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBmaWxlLCB1bnNp
Z25lZCBsaW5lKQogICAgICAgICA6IGZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCiAgICAgICAg
ICwgZmlsZShmaWxlKQogICAgICAgICAsIGxpbmUobGluZSkKQEAgLTQxLDMgKzQxLDExIEBAIHN0
cnVjdCBUaHJvd1Njb3BlTG9jYXRpb24gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKK25h
bWVzcGFjZSBXVEYgeworICAgIAorY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6RXhjZXB0aW9uRXZlbnRMb2NhdGlvbik7CisgICAgCit9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmbmRlZiBFeGNlcHRpb25IZWxwZXJzX2gKICNkZWZpbmUgRXhjZXB0
aW9uSGVscGVyc19oCiAKKyNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiRXJyb3JJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGhyb3dTY29wZS5o
IgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uU2NvcGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvblNj
b3BlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGNlcHRpb25TY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeworICAgIAorI2lmIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVS
SUZJQ0FUSU9OKQorICAgIAorRXhjZXB0aW9uU2NvcGU6OkV4Y2VwdGlvblNjb3BlKFZNJiB2bSwg
RXhjZXB0aW9uRXZlbnRMb2NhdGlvbiBsb2NhdGlvbikKKyAgICA6IG1fdm0odm0pCisgICAgLCBt
X3ByZXZpb3VzU2NvcGUodm0ubV90b3BFeGNlcHRpb25TY29wZSkKKyAgICAsIG1fbG9jYXRpb24o
bG9jYXRpb24pCisgICAgLCBtX3JlY3Vyc2lvbkRlcHRoKG1fcHJldmlvdXNTY29wZSA/IG1fcHJl
dmlvdXNTY29wZS0+bV9yZWN1cnNpb25EZXB0aCArIDEgOiAwKQoreworICAgIG1fdm0ubV90b3BF
eGNlcHRpb25TY29wZSA9IHRoaXM7Cit9CisKK0V4Y2VwdGlvblNjb3BlOjp+RXhjZXB0aW9uU2Nv
cGUoKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7Cisg
ICAgbV92bS5tX3RvcEV4Y2VwdGlvblNjb3BlID0gbV9wcmV2aW91c1Njb3BlOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
blNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25TY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4Y2Vw
dGlvblNjb3BlX2gKKyNkZWZpbmUgRXhjZXB0aW9uU2NvcGVfaAorCisjaW5jbHVkZSAiVk0uaCIK
KworbmFtZXNwYWNlIEpTQyB7CisgICAgCitjbGFzcyBFeGNlcHRpb247CisgICAgCisjaWYgRU5B
QkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCisgICAgCitjbGFzcyBFeGNlcHRpb25T
Y29wZSB7CitwdWJsaWM6CisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQorICAg
IHVuc2lnbmVkIHJlY3Vyc2lvbkRlcHRoKCkgY29uc3QgeyByZXR1cm4gbV9yZWN1cnNpb25EZXB0
aDsgfQorICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgeyByZXR1cm4gbV92bS5leGNlcHRpb24o
KTsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIEV4Y2VwdGlvblNjb3BlKFZNJiwgRXhjZXB0aW9u
RXZlbnRMb2NhdGlvbik7CisgICAgRXhjZXB0aW9uU2NvcGUoY29uc3QgRXhjZXB0aW9uU2NvcGUm
KSA9IGRlbGV0ZTsKKyAgICBFeGNlcHRpb25TY29wZShFeGNlcHRpb25TY29wZSYmKSA9IGRlZmF1
bHQ7CisgICAgfkV4Y2VwdGlvblNjb3BlKCk7CisKKyAgICBWTSYgbV92bTsKKyAgICBFeGNlcHRp
b25TY29wZSogbV9wcmV2aW91c1Njb3BlOworICAgIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24gbV9s
b2NhdGlvbjsKKyAgICB1bnNpZ25lZCBtX3JlY3Vyc2lvbkRlcHRoOworfTsKKyAgICAKKyNlbHNl
IC8vIG5vdCBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAKK2NsYXNz
IEV4Y2VwdGlvblNjb3BlIHsKK3B1YmxpYzoKKyAgICBBTFdBWVNfSU5MSU5FIFZNJiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KKyAgICBBTFdBWVNfSU5MSU5FIEV4Y2VwdGlvbiogZXhjZXB0
aW9uKCkgeyByZXR1cm4gbV92bS5leGNlcHRpb24oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQUxX
QVlTX0lOTElORSBFeGNlcHRpb25TY29wZShWTSYgdm0pCisgICAgICAgIDogbV92bSh2bSkKKyAg
ICB7IH0KKyAgICBFeGNlcHRpb25TY29wZShjb25zdCBFeGNlcHRpb25TY29wZSYpID0gZGVsZXRl
OworICAgIEV4Y2VwdGlvblNjb3BlKEV4Y2VwdGlvblNjb3BlJiYpID0gZGVmYXVsdDsKKworICAg
IFZNJiBtX3ZtOworfTsKKyAgICAKKyNlbmRpZiAvLyBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZF
UklGSUNBVElPTikKKyAgICAKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhjZXB0
aW9uU2NvcGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25D
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdEZ1bmN0aW9uU2tpcHBp
bmdFdmFsRQogICAgIH0KIAogICAgIFN0cnVjdHVyZSogc3ViY2xhc3NTdHJ1Y3R1cmUgPSBJbnRl
cm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGds
b2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZnVuY3Rp
b24sIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgc3ViY2xhc3NTdHJ1Y3R1cmUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgIC8vIEVsc2Ug
c2V0IHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gMC4KICAgICB1bnNpZ25lZCBsZW5n
dGggPSAwOwogICAgIGlmICh0YXJnZXRPYmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpKSB7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgLy8g
YS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJnZXQgbWludXMgdGhlIGxlbmd0
aCBvZiBBLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTksMTMgKzIxOSwxNiBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmRlZmluZU93blByCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogdm9pZCBHZW5lcmljQXJndW1l
bnRzPFR5cGU+Ojpjb3B5VG9Bcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjLCBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8VHlwZSo+
KHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpKQog
ICAgICAgICAgICAgZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSB0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaSArIG9mZnNldCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ZXhlYy0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoZXhlYywgaSArIG9mZnNldCk7Ci0g
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkpCisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0dldHRlclNldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMTUgKzczLDE3IEBAIEdldHRlclNldHRlciogR2V0dGVyU2V0dGVyOjp3aXRoU2V0dGVyKFYK
IAogSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlLCBKU1Zh
bHVlIGdldHRlclNldHRlcikKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyBGSVhNRTogU29tZSBjYWxs
ZXJzIG1heSBpbnZva2UgZ2V0KCkgd2l0aG91dCBjaGVja2luZyBmb3IgYW4gZXhjZXB0aW9uIGZp
cnN0LgogICAgIC8vIFdlIHdvcmsgYXJvdW5kIHRoYXQgYnkgY2hlY2tpbmcgaGVyZS4KLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24o
KS0+dmFsdWUoKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CiAKICAgICBKU09iamVjdCogZ2V0
dGVyID0ganNDYXN0PEdldHRlclNldHRlcio+KGdldHRlclNldHRlciktPmdldHRlcigpOwogCiAg
ICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXItPm1l
dGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRDYWxsRGF0YShnZXR0ZXIsIGNhbGxEYXRhKTsKKyAg
ICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0
YShnZXR0ZXIsIGNhbGxEYXRhKTsKICAgICByZXR1cm4gY2FsbChleGVjLCBnZXR0ZXIsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgYmFzZSwgQXJnTGlzdCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb25PYmplY3QuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw5ICs4MywxMSBAQCB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9i
amVjdDo6ZGlzCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgaW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0TG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIHRhcmdldCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cmluZyB2YWx1ZSA9IHRh
cmdldC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgZGF0YUxvZyh2YWx1ZSwg
IlxuIik7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBTdHJ1
Y3R1cmUqIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsCiB7CiAKICAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICAvLyBXZSBhbGxvdyBuZXdUYXJnZXQgPT0gSlNWYWx1ZSgpIGJlY2F1c2UgdGhlIEFQSSBuZWVk
cyB0byBiZSBhYmxlIHRvIGNyZWF0ZSBjbGFzc2VzIHdpdGhvdXQgaGF2aW5nIGEgcmVhbCBKUyBm
cmFtZS4KICAgICAvLyBTaW5jZSB3ZSBkb24ndCBhbGxvdyBzdWJjbGFzc2luZyBpbiB0aGUgQVBJ
IHdlIGp1c3QgdHJlYXQgbmV3VGFyZ2V0ID09IEpTVmFsdWUoKSBhcyBuZXdUYXJnZXQgPT0gZXhl
Yy0+Y2FsbGVlKCkKICAgICBBU1NFUlQoIW5ld1RhcmdldCB8fCBuZXdUYXJnZXQuaXNDb25zdHJ1
Y3RvcigpKTsKQEAgLTExMiwxMyArMTEzLDEzIEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2wKIAogICAgICAgICAgICAgLy8gTm90ZSwgUmVmbGVjdC5jb25zdHJ1Y3Qg
bWlnaHQgY2F1c2UgdGhlIHByb2ZpbGUgdG8gY2h1cm4gYnV0IHdlIGRvbid0IGNhcmUuCiAgICAg
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gbmV3VGFyZ2V0LmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKEpT
T2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFs
dWUpKQogICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRGdW5jdGlvbi0+cmFyZURhdGEodm0p
LT5jcmVhdGVJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblN0cnVjdHVyZUZyb21CYXNlKHZtLCBw
cm90b3R5cGUsIGJhc2VDbGFzcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1Zh
bHVlIHByb3RvdHlwZVZhbHVlID0gbmV3VGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkucHJvdG90eXBlKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4ocHJvdG90eXBlVmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgc29tZW9uZSBSZWZsZWN0LmNvbnN0
cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIGJ1aWx0aW4gY29uc3Ry
dWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsQ29sbGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw2ICsxNjIsOSBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gc2VhcmNoTG9jYWxlRGF0YShj
CiAKIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSBsb2NhbGVzLCBKU1ZhbHVlIG9wdGlvbnNWYWx1ZSkKIHsKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KwogICAgIC8vIDEwLjEuMSBJbml0aWFsaXplQ29sbGF0b3IgKGNvbGxhdG9yLCBsb2NhbGVzLCBv
cHRpb25zKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIElmIGNvbGxhdG9yIGhhcyBhbiBbW2lu
aXRpYWxpemVkSW50bE9iamVjdF1dIGludGVybmFsIHNsb3Qgd2l0aCB2YWx1ZSB0cnVlLCB0aHJv
dyBhIFR5cGVFcnJvciBleGNlcHRpb24uCiAgICAgLy8gMi4gU2V0IGNvbGxhdG9yLltbaW5pdGlh
bGl6ZWRJbnRsT2JqZWN0XV0gdG8gdHJ1ZS4KQEAgLTE2OSw3ICsxNzIsNyBAQCB2b2lkIEludGxD
b2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAgICAgLy8gMy4gTGV0IHJlcXVlc3RlZExv
Y2FsZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBhdXRvIHJlcXVl
c3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KHN0YXRlLCBsb2NhbGVzKTsKICAg
ICAvLyA0LiBSZXR1cm5JZkFicnVwdChyZXF1ZXN0ZWRMb2NhbGVzKS4KLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gNS4gSWYgb3B0aW9ucyBpcyB1bmRlZmluZWQsIHRoZW4K
QEAgLTE4MSwxNCArMTg0LDE0IEBAIHZvaWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0
b3IoRXgKICAgICAgICAgLy8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAg
ICAgICAgIG9wdGlvbnMgPSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAg
Ly8gYi4gUmV0dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyA3LiBMZXQgdSBiZSBHZXRPcHRpb24ob3B0
aW9ucywgInVzYWdlIiwgInN0cmluZyIsIMKrInNvcnQiLCAic2VhcmNoIsK7LCAic29ydCIpLgot
ICAgIFN0cmluZyB1c2FnZVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMs
IHN0YXRlLnZtKCkucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAi
dXNhZ2UgbXVzdCBiZSBlaXRoZXIgXCJzb3J0XCIgb3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7Cisg
ICAgU3RyaW5nIHVzYWdlU3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywg
dm0ucHJvcGVydHlOYW1lcy0+dXNhZ2UsIHsgInNvcnQiLCAic2VhcmNoIiB9LCAidXNhZ2UgbXVz
dCBiZSBlaXRoZXIgXCJzb3J0XCIgb3IgXCJzZWFyY2hcIiIsICJzb3J0Iik7CiAgICAgLy8gOC4g
UmV0dXJuSWZBYnJ1cHQodSkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyA5
LiBTZXQgY29sbGF0b3IuW1t1c2FnZV1dIHRvIHUuCiAgICAgaWYgKHVzYWdlU3RyaW5nID09ICJz
b3J0IikKQEAgLTIxMiw5ICsyMTUsOSBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNv
bGxhdG9yKEV4CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gb3B0OwogCiAgICAgLy8gMTMu
IExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJp
bmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgotICAgIFN0cmluZyBt
YXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywgc3RhdGUudm0oKS5wcm9w
ZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2Nh
bGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJl
c3QgZml0Iik7CisgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVz
dCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJi
ZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gMTQuIFJldHVybklmQWJydXB0KG1hdGNo
ZXIpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gMTUuIFNldCBvcHQuW1ts
b2NhbGVNYXRjaGVyXV0gdG8gbWF0Y2hlci4KICAgICBvcHQuYWRkKEFTQ0lJTGl0ZXJhbCgibG9j
YWxlTWF0Y2hlciIpLCBtYXRjaGVyKTsKQEAgLTIzMywxNiArMjM2LDE2IEBAIHZvaWQgSW50bENv
bGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICB7CiAgICAgICAgIFN0cmluZyBudW1l
cmljU3RyaW5nOwogICAgICAgICBib29sIHVzZXNGYWxsYmFjazsKLSAgICAgICAgYm9vbCBudW1l
cmljID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJvcGVy
dHlOYW1lcy0+bnVtZXJpYywgdXNlc0ZhbGxiYWNrKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBib29sIG51bWVyaWMgPSBpbnRsQm9vbGVhbk9wdGlvbihzdGF0
ZSwgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bnVtZXJpYywgdXNlc0ZhbGxiYWNrKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKCF1c2VzRmFsbGJhY2spCiAgICAgICAgICAgICBudW1lcmljU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKG51bWVyaWMgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKICAgICAgICAgb3B0
LmFkZChBU0NJSUxpdGVyYWwoImtuIiksIG51bWVyaWNTdHJpbmcpOwogICAgIH0KICAgICB7Ci0g
ICAgICAgIFN0cmluZyBjYXNlRmlyc3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25z
LCBzdGF0ZS52bSgpLnByb3BlcnR5TmFtZXMtPmNhc2VGaXJzdCwgeyAidXBwZXIiLCAibG93ZXIi
LCAiZmFsc2UiIH0sICJjYXNlRmlyc3QgbXVzdCBiZSBlaXRoZXIgXCJ1cHBlclwiLCBcImxvd2Vy
XCIsIG9yIFwiZmFsc2VcIiIsIG51bGxwdHIpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIFN0cmluZyBjYXNlRmlyc3QgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRl
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYXNlRmlyc3QsIHsgInVwcGVyIiwgImxvd2Vy
IiwgImZhbHNlIiB9LCAiY2FzZUZpcnN0IG11c3QgYmUgZWl0aGVyIFwidXBwZXJcIiwgXCJsb3dl
clwiLCBvciBcImZhbHNlXCIiLCBudWxscHRyKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgb3B0LmFkZChBU0NJ
SUxpdGVyYWwoImtmIiksIGNhc2VGaXJzdCk7CiAgICAgfQpAQCAtMjc3LDkgKzI4MCw5IEBAIHZv
aWQgSW50bENvbGxhdG9yOjppbml0aWFsaXplQ29sbGF0b3IoRXgKICAgICBtX251bWVyaWMgPSAo
cmVzdWx0LmdldChBU0NJSUxpdGVyYWwoImtuIikpID09ICJ0cnVlIik7CiAKICAgICAvLyAyNC4g
TGV0IHMgYmUgR2V0T3B0aW9uKG9wdGlvbnMsICJzZW5zaXRpdml0eSIsICJzdHJpbmciLCDCqyJi
YXNlIiwgImFjY2VudCIsICJjYXNlIiwgInZhcmlhbnQiwrssIHVuZGVmaW5lZCkuCi0gICAgU3Ry
aW5nIHNlbnNpdGl2aXR5U3RyaW5nID0gaW50bFN0cmluZ09wdGlvbihzdGF0ZSwgb3B0aW9ucywg
c3RhdGUudm0oKS5wcm9wZXJ0eU5hbWVzLT5zZW5zaXRpdml0eSwgeyAiYmFzZSIsICJhY2NlbnQi
LCAiY2FzZSIsICJ2YXJpYW50IiB9LCAic2Vuc2l0aXZpdHkgbXVzdCBiZSBlaXRoZXIgXCJiYXNl
XCIsIFwiYWNjZW50XCIsIFwiY2FzZVwiLCBvciBcInZhcmlhbnRcIiIsIG51bGxwdHIpOworICAg
IFN0cmluZyBzZW5zaXRpdml0eVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPnNlbnNpdGl2aXR5LCB7ICJiYXNlIiwgImFjY2VudCIsICJj
YXNlIiwgInZhcmlhbnQiIH0sICJzZW5zaXRpdml0eSBtdXN0IGJlIGVpdGhlciBcImJhc2VcIiwg
XCJhY2NlbnRcIiwgXCJjYXNlXCIsIG9yIFwidmFyaWFudFwiIiwgbnVsbHB0cik7CiAgICAgLy8g
MjUuIFJldHVybklmQWJydXB0KHMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
Ly8gMjYuIElmIHMgaXMgdW5kZWZpbmVkLCB0aGVuCiAgICAgLy8gYS4gSWYgdSBpcyAic29ydCIs
IHRoZW4gbGV0IHMgYmUgInZhcmlhbnQiLgpAQCAtMzAwLDExICszMDMsMTEgQEAgdm9pZCBJbnRs
Q29sbGF0b3I6OmluaXRpYWxpemVDb2xsYXRvcihFeAogCiAgICAgLy8gMjguIExldCBpcCBiZSBH
ZXRPcHRpb24ob3B0aW9ucywgImlnbm9yZVB1bmN0dWF0aW9uIiwgImJvb2xlYW4iLCB1bmRlZmlu
ZWQsIGZhbHNlKS4KICAgICBib29sIHVzZXNGYWxsYmFjazsKLSAgICBib29sIGlnbm9yZVB1bmN0
dWF0aW9uID0gaW50bEJvb2xlYW5PcHRpb24oc3RhdGUsIG9wdGlvbnMsIHN0YXRlLnZtKCkucHJv
cGVydHlOYW1lcy0+aWdub3JlUHVuY3R1YXRpb24sIHVzZXNGYWxsYmFjayk7CisgICAgYm9vbCBp
Z25vcmVQdW5jdHVhdGlvbiA9IGludGxCb29sZWFuT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pZ25vcmVQdW5jdHVhdGlvbiwgdXNlc0ZhbGxiYWNrKTsKICAgICBpZiAo
dXNlc0ZhbGxiYWNrKQogICAgICAgICBpZ25vcmVQdW5jdHVhdGlvbiA9IGZhbHNlOwogICAgIC8v
IDI5LiBSZXR1cm5JZkFicnVwdChpcCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAvLyAzMC4gU2V0IGNvbGxhdG9yLltbaWdub3JlUHVuY3R1YXRpb25dXSB0byBpcC4KICAgICBt
X2lnbm9yZVB1bmN0dWF0aW9uID0gaWdub3JlUHVuY3R1YXRpb247CkBAIC0zMTgsMTEgKzMyMSwx
MyBAQCB2b2lkIEludGxDb2xsYXRvcjo6aW5pdGlhbGl6ZUNvbGxhdG9yKEV4CiAKIHZvaWQgSW50
bENvbGxhdG9yOjpjcmVhdGVDb2xsYXRvcihFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIEFTU0VSVCghbV9jb2xsYXRvcik7CiAKICAgICBpZiAoIW1faW5pdGlhbGl6ZWRDb2xs
YXRvcikgewogICAgICAgICBpbml0aWFsaXplQ29sbGF0b3Ioc3RhdGUsIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2VwdGlvbigpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9
CiAKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKQEAgLTQxNiw2ICs0MjEs
OSBAQCBjb25zdCBjaGFyKiBJbnRsQ29sbGF0b3I6OnNlbnNpdGl2aXR5U3RyCiAKIEpTT2JqZWN0
KiBJbnRsQ29sbGF0b3I6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3RhdGUmIHN0YXRlKQogeworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgLy8gMTAuMy41IEludGwuQ29sbGF0b3IucHJvdG90eXBlLnJlc29sdmVk
T3B0aW9ucygpIChFQ01BLTQwMiAyLjApCiAgICAgLy8gVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBu
ZXcgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgYW5kIGF0dHJpYnV0ZXMgYXJlIHNldCBhcyBpZgog
ICAgIC8vIGNvbnN0cnVjdGVkIGJ5IGFuIG9iamVjdCBsaXRlcmFsIGFzc2lnbmluZyB0byBlYWNo
IG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB0aGUKQEAgLTQyNywxMCArNDM1LDkgQEAgSlNP
YmplY3QqIEludGxDb2xsYXRvcjo6cmVzb2x2ZWRPcHRpb25zKAogCiAgICAgaWYgKCFtX2luaXRp
YWxpemVkQ29sbGF0b3IpIHsKICAgICAgICAgaW5pdGlhbGl6ZUNvbGxhdG9yKHN0YXRlLCBqc1Vu
ZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgQVNTRVJUKCFzdGF0ZS5oYWRFeGNl
cHRpb24oKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CiAgICAgfQogCi0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBKU09iamVjdCogb3B0
aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CiAgICAgb3B0aW9ucy0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGUsIGpzU3RyaW5nKCZzdGF0ZSwgbV9sb2Nh
bGUpKTsKICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVzYWdl
LCBqc05vbnRyaXZpYWxTdHJpbmcoJnN0YXRlLCBBU0NJSUxpdGVyYWwodXNhZ2VTdHJpbmcobV91
c2FnZSkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0
b3JDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bENvbGxhdG9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzLDE0ICs4MywxNiBAQCB2b2lkIEludGxDb2xsYXRvckNvbnN0
cnVjdG9yOjpmaW5pc2hDcmVhCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEludGxDb2xsYXRvcihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICAvLyAxMC4xLjIgSW50bC5Db2xsYXRvciAoW2xvY2FsZXMgWywgb3B0aW9uc11dKSAoRUNN
QS00MDIgMi4wKQogICAgIC8vIDEuIElmIE5ld1RhcmdldCBpcyB1bmRlZmluZWQsIGxldCBuZXdU
YXJnZXQgYmUgdGhlIGFjdGl2ZSBmdW5jdGlvbiBvYmplY3QsIGVsc2UgbGV0IG5ld1RhcmdldCBi
ZSBOZXdUYXJnZXQuCiAgICAgLy8gMi4gTGV0IGNvbGxhdG9yIGJlIE9yZGluYXJ5Q3JlYXRlRnJv
bUNvbnN0cnVjdG9yKG5ld1RhcmdldCwgJUNvbGxhdG9yUHJvdG90eXBlJSkuCiAgICAgLy8gMy4g
UmV0dXJuSWZBYnJ1cHQoY29sbGF0b3IpLgogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoc3RhdGUsIHN0YXRlLT5uZXdU
YXJnZXQoKSwganNDYXN0PEludGxDb2xsYXRvckNvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgp
KS0+Y29sbGF0b3JTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEludGxDb2xsYXRvciogY29sbGF0b3Ig
PSBJbnRsQ29sbGF0b3I6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICBJbnRs
Q29sbGF0b3IqIGNvbGxhdG9yID0gSW50bENvbGxhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CiAgICAgQVNTRVJUKGNvbGxhdG9yKTsKIAogICAgIC8vIDQuIFJldHVybiBJbml0aWFsaXplQ29s
bGF0b3IoY29sbGF0b3IsIGxvY2FsZXMsIG9wdGlvbnMpLgpAQCAtMTM0LDEzICsxMzYsMTUgQEAg
Q2FsbFR5cGUgSW50bENvbGxhdG9yQ29uc3RydWN0b3I6OmdldENhbAogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvckNvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2Fs
ZXNPZihFeGVjU3RhdGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4yLjIgSW50
bC5Db2xsYXRvci5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEt
NDAyIDIuMCkKIAogICAgIC8vIDEuIExldCByZXF1ZXN0ZWRMb2NhbGVzIGJlIENhbm9uaWNhbGl6
ZUxvY2FsZUxpc3QobG9jYWxlcykuCiAgICAgVmVjdG9yPFN0cmluZz4gcmVxdWVzdGVkTG9jYWxl
cyA9IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwog
CiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQocmVxdWVzdGVkTG9jYWxlcykuCi0gICAgaWYgKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAg
Ly8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMoJUNvbGxhdG9yJS5bW2F2YWlsYWJsZUxvY2Fs
ZXNdXSwgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsQ29sbGF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xsYXRvclByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxDb2xs
YXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDggQEAgdm9pZCBJ
bnRsQ29sbGF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aQogCiBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBJbnRsQ29sbGF0b3JGdW5jQ29tcGFyZShFeGVjU3RhdGUqIHN0YXRl
KQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMC4zLjQgQ29sbGF0b3IgQ29tcGFyZSBGdW5jdGlv
bnMgKEVDTUEtNDAyIDIuMCkKICAgICAvLyAxLiBMZXQgY29sbGF0b3IgYmUgdGhlIHRoaXMgdmFs
dWUuCiAgICAgLy8gMi4gQXNzZXJ0OiBUeXBlKGNvbGxhdG9yKSBpcyBPYmplY3QgYW5kIGNvbGxh
dG9yIGhhcyBhbiBbW2luaXRpYWxpemVkQ29sbGF0b3JdXSBpbnRlcm5hbCBzbG90IHdob3NlIHZh
bHVlIGlzIHRydWUuCkBAIC04OCwxMyArOTAsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSW50bAogICAgIC8vIDUuIExldCBYIGJlIFRvU3RyaW5nKHgpLgogICAgIEpT
U3RyaW5nKiB4ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKTsKICAgICAvLyA2
LiBSZXR1cm5JZkFicnVwdChYKS4KLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyA3LiBMZXQgWSBiZSBUb1N0cmluZyh5
KS4KICAgICBKU1N0cmluZyogeSA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1N0cmluZyhzdGF0ZSk7
CiAgICAgLy8gOC4gUmV0dXJuSWZBYnJ1cHQoWSkuCi0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gOS4gUmV0dXJuIENv
bXBhcmVTdHJpbmdzKGNvbGxhdG9yLCBYLCBZKS4KQEAgLTEyMiw3ICsxMjQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxDb2xsYXRvCiAKICAgICAgICAgLy8gYy4gTGV0IGJj
IGJlIEJvdW5kRnVuY3Rpb25DcmVhdGUoRiwgwqt0aGlzIHZhbHVlwrspLgogICAgICAgICBib3Vu
ZENvbXBhcmUgPSBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVj
dCwgdGFyZ2V0T2JqZWN0LCBjb2xsYXRvciwgbnVsbHB0ciwgMiwgQVNDSUlMaXRlcmFsKCJjb21w
YXJlIikpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoKSk7CiAgICAgICAgIC8vIGQuIFNldCBjb2xsYXRvci5bW2JvdW5kQ29tcGFyZV1d
IHRvIGJjLgogICAgICAgICBjb2xsYXRvci0+c2V0Qm91bmRDb21wYXJlKHZtLCBib3VuZENvbXBh
cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bERhdGVUaW1lRm9y
bWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTUsNiArMjE1LDcgQEAgc3RhdGljIEpTT2JqZWN0KiB0b0RhdGVUaW1lT3B0aW9uc0FueURhdAog
ewogICAgIC8vIDEyLjEuMSBUb0RhdGVUaW1lT3B0aW9ucyBhYnN0cmFjdCBvcGVyYXRpb24gKEVD
TUEtNDAyIDIuMCkKICAgICBWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMS4gSWYgb3B0aW9ucyBpcyB1bmRlZmlu
ZWQsIHRoZW4gbGV0IG9wdGlvbnMgYmUgbnVsbCwgZWxzZSBsZXQgb3B0aW9ucyBiZSBUb09iamVj
dChvcHRpb25zKS4KICAgICAvLyAyLiBSZXR1cm5JZkFicnVwdChvcHRpb25zKS4KQEAgLTIyNCw3
ICsyMjUsNyBAQCBzdGF0aWMgSlNPYmplY3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAg
ICAgIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmZXhlYywgZXhlYy5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEpTT2JqZWN0KiBvcmlnaW5hbFRvT2JqZWN0ID0gb3JpZ2luYWxPcHRpb25zLnRv
T2JqZWN0KCZleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgb3B0aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjLCBvcmln
aW5hbFRvT2JqZWN0KTsKICAgICB9CkBAIC0yNDEsMjUgKzI0MiwyNSBAQCBzdGF0aWMgSlNPYmpl
Y3QqIHRvRGF0ZVRpbWVPcHRpb25zQW55RGF0CiAgICAgLy8gaWlpLiBSZXR1cm5JZkFicnVwdCh2
YWx1ZSkuCiAgICAgLy8gaXYuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4gbGV0IG5l
ZWREZWZhdWx0cyBiZSBmYWxzZS4KICAgICBKU1ZhbHVlIHdlZWtkYXkgPSBvcHRpb25zLT5nZXQo
JmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPndlZWtkYXkpOwotICAgIGlmIChleGVjLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIGlmICghd2Vla2RheS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBu
ZWVkRGVmYXVsdHMgPSBmYWxzZTsKIAogICAgIEpTVmFsdWUgeWVhciA9IG9wdGlvbnMtPmdldCgm
ZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+eWVhcik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgaWYgKCF5ZWFyLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZh
dWx0cyA9IGZhbHNlOwogCiAgICAgSlNWYWx1ZSBtb250aCA9IG9wdGlvbnMtPmdldCgmZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+bW9udGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIGlmICghbW9udGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRz
ID0gZmFsc2U7CiAKICAgICBKU1ZhbHVlIGRheSA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+ZGF5KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBpZiAoIWRheS5pc1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsK
QEAgLTI3MywxOSArMjc0LDE5IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNB
bnlEYXQKICAgICAvLyBpaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KICAgICAvLyBpdi4gSWYg
dmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgdGhlbiBsZXQgbmVlZERlZmF1bHRzIGJlIGZhbHNlLgog
ICAgIEpTVmFsdWUgaG91ciA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
aG91cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFob3Vy
LmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIG5lZWREZWZhdWx0cyA9IGZhbHNlOwogCiAgICAgSlNW
YWx1ZSBtaW51dGUgPSBvcHRpb25zLT5nZXQoJmV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1pbnV0
ZSk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKCFtaW51dGUu
aXNVbmRlZmluZWQoKSkKICAgICAgICAgbmVlZERlZmF1bHRzID0gZmFsc2U7CiAKICAgICBKU1Zh
bHVlIHNlY29uZCA9IG9wdGlvbnMtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25k
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXNlY29uZC5p
c1VuZGVmaW5lZCgpKQogICAgICAgICBuZWVkRGVmYXVsdHMgPSBmYWxzZTsKQEAgLTI5OSwxNSAr
MzAwLDE1IEBAIHN0YXRpYyBKU09iamVjdCogdG9EYXRlVGltZU9wdGlvbnNBbnlEYXQKICAgICAg
ICAgSlNTdHJpbmcqIG51bWVyaWMgPSBqc05vbnRyaXZpYWxTdHJpbmcoJmV4ZWMsIEFTQ0lJTGl0
ZXJhbCgibnVtZXJpYyIpKTsKIAogICAgICAgICBvcHRpb25zLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnllYXIsIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bW9udGgsIG51bWVyaWMpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+ZGF5LCBudW1lcmljKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKQEAgLTQyOCwxMyArNDI5LDEzIEBAIHZv
aWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAvLyAzLiBMZXQgcmVx
dWVzdGVkTG9jYWxlcyBiZSBDYW5vbmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZl
Y3RvcjxTdHJpbmc+IHJlcXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KGV4
ZWMsIGxvY2FsZXMpOwogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMp
LAotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIDUuIExldCBvcHRpb25zIGJl
IFRvRGF0ZVRpbWVPcHRpb25zKG9wdGlvbnMsICJhbnkiLCAiZGF0ZSIpLgogICAgIEpTT2JqZWN0
KiBvcHRpb25zID0gdG9EYXRlVGltZU9wdGlvbnNBbnlEYXRlKGV4ZWMsIG9yaWdpbmFsT3B0aW9u
cyk7CiAgICAgLy8gNi4gUmV0dXJuSWZBYnJ1cHQob3B0aW9ucykuCi0gICAgaWYgKGV4ZWMuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gNy4gTGV0IG9wdCBiZSBhIG5ldyBSZWNvcmQuCkBAIC00NDMs
NyArNDQ0LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxpemVEYXRlVAogICAg
IC8vIDguIExldCBtYXRjaGVyIGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIs
ICJzdHJpbmciLCDCqyJsb29rdXAiLCAiYmVzdCBmaXQiwrssICJiZXN0IGZpdCIpLgogICAgIFN0
cmluZyBsb2NhbGVNYXRjaGVyID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJs
b2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwg
ImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hlcikuCi0gICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIDEwLiBTZXQgb3B0LltbbG9jYWxlTWF0Y2hlcl1d
IHRvIG1hdGNoZXIuCiAgICAgbG9jYWxlT3B0LmFkZCh2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVN
YXRjaGVyLnN0cmluZygpLCBsb2NhbGVNYXRjaGVyKTsKQEAgLTQ3Miw3ICs0NzMsNyBAQCB2b2lk
IEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgLy8gMTcuIExldCB0eiBi
ZSBHZXQob3B0aW9ucywgInRpbWVab25lIikuCiAgICAgSlNWYWx1ZSB0elZhbHVlID0gb3B0aW9u
cy0+Z2V0KCZleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50aW1lWm9uZSk7CiAgICAgLy8gMTguIFJl
dHVybklmQWJydXB0KHR6KS4KLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyAx
OS4gSWYgdHogaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtNDgxLDcgKzQ4Miw3IEBAIHZvaWQg
SW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICAgICAgLy8gYS4gTGV0IHR6
IGJlIFRvU3RyaW5nKHR6KS4KICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVHogPSB0elZhbHVlLnRv
V1RGU3RyaW5nKCZleGVjKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQodHopLgotICAg
ICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gYy4gSWYgdGhl
IHJlc3VsdCBvZiBJc1ZhbGlkVGltZVpvbmVOYW1lKHR6KSBpcyBmYWxzZSwgdGhlbiBpLiBUaHJv
dyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgICAgICAvLyBkLiBMZXQgdHogYmUgQ2Fub25p
Y2FsaXplVGltZVpvbmVOYW1lKHR6KS4KQEAgLTUxNCw3ICs1MTUsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgYXV0byBzaG9ydExvbmcgPSB7ICJzaG9y
dCIsICJsb25nIiB9OwogCiAgICAgU3RyaW5nIHdlZWtkYXkgPSBpbnRsU3RyaW5nT3B0aW9uKGV4
ZWMsIG9wdGlvbnMsIHZtLnByb3BlcnR5TmFtZXMtPndlZWtkYXksIG5hcnJvd1Nob3J0TG9uZywg
IndlZWtkYXkgbXVzdCBiZSBcIm5hcnJvd1wiLCBcInNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVs
bHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghd2Vla2RheS5pc051
bGwoKSkgewogICAgICAgICBpZiAod2Vla2RheSA9PSAibmFycm93IikKQEAgLTUyNiw3ICs1Mjcs
NyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAg
ICAgU3RyaW5nIGVyYSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVy
dHlOYW1lcy0+ZXJhLCBuYXJyb3dTaG9ydExvbmcsICJlcmEgbXVzdCBiZSBcIm5hcnJvd1wiLCBc
InNob3J0XCIsIG9yIFwibG9uZ1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghZXJhLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChlcmEgPT0gIm5hcnJv
dyIpCkBAIC01MzgsNyArNTM5LDcgQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXQ6OmluaXRpYWxp
emVEYXRlVAogICAgIH0KIAogICAgIFN0cmluZyB5ZWFyID0gaW50bFN0cmluZ09wdGlvbihleGVj
LCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT55ZWFyLCB0d29EaWdpdE51bWVyaWMsICJ5ZWFy
IG11c3QgYmUgXCIyLWRpZ2l0XCIgb3IgXCJudW1lcmljXCIiLCBudWxscHRyKTsKLSAgICBpZiAo
ZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF5ZWFyLmlzTnVsbCgpKSB7CiAgICAgICAgIGlm
ICh5ZWFyID09ICIyLWRpZ2l0IikKQEAgLTU0OCw3ICs1NDksNyBAQCB2b2lkIEludGxEYXRlVGlt
ZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1vbnRoID0gaW50
bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5tb250aCwgdHdv
RGlnaXROdW1lcmljTmFycm93U2hvcnRMb25nLCAibW9udGggbXVzdCBiZSBcIjItZGlnaXRcIiwg
XCJudW1lcmljXCIsIFwibmFycm93XCIsIFwic2hvcnRcIiwgb3IgXCJsb25nXCIiLCBudWxscHRy
KTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKCFtb250aC5pc051bGwoKSkg
ewogICAgICAgICBpZiAobW9udGggPT0gIjItZGlnaXQiKQpAQCAtNTY0LDcgKzU2NSw3IEBAIHZv
aWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9CiAKICAgICBTdHJp
bmcgZGF5ID0gaW50bFN0cmluZ09wdGlvbihleGVjLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVz
LT5kYXksIHR3b0RpZ2l0TnVtZXJpYywgImRheSBtdXN0IGJlIFwiMi1kaWdpdFwiIG9yIFwibnVt
ZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICgh
ZGF5LmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChkYXkgPT0gIjItZGlnaXQiKQpAQCAtNTc0LDcg
KzU3NSw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICB9
CiAKICAgICBTdHJpbmcgaG91ciA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0u
cHJvcGVydHlOYW1lcy0+aG91ciwgdHdvRGlnaXROdW1lcmljLCAiaG91ciBtdXN0IGJlIFwiMi1k
aWdpdFwiIG9yIFwibnVtZXJpY1wiIiwgbnVsbHB0cik7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gV2UgbmVlZCBob3VyMTIgdG8gbWFrZSB0aGUgaG91ciBza2VsZXRvbiBw
YXR0ZXJuIGRlY2lzaW9uLCBzbyBkbyB0aGlzIGVhcmx5LgpAQCAtNTgyLDcgKzU4Myw3IEBAIHZv
aWQgSW50bERhdGVUaW1lRm9ybWF0Ojppbml0aWFsaXplRGF0ZVQKICAgICBib29sIGlzSG91cjEy
VW5kZWZpbmVkOwogICAgIGJvb2wgaHIxMiA9IGludGxCb29sZWFuT3B0aW9uKGV4ZWMsIG9wdGlv
bnMsIHZtLnByb3BlcnR5TmFtZXMtPmhvdXIxMiwgaXNIb3VyMTJVbmRlZmluZWQpOwogICAgIC8v
IDMzLiBSZXR1cm5JZkFicnVwdChocjEyKS4KLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIWhvdXIuaXNOdWxsKCkpIHsKQEAgLTYwNSw3ICs2MDYsNyBAQCB2b2lkIEludGxE
YXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIG1pbnV0
ZSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+bWlu
dXRlLCB0d29EaWdpdE51bWVyaWMsICJtaW51dGUgbXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51
bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IW1pbnV0ZS5pc051bGwoKSkgewogICAgICAgICBpZiAobWludXRlID09ICIyLWRpZ2l0IikKQEAg
LTYxNSw3ICs2MTYsNyBAQCB2b2lkIEludGxEYXRlVGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVU
CiAgICAgfQogCiAgICAgU3RyaW5nIHNlY29uZCA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0
aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+c2Vjb25kLCB0d29EaWdpdE51bWVyaWMsICJzZWNvbmQg
bXVzdCBiZSBcIjItZGlnaXRcIiBvciBcIm51bWVyaWNcIiIsIG51bGxwdHIpOwotICAgIGlmIChl
eGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXNlY29uZC5pc051bGwoKSkgewogICAgICAgICBp
ZiAoc2Vjb25kID09ICIyLWRpZ2l0IikKQEAgLTYyNSw3ICs2MjYsNyBAQCB2b2lkIEludGxEYXRl
VGltZUZvcm1hdDo6aW5pdGlhbGl6ZURhdGVUCiAgICAgfQogCiAgICAgU3RyaW5nIHRpbWVab25l
TmFtZSA9IGludGxTdHJpbmdPcHRpb24oZXhlYywgb3B0aW9ucywgdm0ucHJvcGVydHlOYW1lcy0+
dGltZVpvbmVOYW1lLCBzaG9ydExvbmcsICJ0aW1lWm9uZU5hbWUgbXVzdCBiZSBcInNob3J0XCIg
b3IgXCJsb25nXCIiLCBudWxscHRyKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKCF0aW1lWm9uZU5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHRpbWVab25lTmFtZSA9
PSAic2hvcnQiKQpAQCAtNjM5LDcgKzY0MCw3IEBAIHZvaWQgSW50bERhdGVUaW1lRm9ybWF0Ojpp
bml0aWFsaXplRGF0ZVQKICAgICAvLyAyNi4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlv
bnMsICJmb3JtYXRNYXRjaGVyIiwgInN0cmluZyIsIMKrImJhc2ljIiwgImJlc3QgZml0IsK7LCAi
YmVzdCBmaXQiKS4KICAgICBpbnRsU3RyaW5nT3B0aW9uKGV4ZWMsIG9wdGlvbnMsIHZtLnByb3Bl
cnR5TmFtZXMtPmZvcm1hdE1hdGNoZXIsIHsgImJhc2ljIiwgImJlc3QgZml0IiB9LCAiZm9ybWF0
TWF0Y2hlciBtdXN0IGJlIGVpdGhlciBcImJhc2ljXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3Qg
Zml0Iik7CiAgICAgLy8gMjcuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgIGlmIChleGVj
LmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEFsd2F5cyB1c2UgSUNVIGRhdGUgZm9ybWF0IGdlbmVy
YXRvciwgcmF0aGVyIHRoYW4gb3VyIG93biBwYXR0ZXJuIGxpc3QgYW5kIG1hdGNoZXIuCkBAIC04
MzQsMTUgKzgzNSwxNyBAQCBjb25zdCBjaGFyKiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnRpbWVab25l
CiAKIEpTT2JqZWN0KiBJbnRsRGF0ZVRpbWVGb3JtYXQ6OnJlc29sdmVkT3B0aW9ucyhFeGVjU3Rh
dGUmIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEyLjMuNSBJbnRsLkRhdGVUaW1lRm9y
bWF0LnByb3RvdHlwZS5yZXNvbHZlZE9wdGlvbnMoKSAoRUNNQS00MDIgMi4wKQogICAgIC8vIFRo
ZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFuZCBhdHRy
aWJ1dGVzIGFyZSBzZXQgYXMgaWYgY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNz
aWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZSB2YWx1ZSBvZiB0
aGUgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBzbG90IG9mIHRoaXMgRGF0ZVRpbWVGb3JtYXQgb2Jq
ZWN0IChzZWUgMTIuNCk6IGxvY2FsZSwgY2FsZW5kYXIsIG51bWJlcmluZ1N5c3RlbSwgdGltZVpv
bmUsIGhvdXIxMiwgd2Vla2RheSwgZXJhLCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUs
IHNlY29uZCwgYW5kIHRpbWVab25lTmFtZS4gUHJvcGVydGllcyB3aG9zZSBjb3JyZXNwb25kaW5n
IGludGVybmFsIHNsb3RzIGFyZSBub3QgcHJlc2VudCBhcmUgbm90IGFzc2lnbmVkLgogICAgIC8v
IE5vdGU6IEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgRUNNQVNjcmlwdCAyMDE1IEludGVybmF0aW9u
YWxpemF0aW9uIEFQSSwgdGhlIHRpbWVab25lIHByb3BlcnR5IHdpbGwgYmUgdGhlIG5hbWUgb2Yg
dGhlIGRlZmF1bHQgdGltZSB6b25lIGlmIG5vIHRpbWVab25lIHByb3BlcnR5IHdhcyBwcm92aWRl
ZCBpbiB0aGUgb3B0aW9ucyBvYmplY3QgcHJvdmlkZWQgdG8gdGhlIEludGwuRGF0ZVRpbWVGb3Jt
YXQgY29uc3RydWN0b3IuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIGxlZnQgdGhlIHRpbWVab25lIHBy
b3BlcnR5IHVuZGVmaW5lZCBpbiB0aGlzIGNhc2UuCiAgICAgaWYgKCFtX2luaXRpYWxpemVkRGF0
ZVRpbWVGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGV4ZWMsIGpz
VW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMuaGFkRXhj
ZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9u
KCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKICAgICBKU09iamVjdCogb3B0
aW9ucyA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZleGVjKTsKICAgICBvcHRpb25zLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxvY2FsZSwganNOb250cml2aWFsU3RyaW5nKCZleGVj
LCBtX2xvY2FsZSkpOwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+Y2FsZW5kYXIsIGpzTm9udHJpdmlhbFN0cmluZygmZXhlYywgbV9jYWxlbmRhcikpOwpAQCAt
ODg5LDcgKzg5Miw3IEBAIEpTVmFsdWUgSW50bERhdGVUaW1lRm9ybWF0Ojpmb3JtYXQoRXhlY1MK
ICAgICAvLyAxMi4zLjQgRm9ybWF0RGF0ZVRpbWUgYWJzdHJhY3Qgb3BlcmF0aW9uIChFQ01BLTQw
MiAyLjApCiAgICAgaWYgKCFtX2luaXRpYWxpemVkRGF0ZVRpbWVGb3JtYXQpIHsKICAgICAgICAg
aW5pdGlhbGl6ZURhdGVUaW1lRm9ybWF0KGV4ZWMsIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVk
KCkpOwotICAgICAgICBBU1NFUlQoIWV4ZWMuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICAvLyAxLiBJZiB4IGlzIG5vdCBh
IGZpbml0ZSBOdW1iZXIsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODMsMTQgKzgzLDE2IEBAIHZvaWQgSW50bERhdGVUaW1lRm9y
bWF0Q29uc3RydWN0b3I6OmZpbmkKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SW50bERhdGVUaW1lRm9ybWF0KEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIC8vIDEyLjEuMiBJbnRsLkRhdGVUaW1lRm9ybWF0IChbbG9jYWxlcyBbLCBv
cHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8gMS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVm
aW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZlIGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBs
ZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KICAgICAvLyAyLiBMZXQgZGF0ZVRpbWVGb3JtYXQg
YmUgT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IobmV3VGFyZ2V0LCAlRGF0ZVRpbWVGb3Jt
YXRQcm90b3R5cGUlKS4KICAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkYXRlVGltZUZvcm1hdCku
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBqc0Nhc3Q8SW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3IqPihzdGF0ZS0+Y2FsbGVlKCkpLT5kYXRlVGltZUZvcm1hdFN0
cnVjdHVyZSgpKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgSW50bERhdGVUaW1lRm9ybWF0KiBkYXRlVGltZUZvcm1hdCA9
IEludGxEYXRlVGltZUZvcm1hdDo6Y3JlYXRlKHN0YXRlLT52bSgpLCBzdHJ1Y3R1cmUpOworICAg
IEludGxEYXRlVGltZUZvcm1hdCogZGF0ZVRpbWVGb3JtYXQgPSBJbnRsRGF0ZVRpbWVGb3JtYXQ6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICBBU1NFUlQoZGF0ZVRpbWVGb3JtYXQpOwogCiAg
ICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVEYXRlVGltZUZvcm1hdChkYXRlVGltZUZvcm1hdCwg
bG9jYWxlcywgb3B0aW9ucykuCkBAIC0xMzQsNiArMTM2LDggQEAgQ2FsbFR5cGUgSW50bERhdGVU
aW1lRm9ybWF0Q29uc3RydWN0b3I6OgogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIElu
dGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3Rh
dGUqIHN0YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMi4yLjIgSW50bC5EYXRlVGltZUZv
cm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlcyBbLCBvcHRpb25zXSkgKEVDTUEtNDAyIDIu
MCkKIAogICAgIC8vIDEuIExldCBhdmFpbGFibGVMb2NhbGVzIGJlICVEYXRlVGltZUZvcm1hdCUu
W1thdmFpbGFibGVMb2NhbGVzXV0uCkBAIC0xNDIsNyArMTQ2LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgLy8gMi4gTGV0IHJlcXVlc3RlZExvY2Fs
ZXMgYmUgQ2Fub25pY2FsaXplTG9jYWxlTGlzdChsb2NhbGVzKS4KICAgICBWZWN0b3I8U3RyaW5n
PiByZXF1ZXN0ZWRMb2NhbGVzID0gY2Fub25pY2FsaXplTG9jYWxlTGlzdCgqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gMy4gUmV0dXJuIFN1cHBvcnRlZExvY2FsZXMo
YXZhaWxhYmxlTG9jYWxlcywgcmVxdWVzdGVkTG9jYWxlcywgb3B0aW9ucykuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGlt
ZUZvcm1hdFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDggQEAgdm9pZCBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGU6
OmZpbmlzaAogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsRGF0ZVRp
bWVGb3JtYXRGdW5jRm9ybWF0RGF0ZVRpbWUoRXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgLy8gMTIuMy40IERhdGVUaW1lIEZvcm1hdCBGdW5jdGlvbnMgKEVDTUEtNDAyIDIu
MCkKICAgICAvLyAxLiBMZXQgZHRmIGJlIHRoZSB0aGlzIHZhbHVlLgogICAgIC8vIDIuIEFzc2Vy
dDogVHlwZShkdGYpIGlzIE9iamVjdCBhbmQgZHRmIGhhcyBhbiBbW2luaXRpYWxpemVkRGF0ZVRp
bWVGb3JtYXRdXSBpbnRlcm5hbCBzbG90IHdob3NlIHZhbHVlIGlzIHRydWUuCkBAIC05OSw3ICsx
MDEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgICAg
IC8vIGEuIExldCB4IGJlIFRvTnVtYmVyKGRhdGUpLgogICAgICAgICB2YWx1ZSA9IGRhdGUudG9O
dW1iZXIoc3RhdGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh4KS4KLSAgICAgICAg
aWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgfQogCkBAIC0xMzgsNyArMTQwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBJbnRsRGF0ZVRpbQogCiAgICAgICAgIC8vIGMuIExldCBiZiBiZSBCb3VuZEZ1bmN0
aW9uQ3JlYXRlKEYsIMKrdGhpcyB2YWx1ZcK7KS4KICAgICAgICAgYm91bmRGb3JtYXQgPSBKU0Jv
dW5kRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGUsIGdsb2JhbE9iamVjdCwgdGFyZ2V0T2JqZWN0
LCBkdGYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAg
ICAgLy8gZC4gU2V0IGR0Zi5bW2JvdW5kRm9ybWF0XV0gdG8gYmYuCiAgICAgICAgIGR0Zi0+c2V0
Qm91bmRGb3JtYXQodm0sIGJvdW5kRm9ybWF0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXQuY3BwCShyZXZpc2lvbiAyMDU1NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRsTnVtYmVyRm9ybWF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6
aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5v
bmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIGF1dG8gcmVxdWVzdGVkTG9jYWxlcyA9
IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3Qoc3RhdGUsIGxvY2FsZXMpOwogICAgIC8vIDQuIFJldHVy
bklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyA1LiBJZiBvcHRpb25zIGlzIHVuZGVmaW5lZCwgdGhlbgpAQCAtMTc2LDcgKzE3
Niw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAgICAg
Ly8gYS4gTGV0IG9wdGlvbnMgYmUgVG9PYmplY3Qob3B0aW9ucykuCiAgICAgICAgIG9wdGlvbnMg
PSBvcHRpb25zVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKICAgICAgICAgLy8gYi4gUmV0dXJuSWZB
YnJ1cHQob3B0aW9ucykuCi0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE4Niw3ICsxODYsNyBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXQ6OmluaXRp
YWxpemVOdW1iZXJGCiAgICAgLy8gOC4gTGV0IG1hdGNoZXIgYmUgR2V0T3B0aW9uKG9wdGlvbnMs
ICJsb2NhbGVNYXRjaGVyIiwgInN0cmluZyIsIMKrImxvb2t1cCIsICJiZXN0IGZpdCLCuywgImJl
c3QgZml0IikuCiAgICAgU3RyaW5nIG1hdGNoZXIgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBv
cHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRjaGVyLCB7ICJsb29rdXAiLCAiYmVz
dCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0aGVyIFwibG9va3VwXCIgb3IgXCJi
ZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgLy8gOS4gUmV0dXJuSWZBYnJ1cHQobWF0Y2hl
cikuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAxMC4gU2V0IG9wdC5bW2xv
Y2FsZU1hdGNoZXJdXSB0byBtYXRjaGVyLgogICAgIG9wdC5hZGQoQVNDSUlMaXRlcmFsKCJsb2Nh
bGVNYXRjaGVyIiksIG1hdGNoZXIpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAxNi4gTGV0IHMgYmUgR2V0T3B0aW9u
KG9wdGlvbnMsICJzdHlsZSIsICJzdHJpbmciLCDCqyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1
cnJlbmN5IsK7LCAiZGVjaW1hbCIpLgogICAgIFN0cmluZyBzdHlsZVN0cmluZyA9IGludGxTdHJp
bmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAic3R5
bGUiKSwgeyAiZGVjaW1hbCIsICJwZXJjZW50IiwgImN1cnJlbmN5IiB9LCAic3R5bGUgbXVzdCBi
ZSBlaXRoZXIgXCJkZWNpbWFsXCIsIFwicGVyY2VudFwiLCBvciBcImN1cnJlbmN5XCIiLCAiZGVj
aW1hbCIpOwogICAgIC8vIDE3LiBSZXR1cm5JZkFicnVwdChzKS4KLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIC8vIDE4LiBTZXQgbnVtYmVyRm9ybWF0Lltbc3R5bGVdXSB0byBzLgog
ICAgIGlmIChzdHlsZVN0cmluZyA9PSAiZGVjaW1hbCIpCkBAIC0yMjIsNyArMjIyLDcgQEAgdm9p
ZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDE5LiBMZXQgYyBi
ZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5IiwgInN0cmluZyIsIHVuZGVmaW5lZCwgdW5k
ZWZpbmVkKS4KICAgICBTdHJpbmcgY3VycmVuY3kgPSBpbnRsU3RyaW5nT3B0aW9uKHN0YXRlLCBv
cHRpb25zLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImN1cnJlbmN5IiksIHsgfSwgbnVs
bHB0ciwgbnVsbHB0cik7CiAgICAgLy8gMjAuIFJldHVybklmQWJydXB0KGMpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgLy8gMjEuIElmIGMgaXMgbm90IHVuZGVmaW5lZCwgdGhl
bgogICAgIGlmICghY3VycmVuY3kuaXNOdWxsKCkpIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCB2b2lk
IEludGxOdW1iZXJGb3JtYXQ6OmluaXRpYWxpemVOdW1iZXJGCiAgICAgLy8gMjQuIExldCBjZCBi
ZSBHZXRPcHRpb24ob3B0aW9ucywgImN1cnJlbmN5RGlzcGxheSIsICJzdHJpbmciLCDCqyJjb2Rl
IiwgInN5bWJvbCIsICJuYW1lIsK7LCAic3ltYm9sIikuCiAgICAgU3RyaW5nIGN1cnJlbmN5RGlz
cGxheVN0cmluZyA9IGludGxTdHJpbmdPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY3VycmVuY3lEaXNwbGF5IiksIHsgImNvZGUiLCAic3ltYm9sIiwg
Im5hbWUiIH0sICJjdXJyZW5jeURpc3BsYXkgbXVzdCBiZSBlaXRoZXIgXCJjb2RlXCIsIFwic3lt
Ym9sXCIsIG9yIFwibmFtZVwiIiwgInN5bWJvbCIpOwogICAgIC8vIDI1LiBSZXR1cm5JZkFicnVw
dChjZCkuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICAvLyAyNi4gSWYgcyBpcyAi
Y3VycmVuY3kiLCBzZXQgbnVtYmVyRm9ybWF0LltbY3VycmVuY3lEaXNwbGF5XV0gdG8gY2QuCiAg
ICAgaWYgKG1fc3R5bGUgPT0gU3R5bGU6OkN1cnJlbmN5KSB7CkBAIC0yNzEsNyArMjcxLDcgQEAg
dm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogICAgIC8vIDI4LiBSZXR1
cm5JZkFicnVwdChtbmlkKS4KICAgICAvLyAyOS4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1J
bnRlZ2VyRGlnaXRzXV0gdG8gbW5pZC4KICAgICB1bnNpZ25lZCBtaW5pbXVtSW50ZWdlckRpZ2l0
cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAibWluaW11bUludGVnZXJEaWdpdHMiKSwgMSwgMjEsIDEpOwotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtSW50ZWdlckRpZ2l0cyA9IG1pbmltdW1JbnRl
Z2VyRGlnaXRzOwogCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojpp
bml0aWFsaXplTnVtYmVyRgogICAgIC8vIDMyLiBSZXR1cm5JZkFicnVwdChtbmZkKS4KICAgICAv
LyAzMy4gU2V0IG51bWJlckZvcm1hdC5bW21pbmltdW1GcmFjdGlvbkRpZ2l0c11dIHRvIG1uZmQu
CiAgICAgdW5zaWduZWQgbWluaW11bUZyYWN0aW9uRGlnaXRzID0gaW50bE51bWJlck9wdGlvbihz
dGF0ZSwgb3B0aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtRnJhY3Rp
b25EaWdpdHMiKSwgMCwgMjAsIG1pbmltdW1GcmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgbV9taW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBtaW5p
bXVtRnJhY3Rpb25EaWdpdHM7CiAKQEAgLTI5OSwyMCArMjk5LDIwIEBAIHZvaWQgSW50bE51bWJl
ckZvcm1hdDo6aW5pdGlhbGl6ZU51bWJlckYKICAgICAvLyAzNi4gUmV0dXJuSWZBYnJ1cHQobXhm
ZCkuCiAgICAgLy8gMzcuIFNldCBudW1iZXJGb3JtYXQuW1ttYXhpbXVtRnJhY3Rpb25EaWdpdHNd
XSB0byBteGZkLgogICAgIHVuc2lnbmVkIG1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IGludGxOdW1i
ZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibWF4
aW11bUZyYWN0aW9uRGlnaXRzIiksIG1pbmltdW1GcmFjdGlvbkRpZ2l0cywgMjAsIG1heGltdW1G
cmFjdGlvbkRpZ2l0c0RlZmF1bHQpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
bV9tYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBtYXhpbXVtRnJhY3Rpb25EaWdpdHM7CiAKICAgICAv
LyAzOC4gTGV0IG1uc2QgYmUgR2V0KG9wdGlvbnMsICJtaW5pbXVtU2lnbmlmaWNhbnREaWdpdHMi
KS4KICAgICBKU1ZhbHVlIG1pbmltdW1TaWduaWZpY2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNh
bnREaWdpdHMiKSk7CiAgICAgLy8gMzkuIFJldHVybklmQWJydXB0KG1uc2QpLgotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0MC4gTGV0IG14c2QgYmUgR2V0KG9wdGlvbnMs
ICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKS4KICAgICBKU1ZhbHVlIG1heGltdW1TaWduaWZp
Y2FudERpZ2l0c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJtYXhpbXVtU2lnbmlmaWNhbnREaWdpdHMiKSk7CiAgICAgLy8gNDEuIFJldHVy
bklmQWJydXB0KG14c2QpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0
Mi4gSWYgbW5zZCBpcyBub3QgdW5kZWZpbmVkIG9yIG14c2QgaXMgbm90IHVuZGVmaW5lZCwgdGhl
bgpAQCAtMzIwLDEyICszMjAsMTIgQEAgdm9pZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXpl
TnVtYmVyRgogICAgICAgICAvLyBhLiBMZXQgbW5zZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9u
cywgIm1pbmltdW1TaWduaWZpY2FudERpZ2l0cyIsIDEsIDIxLCAxKS4KICAgICAgICAgdW5zaWdu
ZWQgbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gaW50bE51bWJlck9wdGlvbihzdGF0ZSwgb3B0
aW9ucywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJtaW5pbXVtU2lnbmlmaWNhbnREaWdp
dHMiKSwgMSwgMjEsIDEpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChtbnNkKS4KLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBjLiBMZXQg
bXhzZCBiZSBHZXROdW1iZXJPcHRpb24ob3B0aW9ucywgIm1heGltdW1TaWduaWZpY2FudERpZ2l0
cyIsIG1uc2QsIDIxLCAyMSkuCiAgICAgICAgIHVuc2lnbmVkIG1heGltdW1TaWduaWZpY2FudERp
Z2l0cyA9IGludGxOdW1iZXJPcHRpb24oc3RhdGUsIG9wdGlvbnMsIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAibWF4aW11bVNpZ25pZmljYW50RGlnaXRzIiksIG1pbmltdW1TaWduaWZpY2Fu
dERpZ2l0cywgMjEsIDIxKTsKICAgICAgICAgLy8gZC4gUmV0dXJuSWZBYnJ1cHQobXhzZCkuCi0g
ICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLy8gZS4gU2V0
IG51bWJlckZvcm1hdC5bW21pbmltdW1TaWduaWZpY2FudERpZ2l0c11dIHRvIG1uc2QuCiAgICAg
ICAgIG1fbWluaW11bVNpZ25pZmljYW50RGlnaXRzID0gbWluaW11bVNpZ25pZmljYW50RGlnaXRz
OwpAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgSW50bE51bWJlckZvcm1hdDo6aW5pdGlhbGl6ZU51
bWJlckYKICAgICBpZiAodXNlc0ZhbGxiYWNrKQogICAgICAgICB1c2VHcm91cGluZyA9IHRydWU7
CiAgICAgLy8gNDQuIFJldHVybklmQWJydXB0KGcpLgotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgLy8gNDUuIFNldCBudW1iZXJGb3JtYXQuW1t1c2VHcm91cGluZ11dIHRvIGcuCiAg
ICAgbV91c2VHcm91cGluZyA9IHVzZUdyb3VwaW5nOwpAQCAtMzYxLDExICszNjEsMTQgQEAgdm9p
ZCBJbnRsTnVtYmVyRm9ybWF0Ojppbml0aWFsaXplTnVtYmVyRgogCiB2b2lkIEludGxOdW1iZXJG
b3JtYXQ6OmNyZWF0ZU51bWJlckZvcm1hdChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCiAgICAgQVNTRVJUKCFtX251bWJlckZvcm1hdCk7CiAKICAgICBpZiAoIW1faW5pdGlhbGl6
ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51bWJlckZvcm1hdChzdGF0ZSwg
anNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIH0KIAogICAgIFVOdW1iZXJGb3JtYXRTdHlsZSBzdHlsZTsKQEAgLTQ3OSw2
ICs0ODIsOSBAQCBjb25zdCBjaGFyKiBJbnRsTnVtYmVyRm9ybWF0OjpjdXJyZW5jeURpCiAKIEpT
T2JqZWN0KiBJbnRsTnVtYmVyRm9ybWF0OjpyZXNvbHZlZE9wdGlvbnMoRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDExLjMuNSBJbnRsLk51bWJlckZvcm1hdC5wcm90
b3R5cGUucmVzb2x2ZWRPcHRpb25zKCkgKEVDTUEtNDAyIDIuMCkKICAgICAvLyBUaGUgZnVuY3Rp
b24gcmV0dXJucyBhIG5ldyBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhbmQgYXR0cmlidXRlcyBh
cmUgc2V0IGFzIGlmCiAgICAgLy8gY29uc3RydWN0ZWQgYnkgYW4gb2JqZWN0IGxpdGVyYWwgYXNz
aWduaW5nIHRvIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHRoZQpAQCAtNDkwLDEw
ICs0OTYsOSBAQCBKU09iamVjdCogSW50bE51bWJlckZvcm1hdDo6cmVzb2x2ZWRPcHRpCiAKICAg
ICBpZiAoIW1faW5pdGlhbGl6ZWROdW1iZXJGb3JtYXQpIHsKICAgICAgICAgaW5pdGlhbGl6ZU51
bWJlckZvcm1hdChzdGF0ZSwganNVbmRlZmluZWQoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNj
b3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CiAgICAgSlNPYmplY3QqIG9wdGlvbnMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUp
OwogICAgIG9wdGlvbnMtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bG9jYWxlLCBq
c1N0cmluZygmc3RhdGUsIG1fbG9jYWxlKSk7CiAgICAgb3B0aW9ucy0+cHV0RGlyZWN0KHZtLCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm51bWJlcmluZ1N5c3RlbSIpLCBqc1N0cmluZygm
c3RhdGUsIG1fbnVtYmVyaW5nU3lzdGVtKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDE0ICs4
MywxNiBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvcjo6ZmluaXNoCiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEludGxOdW1iZXJGb3JtYXQo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgLy8gMTEuMS4yIEludGwuTnVt
YmVyRm9ybWF0IChbbG9jYWxlcyBbLCBvcHRpb25zXV0pIChFQ01BLTQwMiAyLjApCiAgICAgLy8g
MS4gSWYgTmV3VGFyZ2V0IGlzIHVuZGVmaW5lZCwgbGV0IG5ld1RhcmdldCBiZSB0aGUgYWN0aXZl
IGZ1bmN0aW9uIG9iamVjdCwgZWxzZSBsZXQgbmV3VGFyZ2V0IGJlIE5ld1RhcmdldC4KICAgICAv
LyAyLiBMZXQgbnVtYmVyRm9ybWF0IGJlIE9yZGluYXJ5Q3JlYXRlRnJvbUNvbnN0cnVjdG9yKG5l
d1RhcmdldCwgJU51bWJlckZvcm1hdFByb3RvdHlwZSUpLgogICAgIC8vIDMuIFJldHVybklmQWJy
dXB0KG51bWJlckZvcm1hdCkuCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgp
LCBqc0Nhc3Q8SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKS0+
bnVtYmVyRm9ybWF0U3RydWN0dXJlKCkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBJbnRsTnVtYmVyRm9ybWF0KiBudW1i
ZXJGb3JtYXQgPSBJbnRsTnVtYmVyRm9ybWF0OjpjcmVhdGUoc3RhdGUtPnZtKCksIHN0cnVjdHVy
ZSk7CisgICAgSW50bE51bWJlckZvcm1hdCogbnVtYmVyRm9ybWF0ID0gSW50bE51bWJlckZvcm1h
dDo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChudW1iZXJGb3JtYXQpOwogCiAg
ICAgLy8gNC4gUmV0dXJuIEluaXRpYWxpemVOdW1iZXJGb3JtYXQobnVtYmVyRm9ybWF0LCBsb2Nh
bGVzLCBvcHRpb25zKS4KQEAgLTEzNCw2ICsxMzYsOCBAQCBDYWxsVHlwZSBJbnRsTnVtYmVyRm9y
bWF0Q29uc3RydWN0b3I6OmdlCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50bE51
bWJlckZvcm1hdENvbnN0cnVjdG9yRnVuY1N1cHBvcnRlZExvY2FsZXNPZihFeGVjU3RhdGUqIHN0
YXRlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAvLyAxMS4yLjIgSW50bC5OdW1iZXJGb3JtYXQuc3Vw
cG9ydGVkTG9jYWxlc09mKGxvY2FsZXMgWywgb3B0aW9uc10pIChFQ01BLTQwMiAyLjApCiAKICAg
ICAvLyAxLiBMZXQgYXZhaWxhYmxlTG9jYWxlcyBiZSAlTnVtYmVyRm9ybWF0JS5bW2F2YWlsYWJs
ZUxvY2FsZXNdXS4KQEAgLTE0Miw3ICsxNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEludGxOdW1iZXJGCiAKICAgICAvLyAyLiBMZXQgcmVxdWVzdGVkTG9jYWxlcyBiZSBDYW5v
bmljYWxpemVMb2NhbGVMaXN0KGxvY2FsZXMpLgogICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3Rl
ZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKICAgICAvLyAzLiBSZXR1cm4gU3VwcG9ydGVkTG9jYWxlcyhhdmFpbGFibGVM
b2NhbGVzLCByZXF1ZXN0ZWRMb2NhbGVzLCBvcHRpb25zKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxOdW1iZXJGb3JtYXRQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiAr
ODAsOCBAQCB2b2lkIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGU6OmZpbmlzaENyCiAKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGxOdW1iZXJGb3JtYXRGdW5jRm9ybWF0
TnVtYmVyKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIC8vIDExLjMuNCBG
b3JtYXQgTnVtYmVyIEZ1bmN0aW9ucyAoRUNNQS00MDIgMi4wKQogICAgIC8vIDEuIExldCBuZiBi
ZSB0aGUgdGhpcyB2YWx1ZS4KICAgICAvLyAyLiBBc3NlcnQ6IFR5cGUobmYpIGlzIE9iamVjdCBh
bmQgbmYgaGFzIGFuIFtbaW5pdGlhbGl6ZWROdW1iZXJGb3JtYXRdXSBpbnRlcm5hbCBzbG90IHdo
b3NlIHZhbHVlICB0cnVlLgpAQCAtODksNyArOTEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBJbnRsCiAgICAgLy8gNC4gTGV0IHggYmUgVG9OdW1iZXIodmFsdWUpLgog
ICAgIGRvdWJsZSBudW1iZXIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9OdW1iZXIoc3RhdGUpOwog
ICAgIC8vIDUuIFJldHVybklmQWJydXB0KHgpLgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDYuIFJldHVybiBGb3Jt
YXROdW1iZXIobmYsIHgpLgpAQCAtMTI2LDcgKzEyOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSW50bE51bWJlckYKIAogICAgICAgICAvLyBjLiBMZXQgYmYgYmUgQm91bmRGdW5j
dGlvbkNyZWF0ZShGLCDCq3RoaXMgdmFsdWXCuykuCiAgICAgICAgIGJvdW5kRm9ybWF0ID0gSlNC
b3VuZEZ1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRlLCBnbG9iYWxPYmplY3QsIHRhcmdldE9iamVj
dCwgbmYsIGJvdW5kQXJncywgMSwgQVNDSUlMaXRlcmFsKCJmb3JtYXQiKSk7Ci0gICAgICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICAg
ICAgLy8gZC4gU2V0IG5mLltbYm91bmRGb3JtYXRdXSB0byBiZi4KICAgICAgICAgbmYtPnNldEJv
dW5kRm9ybWF0KHZtLCBib3VuZEZvcm1hdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NCw2ICsxMjQsOSBAQCB2b2lkIGNvbnZlcnRJQ1VMb2NhbGVUb0JDUDQ3TGFuZ3VhZ2VUYWcoCiAK
IGJvb2wgaW50bEJvb2xlYW5PcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBvcHRpb25z
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHksIGJvb2wmIHVzZXNGYWxsYmFjaykKIHsKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIC8vIDkuMi45IEdldE9wdGlvbiAob3B0aW9ucywgcHJvcGVydHksIHR5cGUsIHZh
bHVlcywgZmFsbGJhY2spCiAgICAgLy8gRm9yIHR5cGU9ImJvb2xlYW4iLiB2YWx1ZXMgaXMgYWx3
YXlzIHVuZGVmaW5lZC4KIApAQCAtMTMxLDE0ICsxMzQsMTQgQEAgYm9vbCBpbnRsQm9vbGVhbk9w
dGlvbihFeGVjU3RhdGUmIHN0YXRlLAogICAgIEpTT2JqZWN0KiBvcHRzID0gb3B0aW9ucy50b09i
amVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0cykuCi0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDMuIExldCB2YWx1ZSBiZSBHZXQo
b3B0cywgcHJvcGVydHkpLgogICAgIEpTVmFsdWUgdmFsdWUgPSBvcHRzLT5nZXQoJnN0YXRlLCBw
cm9wZXJ0eSk7CiAKICAgICAvLyA0LiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRl
ZmluZWQsIHRoZW4KQEAgLTE3MywxNCArMTc2LDE0IEBAIFN0cmluZyBpbnRsU3RyaW5nT3B0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBKU09iamVjdCogb3B0cyA9IG9wdGlvbnMudG9PYmplY3Qo
JnN0YXRlKTsKIAogICAgIC8vIDIuIFJldHVybklmQWJydXB0KG9wdHMpLgotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMy4gTGV0IHZhbHVlIGJlIEdldChvcHRzLCBw
cm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgmc3RhdGUsIHByb3BlcnR5
KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDUuIElmIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIHRo
ZW4KQEAgLTE5Myw3ICsxOTYsNyBAQCBTdHJpbmcgaW50bFN0cmluZ09wdGlvbihFeGVjU3RhdGUm
IHN0YXRlCiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CiAKICAgICAgICAgLy8gaWkuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgICAgICAvLyBkLiBJZiB2
YWx1ZXMgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMjIxLDE0ICsyMjQsMTQgQEAgdW5zaWdu
ZWQgaW50bE51bWJlck9wdGlvbihFeGVjU3RhdGUmIHN0YQogICAgIEpTT2JqZWN0KiBvcHRzID0g
b3B0aW9ucy50b09iamVjdCgmc3RhdGUpOwogCiAgICAgLy8gMi4gUmV0dXJuSWZBYnJ1cHQob3B0
cykuCi0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gMy4gTGV0IHZhbHVl
IGJlIEdldChvcHRzLCBwcm9wZXJ0eSkuCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9wdHMtPmdldCgm
c3RhdGUsIHByb3BlcnR5KTsKIAogICAgIC8vIDQuIFJldHVybklmQWJydXB0KHZhbHVlKS4KLSAg
ICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyA1LiBJZiB2YWx1ZSBpcyBub3Qg
dW5kZWZpbmVkLCB0aGVuCkBAIC0yMzYsNyArMjM5LDcgQEAgdW5zaWduZWQgaW50bE51bWJlck9w
dGlvbihFeGVjU3RhdGUmIHN0YQogICAgICAgICAvLyBhLiBMZXQgdmFsdWUgYmUgVG9OdW1iZXIo
dmFsdWUpLgogICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwogICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdCh2YWx1ZSkuCi0gICAgICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAvLyAxLiBJZiB2YWx1ZSBpcyBO
YU4gb3IgbGVzcyB0aGFuIG1pbmltdW0gb3IgZ3JlYXRlciB0aGFuIG1heGltdW0sIHRocm93IGEg
UmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgICAgIGlmICghKGRvdWJsZVZhbHVlID49IG1pbmlt
dW0gJiYgZG91YmxlVmFsdWUgPD0gbWF4aW11bSkpIHsKQEAgLTU1NywxNiArNTYwLDE2IEBAIFZl
Y3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QoRXgKICAgICB9CiAKICAgICAvLyA1
LiBSZXR1cm5JZkFicnVwdChPKS4KLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7CiAKICAgICAvLyA2LiBMZXQgbGVuIGJlIFRvTGVuZ3RoKEdldChPLCAibGVuZ3Ro
IikpLgogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoJnN0
YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKIAogICAgIGRvdWJsZSBsZW5ndGggPSBsZW5ndGhQcm9wZXJ0
eS50b0xlbmd0aCgmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbG9jYWxlcyB0aGF0IGhhdmUgYmVlbiBh
ZGRlZCB0byB0aGUgbGlzdC4KQEAgLTU4Miw3ICs1ODUsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5v
bmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2NhbGVzT2Jq
ZWN0LT5oYXNQcm9wZXJ0eSgmc3RhdGUsIGspOwogCiAgICAgICAgIC8vIGMuIFJldHVybklmQWJy
dXB0KGtQcmVzZW50KS4KLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7CiAKICAgICAgICAgLy8gZC4gSWYga1ByZXNlbnQgaXMgdHJ1ZSwgdGhl
bgpAQCAtNTkxLDcgKzU5NCw3IEBAIFZlY3RvcjxTdHJpbmc+IGNhbm9uaWNhbGl6ZUxvY2FsZUxp
c3QoRXgKICAgICAgICAgICAgIEpTVmFsdWUga1ZhbHVlID0gbG9jYWxlc09iamVjdC0+Z2V0KCZz
dGF0ZSwgayk7CiAKICAgICAgICAgICAgIC8vIGlpLiBSZXR1cm5JZkFicnVwdChrVmFsdWUpLgot
ICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmVjdG9y
PFN0cmluZz4oKTsKIAogICAgICAgICAgICAgLy8gaWlpLiBJZiBUeXBlKGtWYWx1ZSkgaXMgbm90
IFN0cmluZyBvciBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KQEAgLTYwNCw3
ICs2MDcsNyBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEV4CiAgICAg
ICAgICAgICBKU1N0cmluZyogdGFnID0ga1ZhbHVlLnRvU3RyaW5nKCZzdGF0ZSk7CiAKICAgICAg
ICAgICAgIC8vIHYuIFJldHVybklmQWJydXB0KHRhZykuCi0gICAgICAgICAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogCiAgICAgICAg
ICAgICAvLyB2aS4gSWYgSXNTdHJ1Y3R1cmFsbHlWYWxpZExhbmd1YWdlVGFnKHRhZykgaXMgZmFs
c2UsIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCkBAIC05MzQsNiArOTM3LDcgQEAgSlNW
YWx1ZSBzdXBwb3J0ZWRMb2NhbGVzKEV4ZWNTdGF0ZSYgc3RhdAogewogICAgIC8vIDkuMi44IFN1
cHBvcnRlZExvY2FsZXMgKGF2YWlsYWJsZUxvY2FsZXMsIHJlcXVlc3RlZExvY2FsZXMsIG9wdGlv
bnMpCiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgU3RyaW5nIG1hdGNoZXI7CiAKICAgICAvLyAxLiBJZiBvcHRp
b25zIGlzIG5vdCB1bmRlZmluZWQsIHRoZW4KQEAgLTk0MSw3ICs5NDUsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIC8vIGEuIExldCBtYXRjaGVy
IGJlIEdldE9wdGlvbihvcHRpb25zLCAibG9jYWxlTWF0Y2hlciIsICJzdHJpbmciLCDCqyAibG9v
a3VwIiwgImJlc3QgZml0IiDCuywgImJlc3QgZml0IikuCiAgICAgICAgIG1hdGNoZXIgPSBpbnRs
U3RyaW5nT3B0aW9uKHN0YXRlLCBvcHRpb25zLCB2bS5wcm9wZXJ0eU5hbWVzLT5sb2NhbGVNYXRj
aGVyLCB7ICJsb29rdXAiLCAiYmVzdCBmaXQiIH0sICJsb2NhbGVNYXRjaGVyIG11c3QgYmUgZWl0
aGVyIFwibG9va3VwXCIgb3IgXCJiZXN0IGZpdFwiIiwgImJlc3QgZml0Iik7CiAgICAgICAgIC8v
IGIuIFJldHVybklmQWJydXB0KG1hdGNoZXIpLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyAyLiBF
bHNlLCBsZXQgbWF0Y2hlciBiZSAiYmVzdCBmaXQiLgpAQCAtOTYxLDcgKzk2NSw3IEBAIEpTVmFs
dWUgc3VwcG9ydGVkTG9jYWxlcyhFeGVjU3RhdGUmIHN0YXQKICAgICAgICAgc3VwcG9ydGVkTG9j
YWxlcyA9IGxvb2t1cFN1cHBvcnRlZExvY2FsZXMoc3RhdGUsIGF2YWlsYWJsZUxvY2FsZXMsIHJl
cXVlc3RlZExvY2FsZXMpOwogICAgIH0KIAotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIC8vIDYuIExldCBzdWJzZXQgYmUgQ3JlYXRlQXJyYXlGcm9tTGlz
dChzdXBwb3J0ZWRMb2NhbGVzKS4KQEAgLTk3MCw3ICs5NzQsNyBAQCBKU1ZhbHVlIHN1cHBvcnRl
ZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgLy8gNy4gTGV0IGtleXMgYmUgc3Vic2V0Lltb
T3duUHJvcGVydHlLZXlzXV0oKS4KICAgICBQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZzdGF0ZSwg
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CiAgICAgc3VwcG9ydGVkTG9jYWxlcy0+Z2V0T3du
UHJvcGVydHlOYW1lcyhzdXBwb3J0ZWRMb2NhbGVzLCAmc3RhdGUsIGtleXMsIEVudW1lcmF0aW9u
TW9kZSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVzYzsKQEAgLTk4Nyw3ICs5OTEsNyBAQCBKU1ZhbHVlIHN1
cHBvcnRlZExvY2FsZXMoRXhlY1N0YXRlJiBzdGF0CiAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMt
PmRlZmluZU93blByb3BlcnR5KHN1cHBvcnRlZExvY2FsZXMsICZzdGF0ZSwga2V5c1tpXSwgZGVz
YywgdHJ1ZSk7CiAKICAgICAgICAgLy8gYy4gQXNzZXJ0OiBzdGF0dXMgaXMgbm90IGFicnVwdCBj
b21wbGV0aW9uLgotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGxPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50bE9iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsMTUgKzQwLDE3IEBAIEpTVmFsdWUgY29uc3RydWN0SW50bEluc3RhbmNlV2l0aFdvcmth
cm8KICAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0
aCBFQ01BLTQwMiAxLjAgY2FsbC9hcHBseSBwYXR0ZXJucy4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNjc5CiAgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
IWpzRHluYW1pY0Nhc3Q8SW50bEluc3RhbmNlKj4odGhpc1ZhbHVlKSkgewogICAgICAgICBKU1Zh
bHVlIHByb3RvdHlwZSA9IGNhbGxlZS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5w
cm90b3R5cGUpOwogICAgICAgICBpZiAoSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZSgmc3Rh
dGUsIHRoaXNWYWx1ZSwgcHJvdG90eXBlKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNP
YmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAg
ICAgIEludGxJbnN0YW5jZSogaW5zdGFuY2UgPSBmYWN0b3J5KHZtKTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuaW50bFN1YnN0aXR1dGVWYWx1ZVByaXZhdGVOYW1lKCksIGluc3RhbmNlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBuZXh0RnVu
Y3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bmV4dCk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQ2FsbERhdGEgbmV4
dEZ1bmN0aW9uQ2FsbERhdGE7CkBAIC01Myw3ICs1Myw3IEBAIEpTVmFsdWUgaXRlcmF0b3JOZXh0
KEV4ZWNTdGF0ZSogZXhlYywgSlMKICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAg
bmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5leHRGdW5j
dGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIXJlc3VsdC5pc09i
amVjdCgpKQpAQCAtODAsMTEgKzgwLDE0IEBAIGJvb2wgaXRlcmF0b3JDb21wbGV0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEoKIAogSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGl0ZXJhdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBpdGVy
YXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4ZWMsIHJlc3Vs
dCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlmIChk
b25lKQogICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKQEAgLTk0LDIwICs5NywyMSBA
QCBKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTCiB2b2lkIGl0ZXJhdG9y
Q2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8g
Y2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgRXhjZXB0aW9uKiBl
eGNlcHRpb24gPSBudWxscHRyOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJF
eGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoY2F0Y2hTY29wZS5leGNlcHRpb24oKSkpIHsK
KyAgICAgICAgZXhjZXB0aW9uID0gY2F0Y2hTY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgY2F0
Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIH0KICAgICBKU1ZhbHVlIHJldHVybkZ1bmN0
aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZXR1cm5GdW5j
dGlvbi5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTExNSw5ICsxMTksOSBAQCB2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhCiAgICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdl
dENhbGxEYXRhKHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKICAgICBp
ZiAocmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGV4
Y2VwdGlvbik7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBl
eGNlcHRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSk7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCB0aHJvd1Njb3BlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTI1LDE1ICsxMjksMTUgQEAgdm9pZCBpdGVy
YXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAgIEpTVmFsdWUgaW5uZXJSZXN1bHQg
PSBjYWxsKGV4ZWMsIHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxUeXBlLCByZXR1
cm5GdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHMpOwog
CiAgICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
ZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghaW5uZXJSZXN1bHQuaXNPYmplY3QoKSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJdGVyYXRvciBy
ZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjLCB0aHJvd1Njb3BlLCBBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRl
cmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBA
IC0xNjcsNyArMTcxLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0ZSog
cwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKICAgICBK
U1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoc3RhdGUsIHN0YXRlLT5wcm9w
ZXJ0eU5hbWVzKCkuaXRlcmF0b3JTeW1ib2wpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKICAgICAKICAgICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7
CkBAIC0xNzksNyArMTgzLDcgQEAgSlNWYWx1ZSBpdGVyYXRvckZvckl0ZXJhYmxlKEV4ZWNTdGF0
ZSogcwogCiAgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzOwogICAgIEpTVmFs
dWUgaXRlcmF0b3IgPSBjYWxsKHN0YXRlLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0
aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUsIGl0ZXJhdG9y
RnVuY3Rpb25Bcmd1bWVudHMpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKIAogICAgIGlmICghaXRlcmF0b3IuaXNPYmplY3QoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJUaHJvd1Njb3BlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywyMCArNDgsMjIgQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIENhbGxCYWNrVHlwZT4KIHZvaWQgZm9yRWFjaEluSXRlcmFibGUoRXhlY1N0YXRlKiBzdGF0
ZSwgSlNWYWx1ZSBpdGVyYWJsZSwgY29uc3QgQ2FsbEJhY2tUeXBlJiBjYWxsYmFjaykKIHsKICAg
ICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBpdGVyYXRvckZvckl0ZXJhYmxl
KHN0YXRlLCBpdGVyYWJsZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoc3RhdGUsIGl0ZXJhdG9y
KTsKLSAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpIHx8IHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAobmV4dC5pc0ZhbHNlKCkgfHwgVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JW
YWx1ZShzdGF0ZSwgbmV4dCk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBjYWxsYmFjayh2bSwgc3RhdGUsIG5leHRWYWx1ZSk7Ci0gICAgICAgIGlmICh2bS5l
eGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICBpdGVyYXRvckNsb3NlKHN0YXRlLCBpdGVyYXRvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU0LDcgKzY1NCw3IEBAIEpT
VmFsdWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKICAgICB1bnNpZ25lZCBpbmRleCA9
IGdldEFycmF5TGVuZ3RoKCkgLSAxOwogICAgIC8vIExldCBlbGVtZW50IGJlIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgW1tHZXRdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50
IGluZHguCiAgICAgSlNWYWx1ZSBlbGVtZW50ID0gZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgLy8gQ2FsbCB0aGUgW1tEZWxl
dGVdXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50cyBpbmR4IGFuZCB0cnVlLgog
ICAgIGlmICghZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGV4ZWMsIGluZGV4KSkgewpAQCAt
NzA2LDcgKzcwNiw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
ICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPiBNQVhfQVJSQVlfSU5ERVgpIHsKICAgICAg
ICAgICAgIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBleGVjLCBsZW5ndGgsIHZh
bHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC03MjYsNyArNzI2LDcgQEAgdm9pZCBKU0FycmF5OjpwdXNoKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYQogICAgICAgICAKICAgICAgICAgaWYgKGxlbmd0aCA+IE1BWF9BUlJBWV9JTkRFWCkgewog
ICAgICAgICAgICAgbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXMsIGV4ZWMsIGxlbmd0
aCwgdmFsdWUsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJJbnZhbGlkIGFycmF5IGxlbmd0aCIpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTc1OCw3ICs3NTgsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhCiAgICAgICAgIAogICAgICAgICBpZiAobGVuZ3RoID4gTUFYX0FSUkFZX0lOREVY
KSB7CiAgICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywg
bGVuZ3RoLCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoIWV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmEKICAgICAgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbGVuZ3RoKCk7CiAg
ICAgICAgIGJvb2wgcHV0UmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIGlmIChhdHRlbXB0VG9JbnRl
cmNlcHRQdXRCeUluZGV4T25Ib2xlKGV4ZWMsIG9sZExlbmd0aCwgdmFsdWUsIHRydWUsIHB1dFJl
c3VsdCkpIHsKLSAgICAgICAgICAgIGlmICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgb2xkTGVu
Z3RoIDwgMHhGRkZGRkZGRnUpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYm
IG9sZExlbmd0aCA8IDB4RkZGRkZGRkZ1KQogICAgICAgICAgICAgICAgIHNldExlbmd0aChleGVj
LCBvbGRMZW5ndGggKyAxLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmEKICAgICAgICAgaWYgKHN0b3JhZ2UtPmxlbmd0aCgpID4gTUFYX0FSUkFZX0lOREVYKSB7CiAg
ICAgICAgICAgICBtZXRob2RUYWJsZSh2bSktPnB1dEJ5SW5kZXgodGhpcywgZXhlYywgc3RvcmFn
ZS0+bGVuZ3RoKCksIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgIC8vIFBlciBFUzUuMSAxNS40
LjQuNyBzdGVwIDYgJiAxNS40LjUuMSBzdGVwIDMuZC4KLSAgICAgICAgICAgIGlmICghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBhcnJheSBsZW5ndGgiKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMjU3LDYgKzEyNTcsOSBAQCB2b2lkIEpTQXJyYXk6
OmZpbGxBcmdMaXN0KEV4ZWNTdGF0ZSogZXhlCiAKIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1l
bnRzKEV4ZWNTdGF0ZSogZXhlYywgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgdW5z
aWduZWQgaSA9IG9mZnNldDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHZlY3RvcjsKICAg
ICB1bnNpZ25lZCB2ZWN0b3JFbmQ7CkBAIC0xMzIxLDcgKzEzMjQsNyBAQCB2b2lkIEpTQXJyYXk6
OmNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqCiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7
ICsraSkgewogICAgICAgICBleGVjLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpIC0gb2Zmc2V0KSA9
IGdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPnZtKCkuZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
MjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgdW5zaWduZWQgbGVuZ3RoOwogICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkpIHsKICAgICAgICAgbGVuZ3RoID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGRvY3VtZW50YXRpb24gZG9lc24ndCBzYXkg
c28sIGl0IGlzIGluIGZhY3QgY29ycmVjdCB0byBzYXkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBT
dHJ1Y3R1cmUqIGFycmF5QnVmZmVyU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRl
U3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGNvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU0FycmF5QnVmZmVy
KiByZXN1bHQgPSBKU0FycmF5QnVmZmVyOjpjcmVhdGUodm0sIGFycmF5QnVmZmVyU3RydWN0dXJl
LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQ
cm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMyArNTAsMTMgQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTbGljZSByZXF1aXJlcyBhdCBsZWFz
dCBvbmUgYXJndW1lbnQuIikpOwogICAgIAogICAgIGludDMyX3QgYmVnaW4gPSBleGVjLT5hcmd1
bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGludDMyX3QgZW5kOwogICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgPj0gMikgewogICAgICAgICBlbmQgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0gZWxz
ZQogICAgICAgICBlbmQgPSB0aGlzT2JqZWN0LT5pbXBsKCktPmJ5dGVMZW5ndGgoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlubGluZXMuaAkocmV2
aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMjQgKzcwLDI2IEBAIGlubGluZSBib29sIEpT
QXJyYXk6OmNhbkZhc3RDb3B5KFZNJiB2bSwKIAogQUxXQVlTX0lOTElORSB1bnNpZ25lZCBnZXRM
ZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IGlmIChpc0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2Jq
KS0+bGVuZ3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgbGVu
Z3RoVmFsdWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwogICAgIHJldHVybiBsZW5ndGhW
YWx1ZS50b1VJbnQzMihleGVjKTsKIH0KIAogQUxXQVlTX0lOTElORSBkb3VibGUgdG9MZW5ndGgo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChp
c0pTQXJyYXkob2JqKSkKICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+bGVu
Z3RoKCk7CiAKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIEpTVmFsdWUgbGVuZ3RoVmFs
dWUgPSBvYmotPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpOwotICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIFBOYU47CiAgICAgcmV0dXJuIGxlbmd0aFZhbHVlLnRvTGVu
Z3RoKGV4ZWMpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3Vu
ZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsOCArMTI2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBoYXNJbnN0YW5jZQog
CiBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0dXJlKFZNJiB2bSwgRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGFy
Z2V0RnVuY3Rpb24pCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdGFyZ2V0RnVuY3Rpb24tPmdldFByb3RvdHlwZSh2
bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBK
U0Z1bmN0aW9uKiB0YXJnZXRKU0Z1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4o
dGFyZ2V0RnVuY3Rpb24pOwogCkBAIC0xNTgsNiArMTU5LDcgQEAgaW5saW5lIFN0cnVjdHVyZSog
Z2V0Qm91bmRGdW5jdGlvblN0cnVjdAogCiBKU0JvdW5kRnVuY3Rpb24qIEpTQm91bmRGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogdGFyZ2V0RnVuY3Rpb24sIEpTVmFsdWUgYm91bmRUaGlzLCBKU0Fy
cmF5KiBib3VuZEFyZ3MsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgQ29uc3RydWN0RGF0YSBj
b25zdHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IEpTQzo6Z2V0
Q29uc3RydWN0RGF0YSh0YXJnZXRGdW5jdGlvbiwgY29uc3RydWN0RGF0YSk7CiAgICAgYm9vbCBj
YW5Db25zdHJ1Y3QgPSBjb25zdHJ1Y3RUeXBlICE9IENvbnN0cnVjdFR5cGU6Ok5vbmU7CkBAIC0x
NzAsNyArMTcyLDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZQog
ICAgICAgICBjYW5Db25zdHJ1Y3QgPyAoc2xvd0Nhc2UgPyBib3VuZEZ1bmN0aW9uQ29uc3RydWN0
IDogYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25Db25zdHJ1Y3QpIDogY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IsCiAgICAgICAgIG5hbWUpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSh2bSwgZXhlYywgZ2xvYmFsT2JqZWN0LCB0YXJnZXRG
dW5jdGlvbik7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBK
U0JvdW5kRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNC
b3VuZEZ1bmN0aW9uPih2bS5oZWFwKSkgSlNCb3VuZEZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3Qs
IHN0cnVjdHVyZSwgdGFyZ2V0RnVuY3Rpb24sIGJvdW5kVGhpcywgYm91bmRBcmdzKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDcgQEAgYm9vbCBKU1ZhbHVlOjpwdXRU
b1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogICAgICAgICB9CiAKICAgICAgICAgcHJvdG90eXBlID0g
b2JqLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZl
QnlJbmRleChFeGVjCiAgICAgCiAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IHN5bnRoZXNpemVQ
cm90b3R5cGUoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7Ci0gICAgICAg
IEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVChzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgYm9vbCBwdXRSZXN1
bHQgPSBmYWxzZTsKQEAgLTM4MSwxMSArMzgxLDExIEBAIEpTU3RyaW5nKiBKU1ZhbHVlOjp0b1N0
cmluZ1Nsb3dDYXNlKEV4ZWMKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7CiAgICAgSlNWYWx1ZSB2
YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIEFTU0VSVCghdmFsdWUuaXNPYmplY3Qo
KSk7CiAgICAgSlNTdHJpbmcqIHJlc3VsdCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVz
LmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw3ICs2NDIsNyBAQCBpbmxp
bmUgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSB0b1ByZWZlcnJlCiAgICAgfQogCiAgICAgU3RyaW5n
SW1wbCogaGludFN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KHZhbHVlKS0+dmFsdWUoZXhlYyku
aW1wbCgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTm9QcmVmZXJlbmNlOwogCiAgICAg
aWYgKFdURjo6ZXF1YWwoaGludFN0cmluZywgImRlZmF1bHQiKSkKQEAgLTc4NCw4ICs3ODQsOSBA
QCBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3Rk
OjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+
Ojp0eXBlIEpTVmFsdWU6OmdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCwgQ2FsbGJhY2tXaGVuTm9FeGNl
cHRpb24gY2FsbGJhY2spIGNvbnN0CiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoZXhlYy0+dm0oKSk7CiAgICAgYm9vbCBmb3VuZCA9IGdldFByb3BlcnR5U2xvdChleGVj
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJhY2soZm91bmQsIHNsb3QpOwogfQpAQCAtODk3LDYg
Kzg5OCw3IEBAIGlubGluZSBib29sIEpTVmFsdWU6OmVxdWFsKEV4ZWNTdGF0ZSogZXgKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBkbyB7CiAgICAg
ICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gdjEuYXNOdW1iZXIoKSA9PSB2Mi5hc051bWJlcigpOwpAQCAtOTI0LDcgKzkyNiw3IEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMKICAgICAgICAgICAgIGlmICh2
Mi5pc09iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB2MSA9PSB2MjsKICAgICAgICAg
ICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShleGVjKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgdjEg
PSBwMTsKICAgICAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQpAQCAt
OTM0LDcgKzkzNiw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXMK
IAogICAgICAgICBpZiAodjIuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNWYWx1ZSBwMiA9
IHYyLnRvUHJpbWl0aXZlKGV4ZWMpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB2MiA9IHAyOwogICAgICAgICAg
ICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGFWaWV3UHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNEYXRhVmll
d1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMywxNCArMTMzLDE0IEBAIEVuY29k
ZWRKU1ZhbHVlIGdldERhdGEoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJOZWVkIGF0IGxlYXN0IG9uZSBh
cmd1bWVudCAodGhlIGJ5dGVPZmZzZXQpIikpOwogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1VJbnQzMihleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAK
ICAgICBib29sIGxpdHRsZUVuZGlhbiA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGVsZW1lbnRTaXpl
ID0gc2l6ZW9mKHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUpOwogICAgIGlmIChlbGVtZW50U2l6ZSA+
IDEgJiYgZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKICAgICAgICAgbGl0dGxlRW5kaWFu
ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIH0KICAgICAKQEAgLTE4MSw3ICsxODEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBzZXRE
YXRhKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTmVlZCBhdCBsZWFzdCB0d28gYXJndW1lbnQgKHRoZSBi
eXRlT2Zmc2V0IGFuZCB2YWx1ZSkiKSk7CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvVUludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgY29u
c3QgdW5zaWduZWQgZGF0YVNpemUgPSBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSk7CkBA
IC0xOTEsMTQgKzE5MSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBzZXREYXRhKEV4ZWNTdGF0ZSogZXhl
YykKICAgICB9IHU7CiAKICAgICB1LnZhbHVlID0gdG9OYXRpdmVGcm9tVmFsdWU8QWRhcHRvcj4o
ZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIAogICAgIGJvb2wgbGl0
dGxlRW5kaWFuID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZWxlbWVudFNpemUgPSBzaXplb2YodHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSk7CiAgICAgaWYgKGVsZW1lbnRTaXplID4gMSAmJiBleGVjLT5h
cmd1bWVudENvdW50KCkgPj0gMykgewogICAgICAgICBsaXR0bGVFbmRpYW4gPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsNiArNTkyLDggQEAgU3RyaW5nIGdl
dENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIAogdm9pZCBKU0Z1bmN0aW9uOjpzZXRGdW5j
dGlvbk5hbWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CiAgICAgLy8gVGhlICJuYW1lIiBwcm9wZXJ0eSBtYXkgaGF2ZSBiZWVuIGFscmVhZHkgYmVlbiBk
ZWZpbmVkIGFzIHBhcnQgb2YgYSBwcm9wZXJ0eSBsaXN0IGluIGFuCiAgICAgLy8gb2JqZWN0IGxp
dGVyYWwgKGFuZCB0aGVyZWZvcmUgcmVpZmllZCkuCiAgICAgaWYgKGhhc1JlaWZpZWROYW1lKCkp
CkBAIC02MDgsMTAgKzYxMCwxMCBAQCB2b2lkIEpTRnVuY3Rpb246OnNldEZ1bmN0aW9uTmFtZShF
eGVjU3RhCiAgICAgICAgICAgICBuYW1lID0gbWFrZVN0cmluZygnWycsIFN0cmluZygmdWlkKSwg
J10nKTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1N0cmluZyoganNTdHIgPSB2YWx1ZS50b1N0
cmluZyhleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBu
YW1lID0ganNTdHItPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIHJlaWZ5TmFtZSh2bSwgZXhlYywgbmFtZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgICAgICB0eXBlbmFtZSBBZGFwdG9yOjpUeXBlIHZhbHVlID0gdG9OYXRpdmVGcm9t
VmFsdWU8QWRhcHRvcj4oZXhlYywganNWYWx1ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoaXNOZXV0ZXJlZCgpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDE0
ICs4OSwxNCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEdlbmVyaWNUeXBlZEFyCiAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgc3RvcmFnZTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICBpZiAobmV4
dC5pc0ZhbHNlKCkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBKU1ZhbHVlIG5leHRJ
dGVtID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgc3RvcmFnZS5hcHBlbmQobmV4dEl0
ZW0pOwpAQCAtMTA0LDEzICsxMDQsMTMgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1Y3RHZW5l
cmljVHlwZWRBcgogCiAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBzdG9yYWdlLnNpemUoKSk7CiAgICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2Uuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgaWYgKCFyZXN1bHQtPnNldEluZGV4KGV4ZWMsIGksIHN0b3JhZ2UuYXQoaSkpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICAgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMTYyLDcgKzE2Miw3IEBAIGlubGluZSBKU09iamVjdCogY29u
c3RydWN0R2VuZXJpY1R5cGVkQXIKICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwgbGVuZ3RoU2xvdCk7CiAKICAgICAgICAg
ICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jID0gb2JqZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JTeW1ib2wpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgLy8gV2Ugd291bGQgbGlr
ZSBub3QgdXNlIHRoZSBpdGVyYXRvciBhcyBpdCBpcyBwYWluZnVsbHkgc2xvdy4gRm9ydHVuYXRl
bHksIHVubGVzcwpAQCAtMTgzLDIxICsxODMsMjEgQEAgaW5saW5lIEpTT2JqZWN0KiBjb25zdHJ1
Y3RHZW5lcmljVHlwZWRBcgogCiAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJndW1lbnRz
OwogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVy
YXRvckZ1bmMsIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmd1bWVudHMpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uc3Ry
dWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3RnJvbUl0ZXJhdG9yPFZpZXdDbGFzcz4oZXhlYywgc3Ry
dWN0dXJlLCBpdGVyYXRvcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxlbmd0aCA9
IGxlbmd0aFNsb3QuaXNVbnNldCgpID8gMCA6IGxlbmd0aFNsb3QuZ2V0VmFsdWUoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KIAog
ICAgICAgICAKICAgICAgICAgVmlld0NsYXNzKiByZXN1bHQgPSBWaWV3Q2xhc3M6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgICAgICBpZiAoIXJlc3Vs
dCkgewotICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzNSw3ICsyMzUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rp
b24gPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpOwogICAgIFN0cnVjdHVyZSog
cGFyZW50U3RydWN0dXJlID0gZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpLT50eXBlZEFycmF5U3Ry
dWN0dXJlKFZpZXdDbGFzczo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4
ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBwYXJlbnRTdHJ1Y3R1cmUpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBzaXplX3QgYXJn
Q291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CkBAIC0yNTIsMTIgKzI1MiwxMiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEdlCiAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IGxlbmd0aCA9IE51bGxvcHQ7CiAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
cio+KGZpcnN0VmFsdWUpICYmIGFyZ0NvdW50ID4gMSkgewogICAgICAgICBvZmZzZXQgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICAgICBpZiAoYXJnQ291bnQgPiAyKSB7CiAgICAgICAgICAgICBsZW5ndGggPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgyKS50b1VJbnQzMihleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3
KiBzcGVjaWVzQ29uc3RydQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTVmFsdWUgY29uc3RydWN0b3IgPSBleGVtcGxhci0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKGNvbnN0cnVjdG9yLmlzVW5kZWZpbmVkKCkpCkBAIC02Miwx
NCArNjIsMTQgQEAgaW5saW5lIEpTQXJyYXlCdWZmZXJWaWV3KiBzcGVjaWVzQ29uc3RydQogICAg
IH0KIAogICAgIEpTVmFsdWUgc3BlY2llcyA9IGNvbnN0cnVjdG9yLmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuc3BlY2llc1N5bWJvbCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKHNwZWNpZXMuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIGRlZmF1bHRDb25zdHJ1Y3RvcigpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBj
b25zdHJ1Y3QoZXhlYywgc3BlY2llcywgYXJncywgInNwZWNpZXMgaXMgbm90IGEgY29uc3RydWN0
b3IiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
cmVzdWx0KSkgewpAQCAtMTQ3LDcgKzE0Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jQ29weVdpdGhp
bihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gMjIu
Mi4zLjUKQEAgLTE1NywxMyArMTU2LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Z2VuZXJpY1R5cGUKIAogICAgIGxvbmcgbGVuZ3RoID0gdGhpc09iamVjdC0+bGVuZ3RoKCk7CiAg
ICAgbG9uZyB0byA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwg
bGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgbG9u
ZyBmcm9tID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAxLCBsZW5n
dGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICBsb25nIGZp
bmFsID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChleGVjLCAyLCBsZW5ndGgs
IGxlbmd0aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAg
aWYgKGZpbmFsIDwgZnJvbSkKQEAgLTE4Myw3ICsxODIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVuY0lu
Y2x1ZGVzKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBW
aWV3Q2xhc3MqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8Vmlld0NsYXNzKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOwpAQCAtMTk4LDcgKzE5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2Vu
ZXJpY1R5cGUKICAgICBKU1ZhbHVlIHZhbHVlVG9GaW5kID0gZXhlYy0+YXJndW1lbnQoMCk7CiAK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQo
ZXhlYywgMSwgbGVuZ3RoKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0y
MDksNyArMjA3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQog
ICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihmYWxzZSkpOwogCi0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXRoaXNPYmplY3Qt
PmlzTmV1dGVyZWQoKSk7CiAKICAgICBpZiAoc3RkOjppc25hbihzdGF0aWNfY2FzdDxkb3VibGU+
KCp0YXJnZXRPcHRpb24pKSkgewpAQCAtMjMwLDcgKzIyOCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5j
SW5kZXhPZihWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
Ly8gMjIuMi4zLjEzCkBAIC0yNDUsNyArMjQyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnZW5lcmljVHlwZQogCiAgICAgSlNWYWx1ZSB2YWx1ZVRvRmluZCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAxLCBsZW5ndGgpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpT
VmFsdWUoKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpCkBAIC0yNTUsNyAr
MjUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGF1
dG8gdGFyZ2V0T3B0aW9uID0gVmlld0NsYXNzOjp0b0FkYXB0b3JOYXRpdmVGcm9tVmFsdWVXaXRo
b3V0Q29lcmNpb24odmFsdWVUb0ZpbmQpOwogICAgIGlmICghdGFyZ2V0T3B0aW9uKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKC0xKSk7Ci0gICAgQVNTRVJUKCF2bS5l
eGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIXRoaXNPYmplY3QtPmlzTmV1dGVyZWQoKSk7CiAKICAgICBmb3IgKDsgaW5kZXgg
PCBsZW5ndGg7ICsraW5kZXgpIHsKQEAgLTI2OSw3ICsyNjYsNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvRnVu
Y0pvaW4oVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFZp
ZXdDbGFzcyogdGhpc09iamVjdCA9IGpzQ2FzdDxWaWV3Q2xhc3MqPihleGVjLT50aGlzVmFsdWUo
KSk7CkBAIC0yODIsMTEgKzI3OCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdl
bmVyaWNUeXBlCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgp
OwogCiAgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJhdG9yLCBsZW5n
dGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKICAgICAgICAgICAgIGpvaW5lci5hcHBlbmQoKmV4ZWMsIHRoaXNPYmplY3Qt
PmdldEluZGV4UXVpY2tseShpKSk7Ci0gICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9pbigqZXhlYykpOwpA
QCAtMjk5LDcgKzI5NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKICAgICB9CiAKICAgICBKU1N0cmluZyogc2VwYXJhdG9yU3RyaW5nID0gc2VwYXJhdG9yVmFs
dWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgp
KQpAQCAtMzEwLDcgKzMwNiw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJp
Y1R5cGUKIHRlbXBsYXRlPHR5cGVuYW1lIFZpZXdDbGFzcz4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZ2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG9GdW5jTGFzdEluZGV4T2YoVk0mIHZt
LCBFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0vLyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIDIyLjIuMy4xNgpA
QCAtMzM4LDcgKzMzMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5
cGUKICAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb21Eb3VibGUp
OwogICAgIH0KIAotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CiAKICAgICBpZiAodGhpc09iamVjdC0+aXNOZXV0ZXJlZCgpKQpAQCAtMzQ5LDcgKzM0NCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtMSkpOwogCiAgICAgdHlwZW5hbWUgVmlld0Ns
YXNzOjpFbGVtZW50VHlwZSogYXJyYXkgPSB0aGlzT2JqZWN0LT50eXBlZFZlY3RvcigpOwotICAg
IEFTU0VSVCghdm0uZXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwogCiAgICAg
Zm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKQEAgLTQzMiw3ICs0MjcsNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3
Q2xhc3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvRnVuY1NsaWNlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjKQogewotLy8gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICAvLyAyMi4yLjMuMjYKQEAgLTQ0NSwxMCArNDM5LDEwIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZ2VuZXJpY1R5cGUKICAgICB1bnNpZ25lZCB0aGlzTGVuZ3RoID0gdGhp
c09iamVjdC0+bGVuZ3RoKCk7CiAKICAgICB1bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0aCk7Ci0gICAgaWYgKHZtLmV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xh
bXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMSwgdGhpc0xlbmd0aCwgdGhpc0xlbmd0aCk7
Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCiAgICAgaWYgKHRoaXNP
YmplY3QtPmlzTmV1dGVyZWQoKSkKQEAgLTQ2Nyw3ICs0NjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y2FsbGVlLT5nbG9iYWxPYmplY3QoKS0+dHlwZWRBcnJheVN0cnVjdHVyZShWaWV3Q2xhc3M6OlR5
cGVkQXJyYXlTdG9yYWdlVHlwZSk7CiAgICAgICAgIHJldHVybiBWaWV3Q2xhc3M6OmNyZWF0ZVVu
aW5pdGlhbGl6ZWQoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwogICAgIH0pOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICBBU1NF
UlQoIXJlc3VsdC0+aXNOZXV0ZXJlZCgpKTsKQEAgLTUxOCw3ICs1MTIsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xh
c3M+CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGdlbmVyaWNUeXBlZEFycmF5Vmlld1By
aXZhdGVGdW5jU3ViYXJyYXlDcmVhdGUoVk0mdm0sIEV4ZWNTdGF0ZSogZXhlYykKIHsKLS8vICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCiAgICAgLy8gMjIuMi4zLjIzCkBAIC01MzcsOSArNTMwLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIEFTU0VSVChleGVjLT5hcmd1bWVu
dCgwKS5pc051bWJlcigpKTsKICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmlu
ZWQoKSB8fCBleGVjLT5hcmd1bWVudCgxKS5pc051bWJlcigpKTsKICAgICB1bnNpZ25lZCBiZWdp
biA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZXhlYywgMCwgdGhpc0xlbmd0
aCk7Ci0gICAgQVNTRVJUKCF2bS5leGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgdW5zaWduZWQgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3Rh
cnRPckVuZChleGVjLCAxLCB0aGlzTGVuZ3RoLCB0aGlzTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXZt
LmV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIFJF
TEVBU0VfQVNTRVJUKCF0aGlzT2JqZWN0LT5pc05ldXRlcmVkKCkpOwogCkBAIC01NzIsNyArNTY1
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZW5lcmljVHlwZQogICAgIGFyZ3Mu
YXBwZW5kKGpzTnVtYmVyKGxlbmd0aCkpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0
cnVjdChleGVjLCBzcGVjaWVzLCBhcmdzLCAic3BlY2llcyBpcyBub3QgYSBjb25zdHJ1Y3RvciIp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CiAKICAgICBpZiAoanNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHJlc3VsdCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgotICogIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgMjAxNC0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC04MTUsMTIg
KzgxNSwxNCBAQCBpbmxpbmUgSlNHbG9iYWxPYmplY3QqIGFzR2xvYmFsT2JqZWN0KEpTCiAKIGlu
bGluZSBKU0FycmF5KiBjb25zdHJ1Y3RFbXB0eUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
dW5zaWduZWQgaW5pdGlhbExlbmd0aCA9IDAsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNWYWx1ZSgp
KQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAg
aWYgKGluaXRpYWxMZW5ndGggPj0gTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdU
SCkKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oZXhlYywgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLCBu
ZXdUYXJnZXQpOwogICAgIGVsc2UKICAgICAgICAgc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5l
d1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0
dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxvY2F0aW9uRm9yKHByb2Zp
bGUsIEpTQXJyYXk6OmNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5ndGgp
KTsKQEAgLTgzMyw4ICs4MzUsMTAgQEAgaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEVtcHR5QXJy
YXkoRXhlYwogIAogaW5saW5lIEpTQXJyYXkqIGNvbnN0cnVjdEFycmF5KEV4ZWNTdGF0ZSogZXhl
YywgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgQXJnTGlzdCYgdmFsdWVzLCBKU1ZhbHVlIG5ld1RhcmdldCA9IEpTVmFs
dWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVEdXJpbmdBbGxvY2F0aW9uKGV4
ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxlOjp1cGRhdGVMYXN0QWxsb2Nh
dGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBzdHJ1Y3R1cmUsIHZhbHVlcykp
OwogfQpAQCAtODQ2LDggKzg1MCwxMCBAQCBpbmxpbmUgSlNBcnJheSogY29uc3RydWN0QXJyYXko
RXhlY1N0YXRlCiAKIGlubGluZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUqIGV4
ZWMsIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoLCBKU1ZhbHVl
IG5ld1RhcmdldCA9IEpTVmFsdWUoKSkKIHsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvclByb2ZpbGVE
dXJpbmdBbGxvY2F0aW9uKGV4ZWMsIHByb2ZpbGUsIG5ld1RhcmdldCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBBcnJheUFsbG9jYXRpb25Qcm9maWxl
Ojp1cGRhdGVMYXN0QWxsb2NhdGlvbkZvcihwcm9maWxlLCBjb25zdHJ1Y3RBcnJheShleGVjLCBz
dHJ1Y3R1cmUsIHZhbHVlcywgbGVuZ3RoKSk7CiB9CkBAIC04NTksOCArODY1LDEwIEBAIGlubGlu
ZSBKU0FycmF5KiBjb25zdHJ1Y3RBcnJheShFeGVjU3RhdGUKIAogaW5saW5lIEpTQXJyYXkqIGNv
bnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKEV4ZWNTdGF0ZSogZXhlYywgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSogcHJvZmlsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
SlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgsIEpTVmFsdWUgbmV3VGFyZ2V0ID0gSlNW
YWx1ZSgpKQogeworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9yUHJvZmlsZUR1cmluZ0FsbG9jYXRpb24o
ZXhlYywgcHJvZmlsZSwgbmV3VGFyZ2V0KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgcmV0dXJuIEFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUxhc3RBbGxv
Y2F0aW9uRm9yKHByb2ZpbGUsIGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsIHN0
cnVjdHVyZSwgdmFsdWVzLCBsZW5ndGgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYwLDcgKzY2MCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY0UKICAgICB9CiAKICAgICBTdHJp
bmcgcyA9IHgudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgaWYgKHMuaXM4
Qml0KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0pvYi5jcHAJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSm9iLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBSZWY8TWljcm90YXNrPiBjcmVhdGVK
U0pvYihWTSYgdm0sIEpTVmFsCiAKIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBDYWxsRGF0YSBoYW5kbGVyQ2FsbERhdGE7CiAg
ICAgQ2FsbFR5cGUgaGFuZGxlckNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobV9qb2IuZ2V0KCksIGhh
bmRsZXJDYWxsRGF0YSk7CiAgICAgQVNTRVJUKGhhbmRsZXJDYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CkBAIC03MCw3ICs3Myw3IEBAIHZvaWQgSlNKb2JNaWNyb3Rhc2s6OnJ1bihFeGVjU3Rh
dGUqIGV4ZWMKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMCwgbGVuZ3RoID0gbV9hcmd1bWVu
dHMtPmxlbmd0aCgpOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkKICAgICAgICAgaGFuZGxlckFy
Z3VtZW50cy5hcHBlbmQobV9hcmd1bWVudHMtPkpTQXJyYXk6OmdldChleGVjLCBpbmRleCkpOwog
ICAgIHByb2ZpbGVkQ2FsbChleGVjLCBQcm9maWxpbmdSZWFzb246Ok1pY3JvdGFzaywgbV9qb2Iu
Z2V0KCksIGhhbmRsZXJDYWxsVHlwZSwgaGFuZGxlckNhbGxEYXRhLCBqc1VuZGVmaW5lZCgpLCBo
YW5kbGVyQXJndW1lbnRzKTsKLSAgICBleGVjLT52bSgpLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25tZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUVudmlyb25t
ZW50LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE3ICs3OCwx
OSBAQCB2b2lkIEpTTW9kdWxlRW52aXJvbm1lbnQ6OnZpc2l0Q2hpbGRyZW4oCiAKIGJvb2wgSlNN
b2R1bGVFbnZpcm9ubWVudDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBjZWxsLCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU01vZHVsZUVudmlyb25tZW50KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEpTTW9kdWxlRW52aXJvbm1lbnQqPihjZWxsKTsKICAgICBKU01vZHVsZVJlY29yZDo6
UmVzb2x1dGlvbiByZXNvbHV0aW9uID0gdGhpc09iamVjdC0+bW9kdWxlUmVjb3JkKCktPnJlc29s
dmVJbXBvcnQoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVVpZChleGVjLCBwcm9wZXJ0eU5hbWUudWlk
KCkpKTsKICAgICBpZiAocmVzb2x1dGlvbi50eXBlID09IEpTTW9kdWxlUmVjb3JkOjpSZXNvbHV0
aW9uOjpUeXBlOjpSZXNvbHZlZCkgewogICAgICAgICAvLyBXaGVuIHJlc29sdmVJbXBvcnQgcmVz
b2x2ZXMgdGhlIHJlc29sdXRpb24sIHRoZSBpbXBvcnRlZCBtb2R1bGUgZW52aXJvbm1lbnQgbXVz
dCBoYXZlIHRoZSBiaW5kaW5nLgogICAgICAgICBKU01vZHVsZUVudmlyb25tZW50KiBpbXBvcnRl
ZE1vZHVsZUVudmlyb25tZW50ID0gcmVzb2x1dGlvbi5tb2R1bGVSZWNvcmQtPm1vZHVsZUVudmly
b25tZW50KCk7CiAgICAgICAgIFByb3BlcnR5U2xvdCByZWRpcmVjdFNsb3QoaW1wb3J0ZWRNb2R1
bGVFbnZpcm9ubWVudCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0ID0gaW1wb3J0ZWRNb2R1bGVFbnZpcm9ubWVudC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25t
ZW50LCBleGVjLCByZXNvbHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKKyAgICAgICAg
Ym9vbCByZXN1bHQgPSBpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LT5tZXRob2RUYWJsZSh2bSkt
PmdldE93blByb3BlcnR5U2xvdChpbXBvcnRlZE1vZHVsZUVudmlyb25tZW50LCBleGVjLCByZXNv
bHV0aW9uLmxvY2FsTmFtZSwgcmVkaXJlY3RTbG90KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVChyZWRpcmVjdFNsb3QuaXNWYWx1ZSgpKTsK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHJlZGlyZWN0U2xvdC5nZXRWYWx1ZShleGVjLCByZXNv
bHV0aW9uLmxvY2FsTmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHJlZGlyZWN0U2xvdC5hdHRyaWJ1dGVzKCks
IHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsMTMgKzE1MiwxNSBAQCBKU0ludGVybmFsUHJvbWlzZSog
SlNNb2R1bGVMb2FkZXI6OmZldGNoCiAgICAgICAgIGRhdGFMb2coIkxvYWRlciBbZmV0Y2hdICIs
IHByaW50YWJsZU1vZHVsZUtleShleGVjLCBrZXkpLCAiXG4iKTsKIAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSgpLT5tb2R1bGVMb2FkZXJGZXRjaCkKICAgICAgICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Z2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUoKS0+bW9kdWxlTG9hZGVyRmV0Y2goZ2xvYmFsT2JqZWN0LCBl
eGVjLCB0aGlzLCBrZXksIGluaXRpYXRvcik7CiAgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKICAgICBTdHJpbmcgbW9kdWxlS2V5ID0ga2V5LnRvU3RyaW5nKGV4ZWMpLT52
YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgSlNW
YWx1ZSBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVl
KCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIGRlZmVycmVkLT5y
ZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNl
KCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVO
YW1lc3BhY2VPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
OjpKU01vZHVsZU5hbWVzcGEKIHZvaWQgSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Q6OmZpbmlzaENy
ZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNN
b2R1bGVSZWNvcmQqIG1vZHVsZVJlY29yZCwgY29uc3QgSWRlbnRpZmllclNldCYgZXhwb3J0cykK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJU
KGluaGVyaXRzKGluZm8oKSkpOwogCkBAIC03Nyw3ICs3OCw3IEBAIHZvaWQgSlNNb2R1bGVOYW1l
c3BhY2VPYmplY3Q6OmZpbmlzaENyZWEKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0
cy1pc2V4dGVuc2libGUKICAgICAvLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcv
ZWNtYS0yNjIvNi4wLyNzZWMtbW9kdWxlLW5hbWVzcGFjZS1leG90aWMtb2JqZWN0cy1wcmV2ZW50
ZXh0ZW5zaW9ucwogICAgIG1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnModGhpcywg
ZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VO
VVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKIH0KIAogdm9pZCBKU01vZHVsZU5hbWVz
cGFjZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC0xMzIsNyArMTMzLDcgQEAgYm9v
bCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdDo6Z2V0T3duUHJvcAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGZvdW5kLCBmb3VuZCk7CiAKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHRyYW1wb2xpbmVT
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAog
ICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgZmlsbGVkIHdpdGggVERaIHZhbHVlLCB0aHJvdyBh
IHJlZmVyZW5jZSBlcnJvci4KICAgICAgICAgaWYgKCF2YWx1ZSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24g
MjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBKU01vZHVsZVJlY29y
ZDo6aW5zdGFudGlhdGVEZWNsYXJhdAogICAgICAgICBKU01vZHVsZVJlY29yZCogaW1wb3J0ZWRN
b2R1bGUgPSBob3N0UmVzb2x2ZUltcG9ydGVkTW9kdWxlKGV4ZWMsIGltcG9ydEVudHJ5Lm1vZHVs
ZVJlcXVlc3QpOwogICAgICAgICBpZiAoaW1wb3J0RW50cnkuaXNOYW1lc3BhY2Uodm0pKSB7CiAg
ICAgICAgICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbmFtZXNwYWNlT2JqZWN0ID0gaW1w
b3J0ZWRNb2R1bGUtPmdldE1vZHVsZU5hbWVzcGFjZShleGVjKTsKLSAgICAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgYm9vbCBwdXRS
ZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIHN5bWJvbFRhYmxlUHV0VG91Y2hXYXRjaHBvaW50
U2V0KG1vZHVsZUVudmlyb25tZW50LCBleGVjLCBpbXBvcnRFbnRyeS5sb2NhbE5hbWUsIG5hbWVz
cGFjZU9iamVjdCwgLyogc2hvdWxkVGhyb3dSZWFkT25seUVycm9yICovIGZhbHNlLCAvKiBpZ25v
cmVSZWFkT25seUVycm9ycyAqLyB0cnVlLCBwdXRSZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjAsMTYgKzIyMCwxOCBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhlY1N0
YXRlKiBleGVjCiAgICAgLCBtX3JlcGxhY2VyQ2FsbFR5cGUoQ2FsbFR5cGU6Ok5vbmUpCiAgICAg
LCBtX2dhcChnYXAoZXhlYywgc3BhY2UuZ2V0KCkpKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmICgh
bV9yZXBsYWNlci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9yZXBs
YWNlci5hc09iamVjdCgpLT5pbmhlcml0cyhKU0FycmF5OjppbmZvKCkpKSB7CiAgICAgICAgIG1f
dXNpbmdBcnJheVJlcGxhY2VyID0gdHJ1ZTsKICAgICAgICAgSGFuZGxlPEpTT2JqZWN0PiBhcnJh
eSA9IG1fcmVwbGFjZXIuYXNPYmplY3QoKTsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9VSW50MzIo
ZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG5hbWUgPSBh
cnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgaWYgKG5hbWUuaXNPYmplY3QoKSkgewpAQCAt
MjQ4LDM2ICsyNTAsMzkgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhl
YwogCiBMb2NhbDxVbmtub3duPiBTdHJpbmdpZmllcjo6c3RyaW5naWZ5KEhhbmRsZTxVbmtub3du
PiB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChtX2V4ZWMpOwotICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc051bGwoKSk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIExvY2Fs
PFVua25vd24+KHZtLCBqc051bGwoKSk7CiAKLSAgICBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNh
bGwgZW1wdHlQcm9wZXJ0eU5hbWUobV9leGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmVtcHR5SWRl
bnRpZmllcik7Ci0gICAgb2JqZWN0LT5wdXREaXJlY3QobV9leGVjLT52bSgpLCBtX2V4ZWMtPnZt
KCkucHJvcGVydHlOYW1lcy0+ZW1wdHlJZGVudGlmaWVyLCB2YWx1ZS5nZXQoKSk7CisgICAgUHJv
cGVydHlOYW1lRm9yRnVuY3Rpb25DYWxsIGVtcHR5UHJvcGVydHlOYW1lKHZtLnByb3BlcnR5TmFt
ZXMtPmVtcHR5SWRlbnRpZmllcik7CisgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmVtcHR5SWRlbnRpZmllciwgdmFsdWUuZ2V0KCkpOwogCiAgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CiAgICAgaWYgKGFwcGVuZFN0cmluZ2lmaWVkVmFsdWUocmVzdWx0LCB2YWx1
ZS5nZXQoKSwgb2JqZWN0LCBlbXB0eVByb3BlcnR5TmFtZSkgIT0gU3RyaW5naWZ5U3VjY2VlZGVk
KQotICAgICAgICByZXR1cm4gTG9jYWw8VW5rbm93bj4obV9leGVjLT52bSgpLCBqc1VuZGVmaW5l
ZCgpKTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIExv
Y2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNOdWxsKCkpOworICAgICAgICByZXR1cm4gTG9j
YWw8VW5rbm93bj4odm0sIGpzVW5kZWZpbmVkKCkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwganNOdWxsKCkp
OwogCi0gICAgcmV0dXJuIExvY2FsPFVua25vd24+KG1fZXhlYy0+dm0oKSwganNTdHJpbmcobV9l
eGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOworICAgIHJldHVybiBMb2NhbDxVbmtub3duPih2bSwg
anNTdHJpbmcobV9leGVjLCByZXN1bHQudG9TdHJpbmcoKSkpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgU3RyaW5naWZpZXI6OnRvSlNPTihKU1ZhbHVlIHZhbHVlLCBjb25zdCBQcm9wZXJ0
eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBBU1NFUlQoIW1fZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpOworICAgIFZNJiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gdmFs
dWU7CiAgICAgCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBW
TSYgdm0gPSBtX2V4ZWMtPnZtKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICBpZiAoIW9iamVjdC0+Z2V0
UHJvcGVydHlTbG90KG1fZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dG9KU09OLCBzbG90KSkKICAg
ICAgICAgcmV0dXJuIHZhbHVlOwogCiAgICAgSlNWYWx1ZSB0b0pTT05GdW5jdGlvbiA9IHNsb3Qu
Z2V0VmFsdWUobV9leGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50b0pTT04pOwotICAgIGlmICh2bS5l
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CiAgICAgcmV0dXJuIHRvSlNPTkltcGwodmFsdWUsIHRvSlNPTkZ1
bmN0aW9uLCBwcm9wZXJ0eU5hbWUpOwogfQpAQCAtMzAxLDcgKzMwNiw3IEBAIFN0cmluZ2lmaWVy
OjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIC8vIENhbGwgdGhlIHRvSlNPTiBm
dW5jdGlvbi4KICAgICB2YWx1ZSA9IHRvSlNPTih2YWx1ZSwgcHJvcGVydHlOYW1lKTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKIAogICAgIC8vIENhbGwgdGhlIHJlcGxh
Y2VyIGZ1bmN0aW9uLgpAQCAtMzEwLDcgKzMxNSw3IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlS
ZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgYXJncy5hcHBlbmQocHJvcGVydHlOYW1lLnZhbHVl
KG1fZXhlYykpOwogICAgICAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHZhbHVlID0g
Y2FsbChtX2V4ZWMsIG1fcmVwbGFjZXIuZ2V0KCksIG1fcmVwbGFjZXJDYWxsVHlwZSwgbV9yZXBs
YWNlckNhbGxEYXRhLCBob2xkZXIsIGFyZ3MpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogICAgIH0KIApAQCAtMzI0LDcgKzMyOSw3IEBAIFN0cmlu
Z2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKIAogICAgIHZhbHVlID0gdW53cmFw
Qm94ZWRQcmltaXRpdmUobV9leGVjLCB2YWx1ZSk7CiAKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZ2lmeUZhaWxlZDsKIAogICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewpAQCAtMzc3LDE0
ICszODIsMTQgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogCiAg
ICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5KCk7CiAg
ICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKHZtLCBtX2V4ZWMsIG9iamVjdCkpOwotICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKICAgICBpZiAoIWhv
bGRlclN0YWNrV2FzRW1wdHkpCiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAK
ICAgICBkbyB7CiAgICAgICAgIHdoaWxlIChtX2hvbGRlclN0YWNrLmxhc3QoKS5hcHBlbmROZXh0
UHJvcGVydHkoKnRoaXMsIGJ1aWxkZXIpKSB7Ci0gICAgICAgICAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbV9o
b2xkZXJTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC00MzYsNiArNDQxLDggQEAgYm9vbCBTdHJpbmdp
Zmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIEFTU0VSVChtX2luZGV4IDw9IG1fc2l6
ZSk7CiAKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBzdHJpbmdpZmllci5tX2V4ZWM7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUuCiAgICAgaWYgKCFt
X2luZGV4KSB7CkBAIC00NDQsNyArNDUxLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9sZGVyOjph
cHBlbmROZXh0UHJvcAogICAgICAgICAgICAgaWYgKG1faXNKU0FycmF5KQogICAgICAgICAgICAg
ICAgIG1fc2l6ZSA9IGFzQXJyYXkobV9vYmplY3QuZ2V0KCkpLT5sZW5ndGgoKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIGV4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsKKyAgICAgICAg
ICAgICAgICBtX3NpemUgPSBtX29iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnWycpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cmluZ2lmaWVyLm1fdXNpbmdBcnJh
eVJlcGxhY2VyKQpAQCAtNDUyLDcgKzQ1OSw3IEBAIGJvb2wgU3RyaW5naWZpZXI6OkhvbGRlcjo6
YXBwZW5kTmV4dFByb3AKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFByb3Bl
cnR5TmFtZUFycmF5IG9iamVjdFByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncyk7CiAgICAgICAgICAgICAgICAgbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5TmFtZXMobV9vYmplY3QuZ2V0KCksIGV4ZWMsIG9iamVjdFByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICBtX3Byb3BlcnR5TmFtZXMgPSBvYmplY3RQcm9wZXJ0eU5hbWVzLnJlbGVhc2VEYXRhKCk7
CiAgICAgICAgICAgICB9CkBAIC00ODYsNyArNDkzLDcgQEAgYm9vbCBTdHJpbmdpZmllcjo6SG9s
ZGVyOjphcHBlbmROZXh0UHJvcAogICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1
ZShleGVjLCBpbmRleCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdmFsdWUg
PSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTUwNCw3ICs1MTEs
NyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgICAgIGlm
ICghbV9vYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdChtX29iamVjdC5n
ZXQoKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgcm9sbEJhY2tQb2ludCA9IGJ1aWxkZXIubGVuZ3RoKCk7CkBAIC02NDAsNyArNjQ3LDcg
QEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5WYWx1ZSA9IHNsb3QuZ2V0VmFsdWUobV9leGVjLCBpbmRleCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBq
c1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjU4LDcgKzY2NSw3IEBAIE5FVkVSX0lO
TElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICAgICAgYXJy
YXktPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChhcnJheSwgbV9leGVjLCBp
bmRleFN0YWNrLmxhc3QoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRleFN0YWNrLmxhc3QoKSwgZmls
dGVyZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICAgICAgICAgIGluZGV4U3Rh
Y2subGFzdCgpKys7CiAgICAgICAgICAgICAgICAgZ290byBhcnJheVN0YXJ0VmlzaXRNZW1iZXI7
CkBAIC02NzUsNyArNjgyLDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgICAgICAgICAgICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RhY2suYXBwZW5kKFByb3BlcnR5TmFtZUFycmF5KG1fZXhlYywgUHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncykpOwogICAgICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIG1fZXhlYywgcHJvcGVydHlTdGFjay5s
YXN0KCksIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
bV9leGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgb2JqZWN0U3RhcnRWaXNpdE1lbWJlcjoKQEAgLTY5
OCw3ICs3MDUsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAg
ICAgICAgICAgICAgICAgICAgIGluVmFsdWUgPSBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgICAg
ICAgICAgLy8gVGhlIGhvbGRlciBtYXkgYmUgbW9kaWZpZWQgYnkgdGhlIHJldml2ZXIgZnVuY3Rp
b24gc28gYW55IGxvb2t1cCBtYXkgdGhyb3cKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoaW5WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC03MTcsNyArNzI0LDcgQEAgTkVW
RVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgICAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgbV9leGVjLCBw
cm9wKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+
bWV0aG9kVGFibGUoKS0+cHV0KG9iamVjdCwgbV9leGVjLCBwcm9wLCBmaWx0ZXJlZFZhbHVlLCBz
bG90KTsKLSAgICAgICAgICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgICAgICAgICAgICAgaW5kZXhTdGFjay5sYXN0
KCkrKzsKICAgICAgICAgICAgICAgICBnb3RvIG9iamVjdFN0YXJ0VmlzaXRNZW1iZXI7CkBAIC03
NTQsNyArNzYxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU09OUHJvdG9GdQog
ICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkpTT04ucGFy
c2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciIpKSk7CiAgICAgSlNTdHJpbmc6OlNh
ZmVWaWV3IHNvdXJjZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKIAogICAgIEpTVmFsdWUgdW5maWx0ZXJlZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUxLDYgKzM1MSw3IEBAIGJvb2wgb3JkaW5hcnlTZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywg
SlMKICAgICAvLyAzLiBFUzYgUHJveHkuCiAKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogY3Vy
cmVudCA9IG9iamVjdDsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3Igb3duRGVzY3JpcHRvcjsKICAg
ICB3aGlsZSAodHJ1ZSkgewpAQCAtMzYyLDEzICszNjMsMTMgQEAgYm9vbCBvcmRpbmFyeVNldFNs
b3coRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgICAgIC8vIDkuMS45LjEtMiBMZXQgb3duRGVz
YyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKFApLgogICAgICAgICBib29sIG93bkRlc2NyaXB0
b3JGb3VuZCA9IGN1cnJlbnQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0
eU5hbWUsIG93bkRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9u
KCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmICghb3duRGVzY3JpcHRvckZvdW5kKSB7CiAg
ICAgICAgICAgICAvLyA5LjEuOS4xLTMtYSBMZXQgcGFyZW50IGJlID8gTy5bW0dldFByb3RvdHlw
ZU9mXV0oKS4KICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gY3VycmVudC0+Z2V0UHJv
dG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gOS4xLjkuMS0zLWIgSWYg
cGFyZW50IGlzIG5vdCBudWxsLCB0aGVuCkBAIC00MDAsNyArNDAxLDcgQEAgYm9vbCBvcmRpbmFy
eVNldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICBKU09iamVjdCogcmVjZWl2ZXJP
YmplY3QgPSBhc09iamVjdChyZWNlaXZlcik7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBl
eGlzdGluZ0Rlc2NyaXB0b3I7CiAgICAgICAgIGJvb2wgZXhpc3RpbmdEZXNjcmlwdG9yRm91bmQg
PSByZWNlaXZlck9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgZXhpc3RpbmdEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyA5LjEuOS4xLTQtZCBJZiBleGlzdGlu
Z0Rlc2NyaXB0b3IgaXMgbm90IHVuZGVmaW5lZCwgdGhlbgpAQCAtMTI5Miw3ICsxMjkzLDcgQEAg
Ym9vbCBKU09iamVjdDo6c2V0UHJvdG90eXBlV2l0aEN5Y2xlQ2hlYwogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGhpcy0+aXNFeHRlbnNpYmxlKGV4ZWMp
OwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkg
ewpAQCAtMTU1Miw3ICsxNTUzLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxs
VG9QcmltaQogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAg
IGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgaWYgKGZ1bmN0aW9u
LmlzVW5kZWZpbmVkKCkgJiYgbW9kZSA9PSBUeXBlSGludE1vZGU6OlRha2VzSGludCkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTE1ODAsNyArMTU4MSw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgY2FsbFRvUHJpbWkKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChl
eGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
b2JqZWN0KSwgY2FsbEFyZ3MpOwogICAgIEFTU0VSVCghcmVzdWx0LmlzR2V0dGVyU2V0dGVyKCkp
OwotICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCk7CiAgICAgaWYgKHJl
c3VsdC5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gbW9kZSA9PSBUeXBlSGludE1vZGU6OkRv
ZXNOb3RUYWtlSGludCA/IEpTVmFsdWUoKSA6IHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlN5bWJvbC50b1ByaW1pdGl2ZSByZXR1cm5lZCBhbiBvYmplY3QiKSk7CkBA
IC0xNjE4LDcgKzE2MTksNyBAQCBKU1ZhbHVlIEpTT2JqZWN0OjpvcmRpbmFyeVRvUHJpbWl0aXZl
KEV4CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCi0gICAgQVNTRVJUKCFleGVj
LT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTm8gZGVm
YXVsdCB2YWx1ZSIpKTsKIH0KQEAgLTE3MTgsNyArMTcxOSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
dmFsdWUpOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIEpTVmFsdWUgb2JqZWN0VmFsdWUg
PSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghb2JqZWN0VmFsdWUuaXNP
YmplY3QoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NDAsMTIgKzE3NDEsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcml2YQogdm9pZCBKU09iamVj
dDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1vZGUpOwotICAgIGlmIChVTkxJS0VM
WSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNWYWx1ZSBuZXh0UHJvdG8gPSBvYmplY3QtPmdldFBy
b3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKG5leHRQcm90by5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTc1NywxMCArMTc1
OSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBwcm90b3R5cGUtPm1ldGhvZFRhYmxlKHZt
KS0+Z2V0T3duUHJvcGVydHlOYW1lcyhwcm90b3R5cGUsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIG1v
ZGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBuZXh0UHJvdG8gPSBwcm90b3R5cGUtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChuZXh0UHJv
dG8uaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NTgsMTYgKzE4NjAsMjAgQEAg
dm9pZCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbQogCiBkb3VibGUgSlNPYmpl
Y3Q6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U1ZhbHVlIHByaW1pdGl2ZSA9IHRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51bWJlcik7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAvLyBzaG91bGQgYmUgcGlja2VkIHVwIHNvb24gaW4g
Tm9kZXMuY3BwCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgLy8gc2hvdWxk
IGJlIHBpY2tlZCB1cCBzb29uIGluIE5vZGVzLmNwcAogICAgICAgICByZXR1cm4gMC4wOwogICAg
IHJldHVybiBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiB9CiAKIEpTU3RyaW5nKiBKU09iamVj
dDo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpT
VmFsdWUgcHJpbWl0aXZlID0gdG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzRW1wdHlTdHJpbmcoZXhlYyk7CiAgICAgcmV0dXJuIHBy
aW1pdGl2ZS50b1N0cmluZyhleGVjKTsKIH0KQEAgLTMwNzYsMTUgKzMwODIsMTggQEAgYm9vbCB2
YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKAogCiBib29sIEpTT2JqZWN0OjpkZWZp
bmVPd25Ob25JbmRleFByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29sIHRocm93
RXhjZXB0aW9uKQogeworICAgIFZNJiB2bSAgPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gVHJhY2sgb24gdGhlIGds
b2JhbGRhdGEgdGhhdCB3ZSdyZSBpbiBkZWZpbmUgcHJvcGVydHkuCiAgICAgLy8gQ3VycmVudGx5
IERlZmluZU93blByb3BlcnR5IHVzZXMgZGVsZXRlIHRvIHJlbW92ZSBwcm9wZXJ0aWVzIHdoZW4g
dGhleSBhcmUgYmVpbmcgcmVwbGFjZWQKICAgICAvLyAocGFydGljdWxhcmx5IHdoZW4gY2hhbmdp
bmcgYXR0cmlidXRlcyksIGhvd2V2ZXIgZGVsZXRlIHdvbid0IGFsbG93IG5vbi1jb25maWd1cmFi
bGUgKGkuZS4KICAgICAvLyBEb250RGVsZXRlKSBwcm9wZXJ0aWVzIHRvIGJlIGRlbGV0ZWQuIEZv
ciBub3csIHdlIGNhbiB1c2UgdGhpcyBmbGFnIHRvIG1ha2UgdGhpcyB3b3JrLgotICAgIFZNOjpE
ZWxldGVQcm9wZXJ0eU1vZGVTY29wZSBzY29wZShleGVjLT52bSgpLCBWTTo6RGVsZXRlUHJvcGVy
dHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpOworICAgIFZNOjpEZWxldGVQcm9wZXJ0eU1vZGVT
Y29wZSBzY29wZSh2bSwgVk06OkRlbGV0ZVByb3BlcnR5TW9kZTo6SWdub3JlQ29uZmlndXJhYmxl
KTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsKICAgICBib29sIGlzQ3VycmVudERl
ZmluZWQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJy
ZW50KTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSA9IHRoaXMtPmlzRXh0ZW5zaWJsZShleGVjKTsK
LSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiB2YWxpZGF0ZUFuZEFwcGx5UHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHRoaXMsIHByb3Bl
cnR5TmFtZSwgaXNFeHRlbnNpYmxlLCBkZXNjcmlwdG9yLCBpc0N1cnJlbnREZWZpbmVkLCBjdXJy
ZW50LCB0aHJvd0V4Y2VwdGlvbik7CiB9CkBAIC0zMTg0LDEyICszMTkzLDEzIEBAIHZvaWQgSlNP
YmplY3Q6OmdldFN0cnVjdHVyZVByb3BlcnR5TmFtZXMKIHZvaWQgSlNPYmplY3Q6OmdldEdlbmVy
aWNQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKG1vZGUsIEpTT2Jq
ZWN0UHJvcGVydGllc01vZGU6OkV4Y2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEpTVmFsdWUgbmV4dFByb3RvID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0s
IGV4ZWMpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChuZXh0UHJv
dG8uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMyMDEsMTAgKzMyMTEsMTAgQEAgdm9p
ZCBKU09iamVjdDo6Z2V0R2VuZXJpY1Byb3BlcnR5TmFtZXMoSgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgcHJvdG90eXBlLT5tZXRob2RUYWJsZSh2bSktPmdldE93blBy
b3BlcnR5TmFtZXMocHJvdG90eXBlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbmV4
dFByb3RvID0gcHJvdG90eXBlLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICBpZiAo
VU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAobmV4dFByb3RvLmlz
TnVsbCgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjIwLDcgKzMyMzAsNyBAQCBKU1ZhbHVl
IEpTT2JqZWN0OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBlCiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgSlNWYWx1ZSBtZXRob2QgPSBnZXQoZXhlYywgaWRl
bnQpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGlm
ICghbWV0aG9kLmlzQ2VsbCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDE2ICs0MCwxNiBAQCB2b2lkIGNyZWF0ZUxpc3RGcm9tQXJyYXlMaWtlKEV4ZWNTdGF0ZSog
CiAgICAgCiAgICAgVmVjdG9yPEpTVmFsdWU+IHJlc3VsdDsKICAgICBKU1ZhbHVlIGxlbmd0aFBy
b3BlcnR5ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICBkb3VibGUgbGVuZ3RoQXNEb3VibGUgPSBs
ZW5ndGhQcm9wZXJ0eS50b0xlbmd0aChleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFJFTEVBU0VfQVNTRVJUKGxlbmd0aEFzRG91YmxlID49IDAuMCAmJiBsZW5ndGhBc0RvdWJsZSA9
PSBzdGQ6OnRydW5jKGxlbmd0aEFzRG91YmxlKSk7CiAgICAgdWludDY0X3QgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0aEFzRG91YmxlKTsKICAgICBmb3IgKHVpbnQ2NF90IGlu
ZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgSlNWYWx1ZSBuZXh0
ID0gYXJyYXlMaWtlVmFsdWUuZ2V0KGV4ZWMsIGluZGV4KTsKLSAgICAgICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgUnVudGltZVR5cGUgdHlwZSA9IHJ1bnRp
bWVUeXBlRm9yVmFsdWUobmV4dCk7CkBAIC05Niw4ICs5NiwxMCBAQCBBTFdBWVNfSU5MSU5FIHR5
cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhCiB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5O
b0V4Y2VwdGlvbj4KIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJh
Y2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIEpTT2JqZWN0Ojpn
ZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uIGNhbGxiYWNrKSBj
b25zdAogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIGJvb2wgZm91bmQgPSBjb25zdF9jYXN0PEpTT2JqZWN0
Kj4odGhpcyktPmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICByZXR1cm4gY2FsbGJh
Y2soZm91bmQsIHNsb3QpOwogfQpAQCAtMTA1LDYgKzEwNyw3IEBAIEFMV0FZU19JTkxJTkUgdHlw
ZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2EKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byYgc3RydWN0dXJlSURUYWJs
ZSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0
aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0
UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKQEAgLTExMiwxNCArMTE1LDE0IEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICAgICAgU3RydWN0
dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJ
RCgpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKFVOTElLRUxZKHZtLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7CiAgICAgICAg
IGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5
cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQogICAgICAgICAg
ICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVj
KTsKLSAgICAgICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCkBAIC0xMzQsNiAr
MTM3LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAgIEFT
U0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIAogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8m
IHN0cnVjdHVyZUlEVGFibGUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKTsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rp
b25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CkBAIC0x
NDUsNyArMTQ5LDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+
bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChV
TkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKQEAgLTE1Myw3ICsxNTcsNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBz
dHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
cHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwotICAgICAgICAgICAg
aWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RydWN0dXJlKiBwcm9taXNlU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+cHJvbWlzZVN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTUHJvbWlz
ZSogcHJvbWlzZSA9IEpTUHJvbWlzZTo6Y3JlYXRlKHZtLCBwcm9taXNlU3RydWN0dXJlKTsKICAg
ICBwcm9taXNlLT5pbml0aWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXhlYy0+YXJndW1lbnQo
MCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAgcHJpdmF0ZToKIGlubGluZSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogYmFzZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHVpbnQzMl90IGluZGV4ZWRMZW5ndGgg
PSBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdldEVudW1lcmFibGVMZW5ndGgoZXhlYywgYmFzZSk7
CiAKQEAgLTExOSwxOCArMTIwLDE4IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IHByb3BlcnQKIAogICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWlja2x5
Rm9yRW51bWVyYXRpb24oKSAmJiBpbmRleGVkTGVuZ3RoID09IGJhc2UtPmdldEFycmF5TGVuZ3Ro
KCkpIHsKICAgICAgICAgYmFzZS0+bWV0aG9kVGFibGUodm0pLT5nZXRTdHJ1Y3R1cmVQcm9wZXJ0
eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSBw
cm9wZXJ0eU5hbWVzLnNpemUoKTsKIAogICAgICAgICBiYXNlLT5tZXRob2RUYWJsZSh2bSktPmdl
dEdlbmVyaWNQcm9wZXJ0eU5hbWVzKGJhc2UsIGV4ZWMsIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSgpKTsKLSAgICAgICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAg
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IEdlbmVyaWMgcHJvcGVydHkgbmFtZXMgdmVjdG9yIGNvbnRhaW5zIGFsbCBpbmRleGVkIHByb3Bl
cnR5IG5hbWVzLgogICAgICAgICAvLyBTbyBkaXNhYmxlIGluZGV4ZWQgcHJvcGVydHkgZW51bWVy
YXRpb24gcGhhc2UgYnkgc2V0dGluZyB8aW5kZXhlZExlbmd0aHwgdG8gMC4KICAgICAgICAgaW5k
ZXhlZExlbmd0aCA9IDA7CiAgICAgICAgIGJhc2UtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0UHJvcGVy
dHlOYW1lcyhiYXNlLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUsOCArNTUsMTAgQEAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVJdAogCiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNP
YmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZXhlYywgaXRl
cmF0ZWRPYmplY3QpOwotICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgcmV0dXJuIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShleGVjLCBzdHJ1
Y3R1cmUsIGl0ZXJhdGVkT2JqZWN0LCBlbnVtZXJhdG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDE2ICsyMDAsMTggQEAgSlNPYmplY3QqIEpTU2NvcGU6Om9iamVjdEF0U2NvcGUoSlNTY29w
ZQogLy8gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJs
ZSBiZWNvbWVzIGZhbHNlLgogc3RhdGljIGlubGluZSBib29sIGlzVW5zY29wYWJsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGlmIChzY29wZS0+dHlwZSgpICE9
IFdpdGhTY29wZVR5cGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdW5z
Y29wYWJsZXMgPSBvYmplY3QtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5zY29w
YWJsZXNTeW1ib2wpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAoIXVuc2NvcGFibGVzLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBKU1ZhbHVlIGJsb2NrZWQgPSBqc0Nhc3Q8SlNPYmplY3QqPih1bnNjb3BhYmxlcyktPmdldChl
eGVjLCBpZGVudCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgcmV0dXJuIGJsb2NrZWQudG9Cb29sZWFuKGV4ZWMpOwpAQCAtMjE4LDYgKzIyMCw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc1Vuc2NvcGFibGUoRXhlY1N0YXQKIEpTT2JqZWN0KiBKU1Njb3Bl
OjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgU2NvcGVDaGFpbkl0ZXJhdG9yIGVu
ZCA9IHNjb3BlLT5lbmQoKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXQgPSBzY29wZS0+YmVn
aW4oKTsKICAgICB3aGlsZSAoMSkgewpAQCAtMjQwLDcgKzI0Myw3IEBAIEpTT2JqZWN0KiBKU1Nj
b3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXgKICAgICAgICAgaWYgKG9iamVjdC0+aGFzUHJvcGVy
dHkoZXhlYywgaWRlbnQpKSB7CiAgICAgICAgICAgICBpZiAoIWlzVW5zY29wYWJsZShleGVjLCBz
Y29wZSwgb2JqZWN0LCBpZGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpLCAiV2hl
biBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgcmVzdWx0IG9mIGlzVW5zY29wYWJsZSBiZWNvbWVz
IGZhbHNlIik7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFX1VOVVNFRCh0aHJvd1Nj
b3BlLCAhdGhyb3dTY29wZS5leGNlcHRpb24oKSwgIldoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycywg
dGhlIHJlc3VsdCBvZiBpc1Vuc2NvcGFibGUgYmVjb21lcyBmYWxzZSIpOwogICAgICAgICB9CiAg
ICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNw
cAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCwxMSBAQCB2b2lkIEpTU3RyaW5n
OjpkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsCiAKIGJvb2wgSlNTdHJpbmc6OmVxdWFsU2xvd0Nh
c2UoRXhlY1N0YXRlKiBleGVjLCBKU1N0cmluZyogb3RoZXIpIGNvbnN0CiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgU3RyaW5nIHN0cjEgPSB2YWx1ZShleGVjKTsKICAgICBTdHJpbmcgc3RyMiA9IG90aGVy
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiBXVEY6OmVxdWFsKCpzdHIxLmltcGwoKSwgKnN0cjIuaW1wbCgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5lci5jcHAJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
Sm9pbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIEpTVmFsdWUgSlNT
dHJpbmdKb2luZXI6OmpvaW4oRXhlY1N0YXRlJiAKICAgICBBU1NFUlQobV9zdHJpbmdzLnNpemUo
KSA8PSBtX3N0cmluZ3MuY2FwYWNpdHkoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBqb2lu
ZWRMZW5ndGgoc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAogICAgIGlmICghbGVuZ3RoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzIsNiArNTcyLDggQEAgVG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhl
cgogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENo
YXJUeXBlPjo6cGFyc2UoUGFyc2VyU3RhdGUgaW5pdGlhbFN0YXRlKQogeworICAgIFZNJiB2bSA9
IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgUGFyc2VyU3RhdGUgc3RhdGUgPSBpbml0aWFsU3RhdGU7CiAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgb2JqZWN0U3RhY2s7CiAgICAgSlNWYWx1ZSBsYXN0VmFsdWU7CkBAIC01ODMsNyAr
NTg1LDcgQEAgSlNWYWx1ZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6cGFyc2UoUAogICAgICAg
ICAgICAgc3RhcnRQYXJzZUFycmF5OgogICAgICAgICAgICAgY2FzZSBTdGFydFBhcnNlQXJyYXk6
IHsKICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
bV9leGVjLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgICAg
ICBvYmplY3RTdGFjay5hcHBlbmQoYXJyYXkpOwogICAgICAgICAgICAgfQpAQCAtNjgxLDcgKzY4
Myw3IEBAIEpTVmFsdWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OnBhcnNlKFAKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qob2JqZWN0
U3RhY2subGFzdCgpKTsKICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWUgaWRlbnQgPSBpZGVu
dGlmaWVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChtX21vZGUgIT0gU3RyaWN0
SlNPTiAmJiBpZGVudCA9PSBtX2V4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVBy
b3RvKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSAhPSBTdHJpY3RKU09OICYmIGlkZW50
ID09IHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bykgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoIXZpc2l0ZWRVbmRlcnNjb3JlUHJvdG8uYWRkKG9iamVjdCkuaXNOZXdFbnRyeSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJzZUVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiQXR0ZW1wdGVkIHRvIHJlZGVmaW5lIF9fcHJvdG9fXyBwcm9wZXJ0eSIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKQEAgLTY5Myw3ICs2OTUsNyBAQCBK
U1ZhbHVlIExpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpwYXJzZShQCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KGlkZW50KSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgobV9leGVjLCBpbmRl
eC52YWx1ZSgpLCBsYXN0VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChtX2V4ZWMtPnZtKCksIGlkZW50LCBs
YXN0VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBv
YmplY3QtPnB1dERpcmVjdCh2bSwgaWRlbnQsIGxhc3RWYWx1ZSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGlkZW50aWZpZXJTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fbGV4ZXIuY3VycmVudFRva2VuKCktPnR5cGUgPT0gVG9rQ29tbWEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG1hcCk7CiAKICAgICBKU1ZhbHVlIGFkZGVyRnVuY3Rpb24gPSBtYXAtPkpTT2Jq
ZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNldCk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBDYWxs
RGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkBAIC04MCwxNyArODAsMTggQEAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKSk7CiAKICAgICBmb3JFYWNoSW5JdGVy
YWJsZShleGVjLCBpdGVyYWJsZSwgWyZdKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IG5leHRJdGVtKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICAgICAgaWYgKCFuZXh0SXRlbS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAogICAgICAgICBKU1ZhbHVlIGtleSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oMCkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG5leHRJdGVtLmdldChleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oMSkpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjIsOCArMTYyLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jQ2x6MzIoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVpbnQzMl90IHZhbHVlID0gZXhlYy0+YXJn
dW1lbnQoMCkudG9VSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZShjbHozMih2YWx1ZSkpKTsKIH0KQEAgLTE4NSwxMyArMTg3LDE1IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBtYXRoUHJvdG9GdW5jSHlwb3QoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IHVuc2lnbmVkIGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKICAgICBkb3VibGUg
bWF4ID0gMDsKICAgICBWZWN0b3I8ZG91YmxlLCA4PiBhcmdzOwogICAgIGFyZ3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShhcmdzQ291bnQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cmdzQ291bnQ7ICsraSkgewogICAgICAgICBhcmdzLnVuY2hlY2tlZEFwcGVuZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgICAgICBpZiAo
c3RkOjppc2luZihhcmdzW2ldKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNEb3VibGVOdW1iZXIoK3N0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkp
OwpAQCAtMjkyLDggKzI5NiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQ
cm90b0Z1CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY0lNdWwo
RXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIGludDMyX3QgbGVmdCA9IGV4ZWMt
PmFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIGludDMyX3QgcmlnaHQgPSBleGVjLT5hcmd1
bWVudCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIobGVmdCAqIHJpZ2h0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
b2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZUxvYWRlclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMSArMTEyLDExIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBjb25zdCBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTdHJpbmcgc291cmNlID0gZXhl
Yy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgU291
cmNlQ29kZSBzb3VyY2VDb2RlID0gbWFrZVNvdXJjZShzb3VyY2UsIG1vZHVsZUtleS5pbXBsKCkp
OwpAQCAtMTQyLDEyICsxNDIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlclByb3Rv
dHlwZVJlcXVlc3RlZE1vZHVsZXMoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQgPSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVj
b3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIGlmICghbW9kdWxlUmVjb3JkKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0
cikpOwogCiAgICAgSlNBcnJheSogcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBu
dWxscHRyLCBtb2R1bGVSZWNvcmQtPnJlcXVlc3RlZE1vZHVsZXMoKS5zaXplKCkpOwotICAgIGlm
IChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIHNpemVfdCBpID0gMDsKICAgICBmb3IgKGF1dG8mIGtleSA6IG1vZHVsZVJlY29yZC0+cmVx
dWVzdGVkTW9kdWxlcygpKQpAQCAtMTU4LDYgKzE2MCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbW9kdWxlTG9hZGUKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1
bGVMb2FkZXJQcm90b3R5cGVNb2R1bGVEZWNsYXJhdGlvbkluc3RhbnRpYXRpb24oRXhlY1N0YXRl
KiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTTW9kdWxlUmVjb3JkKiBtb2R1bGVSZWNvcmQg
PSBqc0R5bmFtaWNDYXN0PEpTTW9kdWxlUmVjb3JkKj4oZXhlYy0+YXJndW1lbnQoMCkpOwogICAg
IGlmICghbW9kdWxlUmVjb3JkKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwpAQCAtMTY2LDcgKzE3MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbW9kdWxlTG9hZGUKICAgICAgICAgZGF0YUxvZygiTG9hZGVyIFtsaW5rXSAiLCBtb2R1bGVS
ZWNvcmQtPm1vZHVsZUtleSgpLCAiXG4iKTsKIAogICAgIG1vZHVsZVJlY29yZC0+bGluayhleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDkgKzYzLDExIEBAIHZvaWQgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHIK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0
aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFN0cnVjdHVyZSog
ZXJyb3JTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVy
ZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwganNDYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iq
PihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgQVNTRVJUKGVycm9yU3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZh
bHNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDkgKzg1LDExIEBAIHZvaWQgTnVtYmVyQ29uc3RydWN0b3I6OmZpbmlzaENyZWF0aW9uKFYKIC8v
IEVDTUEgMTUuNy4xCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1
Y3RXaXRoTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
ICAgIGRvdWJsZSBuID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9OdW1iZXIoZXhlYykgOiAwOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bnVtYmVyT2JqZWN0U3RydWN0
dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAKICAgICBOdW1iZXJPYmplY3QqIG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRl
KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsOCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKU09i
amVjdCogY29uc3RydWN0CiB7CiAgICAgT2JqZWN0Q29uc3RydWN0b3IqIG9iamVjdENvbnN0cnVj
dG9yID0ganNDYXN0PE9iamVjdENvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpOwogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBvYmplY3RDb25zdHJ1Y3Rvci0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgbmV3
VGFyZ2V0IGNvbmRpdGlvbiBpbiB0aGlzIGNhbGxlciBzaWRlIGluc3RlYWQgb2YgSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2lkZS4KICAgICAvLyBTaW5jZSBpZiB3
ZSBmb3VuZCB0aGlzIGNvbmRpdGlvbiBpcyBtZXQsIHdlIHNob3VsZCBub3QgZmFsbCBpbnRvIHRo
ZSB0eXBlIGNvbnZlcnNpb24gaW4gdGhlIHN0ZXAgMy4KQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU09iamVjdCogY29uc3RydWN0CiAgICAgaWYgKG5ld1RhcmdldCAm
JiBuZXdUYXJnZXQgIT0gb2JqZWN0Q29uc3RydWN0b3IpIHsKICAgICAgICAgLy8gYS4gUmV0dXJu
ID8gT3JkaW5hcnlDcmVhdGVGcm9tQ29uc3RydWN0b3IoTmV3VGFyZ2V0LCAiJU9iamVjdFByb3Rv
dHlwZSUiKS4KICAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBuZXdUYXJnZXQsIGdsb2JhbE9i
amVjdC0+b2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3IoKSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYywgb2JqZWN0U3RydWN0dXJlKTsKICAgICB9CkBAIC0yMTEs
OCArMjEzLDEwIEBAIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRQcm90b3R5cGVPZigKIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlw
ZU9mKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldFByb3RvdHlwZU9mKGV4ZWMsIG9iamVjdCkp
OwogfQpAQCAtMjMxLDcgKzIzNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2Jq
ZWN0Q29uc3QKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IG9iamVjdFZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdFZhbHVlKTsKIAog
ICAgIGlmICghY2hlY2tQcm90b1NldHRlckFjY2Vzc0FsbG93ZWQoZXhlYywgb2JqZWN0KSkgewpA
QCAtMjQxLDE2ICsyNDUsMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogCiAgICAgYm9vbCBzaG91bGRUaHJvd0lmQ2FudFNldCA9IHRydWU7CiAgICAgYm9vbCBk
aWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJvdG9WYWx1
ZSwgc2hvdWxkVGhyb3dJZkNhbnRTZXQpOwotICAgIEFTU0VSVF9VTlVTRUQoZGlkU2V0UHJvdG90
eXBlLCB2bS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUpOworICAgIEFTU0VSVF9VTlVT
RUQoZGlkU2V0UHJvdG90eXBlLCBzY29wZS5leGNlcHRpb24oKSB8fCBkaWRTZXRQcm90b3R5cGUp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0VmFsdWUpOwogfQogCiBKU1ZhbHVl
IG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGlmICgh
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBkZXNj
cmlwdG9yKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNvbnN0
cnVjdE9iamVjdEZyb21Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7CkBAIC0y
NjEsMTkgKzI2NywyMSBAQCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlE
CiAKIEpTVmFsdWUgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBQcm9w
ZXJ0eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NB
bmRTeW1ib2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERv
bnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgb2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0
aWVzTW9kZTo6SW5jbHVkZSkpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNPYmplY3QqIGRlc2NyaXB0
b3JzID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eU5hbWUgOiBwcm9w
ZXJ0aWVzKSB7CiAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgICAg
ICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBpZiAoIWRpZEdldERl
c2NyaXB0b3IpCkBAIC0yODUsNyArMjkzLDcgQEAgSlNWYWx1ZSBvYmplY3RDb25zdHJ1Y3Rvckdl
dE93blByb3BlcnR5RAogCiAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGRlc2NyaXB0b3Jz
KTsKICAgICAgICAgZGVzY3JpcHRvcnMtPnB1dE93bkRhdGFQcm9wZXJ0eU1heUJlSW5kZXgoZXhl
YywgcHJvcGVydHlOYW1lLCBmcm9tRGVzY3JpcHRvciwgc2xvdCk7Ci0gICAgICAgIEFTU0VSVCgh
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKICAgICB9CiAKICAgICByZXR1cm4gZGVzY3JpcHRvcnM7CkBAIC0yOTMsMTkgKzMwMSwyMyBA
QCBKU1ZhbHVlIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlECiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBleGVjLT5hcmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShvYmplY3RDb25zdHJ1Y3RvckdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihleGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yR2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhF
eGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGV4
ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUob2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGV4ZWMsIG9i
amVjdCkpOwogfQpAQCAtMzEzLDggKzMyNSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0
eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwogfQpAQCAtMzIyLDgg
KzMzNiwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBG
SVhNRTogVXNlIHRoZSBlbnVtZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgb2JqZWN0Q29uc3RydWN0b3JHZXRPd25Qcm9wZXJ0eVN5bWJvbHMoRXhlY1N0YXRlKiBl
eGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5hcmd1bWVu
dCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Qcm9wZXJ0
eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTeW1ib2xzLCBEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CiB9CkBAIC0zMzEsMTYgKzM0NywyMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAvLyBGSVhNRTogVXNlIHRoZSBlbnVt
ZXJhdGlvbiBjYWNoZS4KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JLZXlzKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCog
b2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob3duUHJvcGVydHlLZXlzKGV4ZWMsIG9iamVjdCwgUHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQogCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG93bkVudW1lcmFibGVQcm9wZXJ0eUtleXMoRXhlY1N0
YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT5h
cmd1bWVudCgwKS50b09iamVjdChleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvd25Q
cm9wZXJ0eUtleXMoZXhlYywgb2JqZWN0LCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3lt
Ym9scywgRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwogfQpAQCAtMzYwLDQwICsz
ODAsNDAgQEAgYm9vbCB0b1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZQogCiAgICAg
aWYgKGRlc2NyaXB0aW9uLT5oYXNQcm9wZXJ0eShleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZW51bWVyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlc2NyaXB0aW9uLT5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmVudW1lcmFibGUpOwotICAgICAgICBpZiAodm0u
ZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0RW51bWVyYWJsZSh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
fSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRl
c2NyaXB0aW9uLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbmZpZ3VyYWJsZSk7
Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVzYy5z
ZXRDb25maWd1cmFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVsc2UgaWYgKHZt
LmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVlIHZhbHVlOwogICAgIGlmIChk
ZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVl
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRlc2Muc2V0VmFsdWUodmFsdWUpOwotICAgIH0gZWxzZSBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChkZXNjcmlwdGlvbi0+aGFzUHJv
cGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLndyaXRhYmxlKSkgewogICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkud3JpdGFibGUpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGRlc2Muc2V0V3JpdGFibGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKLSAgICB9IGVs
c2UgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoZGVzY3JpcHRpb24t
Pmhhc1Byb3BlcnR5KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nZXQpKSB7CiAgICAgICAg
IEpTVmFsdWUgZ2V0ID0gZGVzY3JpcHRpb24tPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuZ2V0KTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBpZiAoIWdldC5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKQEAgLTQwMywxMiArNDIzLDEyIEBAIGJvb2wgdG9Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBkZXNjLnNldEdldHRl
cihnZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgfSBlbHNlIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChkZXNjcmlwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnNldCkpIHsKICAgICAgICAgSlNWYWx1ZSBzZXQgPSBkZXNjcmlwdGlvbi0+Z2V0KGV4ZWMsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5zZXQpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmICghc2V0LmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgICAg
IENhbGxEYXRhIGNhbGxEYXRhOwpAQCAtNDE4LDcgKzQzOCw3IEBAIGJvb2wgdG9Qcm9wZXJ0eURl
c2NyaXB0b3IoRXhlY1N0YXRlKiBleGUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBkZXNjLnNldFNldHRlcihzZXQpOwotICAgIH0gZWxzZSBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgfSBlbHNlIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICghZGVzYy5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKQpAQCAtNDQ1
LDcgKzQ2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
UHJvcGVydGllcyBjYW4gb25seSBiZSBkZWZpbmVkIG9uIE9iamVjdHMuIikpOwogICAgIEpTT2Jq
ZWN0KiBvYmogPSBhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKICAgICBQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICBhdXRvIHN1Y2Nlc3MgPSB0b1Byb3BlcnR5RGVz
Y3JpcHRvcihleGVjLCBleGVjLT5hcmd1bWVudCgyKSwgZGVzY3JpcHRvcik7CkBAIC00NTMsNyAr
NDczLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIGlm
ICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAg
ICAgQVNTRVJUKChkZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSAmIEFjY2Vzc29yKSB8fCAoIWRlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIG9iai0+bWV0
aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmosIGV4ZWMsIHByb3BlcnR5TmFtZSwg
ZGVzY3JpcHRvciwgdHJ1ZSk7CiAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUob2JqKTsKQEAgLTQ2MSwxNiArNDgxLDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKIAogc3RhdGljIEpTVmFsdWUgZGVmaW5lUHJvcGVydGll
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm9wZXJ0aWVz
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhl
eGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgYXNPYmplY3Qo
cHJvcGVydGllcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KGFzT2JqZWN0KHByb3BlcnRpZXMpLCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1v
ZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6RXhjbHVkZSkpOwotICAgIGlmIChVTkxJS0VMWShl
eGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgYXNPYmplY3QocHJvcGVydGllcyktPm1ldGhvZFRh
YmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhhc09iamVjdChwcm9wZXJ0aWVzKSwgZXhlYywg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJvcGVydGllc01vZGU6OkV4
Y2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CiAgICAgc2l6ZV90IG51bVByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVz
LnNpemUoKTsKICAgICBWZWN0b3I8UHJvcGVydHlEZXNjcmlwdG9yPiBkZXNjcmlwdG9yczsKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtYXJrQnVmZmVyOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtUHJvcGVydGllczsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgcHJvcCA9IHByb3Bl
cnRpZXMtPmdldChleGVjLCBwcm9wZXJ0eU5hbWVzW2ldKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3Ig
ZGVzY3JpcHRvcjsKICAgICAgICAgaWYgKCF0b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9w
LCBkZXNjcmlwdG9yKSkKQEAgLTQ5MCw4ICs1MTMsOCBAQCBzdGF0aWMgSlNWYWx1ZSBkZWZpbmVQ
cm9wZXJ0aWVzKEV4ZWNTdGF0CiAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gcHJv
cGVydHlOYW1lc1tpXTsKICAgICAgICAgaWYgKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1ByaXZh
dGVOYW1lKHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ldLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVm
aW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3JzW2ld
LCB0cnVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICB9CiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTUz
MSw2ICs1NTQsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JTZWFsKEV4ZWNT
dGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90
IE9iamVjdCwgcmV0dXJuIE8uCiAgICAgSlNWYWx1ZSBvYmogPSBleGVjLT5hcmd1bWVudCgwKTsK
ICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNTM4LDE0ICs1NjQsMTQgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5hbE9iamVjdChvYmplY3QpKSB7Ci0gICAg
ICAgIG9iamVjdC0+c2VhbChleGVjLT52bSgpKTsKKyAgICAgICAgb2JqZWN0LT5zZWFsKHZtKTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIH0KIAogICAgIC8vIDIu
IEZvciBlYWNoIG5hbWVkIG93biBwcm9wZXJ0eSBuYW1lIFAgb2YgTywKICAgICBQcm9wZXJ0eU5h
bWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3NBbmRTeW1i
b2xzKTsKLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVt
UHJvcGVydGllc01vZGU6OkluY2x1ZGUpKTsKLSAgICBpZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGllcywgRW51bWVyYXRpb25Nb2RlKERvbnRFbnVtUHJv
cGVydGllc01vZGU6OkluY2x1ZGUpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG9iaik7CiAgICAgUHJvcGVydHlO
YW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByb3BlcnRpZXMuZW5kKCk7CiAgICAgZm9y
IChQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHByb3BlcnRpZXMuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewpAQCAtNTU5LDE0ICs1ODUsMTQgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAogICAgICAgICAvLyBiLiBJZiBkZXNj
LltbQ29uZmlndXJhYmxlXV0gaXMgdHJ1ZSwgc2V0IGRlc2MuW1tDb25maWd1cmFibGVdXSB0byBm
YWxzZS4KICAgICAgICAgZGVzYy5zZXRDb25maWd1cmFibGUoZmFsc2UpOwogICAgICAgICAvLyBj
LiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0
aCBQLCBkZXNjLCBhbmQgdHJ1ZSBhcyBhcmd1bWVudHMuCi0gICAgICAgIG9iamVjdC0+bWV0aG9k
VGFibGUoZXhlYy0+dm0oKSktPmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjLCB0cnVlKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2MsIHRydWUpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShv
YmopOwogICAgIH0KIAogICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwg
cHJvcGVydHkgb2YgTyB0byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5wcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lv
bnMob2JqZWN0LCBleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAvLyA0LiBS
ZXR1cm4gTy4KQEAgLTU3NSwxNSArNjAxLDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0Q29uc3QKIAogSlNPYmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmIChp
c0pTRmluYWxPYmplY3Qob2JqZWN0KSAmJiAhaGFzSW5kZXhlZFByb3BlcnRpZXMob2JqZWN0LT5p
bmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgb2JqZWN0LT5mcmVlemUoZXhlYy0+dm0oKSk7Cisg
ICAgICAgIG9iamVjdC0+ZnJlZXplKHZtKTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9
CiAKICAgICAvLyAyLiBGb3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAg
ICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzQW5kU3ltYm9scyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9u
TW9kZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0
T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9k
ZShEb250RW51bVByb3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICBQcm9wZXJ0eU5h
bWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3Ig
KFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CkBAIC02MDEsMTQgKzYzMCwxNCBAQCBKU09iamVj
dCogb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoRXhlY1N0CiAgICAgICAgIC8vIGMuIElmIGRlc2Mu
W1tDb25maWd1cmFibGVdXSBpcyB0cnVlLCBzZXQgZGVzYy5bW0NvbmZpZ3VyYWJsZV1dIHRvIGZh
bHNlLgogICAgICAgICBkZXNjLnNldENvbmZpZ3VyYWJsZShmYWxzZSk7CiAgICAgICAgIC8vIGQu
IENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRo
IFAsIGRlc2MsIGFuZCB0cnVlIGFzIGFyZ3VtZW50cy4KLSAgICAgICAgb2JqZWN0LT5tZXRob2RU
YWJsZShleGVjLT52bSgpKS0+ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0
eU5hbWUsIGRlc2MsIHRydWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWZpbmVPd25Qcm9wZXJ0eShvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgZGVzYywgdHJ1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIAog
ICAgIC8vIDMuIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyB0
byBmYWxzZS4KLSAgICBvYmplY3QtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wcmV2ZW50RXh0
ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+cHJldmVudEV4dGVuc2lvbnMob2JqZWN0LCBleGVj
KTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIC8vIDQuIFJldHVybiBPLgpAQCAtNjE3LDEyICs2NDYsMTQgQEAgSlNP
YmplY3QqIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdAogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKEV4ZWNTdGF0ZSogZXhlYykKIHsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHJldHVybiBP
LgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKCFvYmouaXNP
YmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvYmopOwogICAgIEpTT2Jq
ZWN0KiByZXN1bHQgPSBvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZShleGVjLCBhc09iamVjdChvYmop
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KQEAgLTYzOSw2ICs2NzAs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3RydWN0b3JJc1NlYWxlZChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHJldHVybiB0cnVlLgogICAgIEpTVmFsdWUgb2JqID0gZXhlYy0+YXJndW1lbnQoMCk7CiAg
ICAgaWYgKCFvYmouaXNPYmplY3QoKSkKQEAgLTY0NiwxMiArNjgwLDEyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3Qob2JqKTsKIAogICAgIGlmIChpc0pTRmluYWxPYmplY3Qob2JqZWN0KSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0LT5pc1NlYWxlZChleGVjLT52
bSgpKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3Qt
PmlzU2VhbGVkKHZtKSkpOwogCiAgICAgLy8gMi4gRm9yIGVhY2ggbmFtZWQgb3duIHByb3BlcnR5
IG5hbWUgUCBvZiBPLAogICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYywgUHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5nc0FuZFN5bWJvbHMpOwotICAgIG9iamVjdC0+bWV0aG9kVGFi
bGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0
aWVzLCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOwot
ICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgb2JqZWN0LT5tZXRo
b2RUYWJsZSh2bSktPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0aWVz
LCBFbnVtZXJhdGlvbk1vZGUoRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gcHJvcGVydGllcy5lbmQoKTsKICAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gcHJvcGVydGllcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CkBAIC02NzAsMTMgKzcwNCwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG9iamVjdENvbnN0CiAgICAgLy8gMy4gSWYgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHBy
b3BlcnR5IG9mIE8gaXMgZmFsc2UsIHRoZW4gcmV0dXJuIHRydWUuCiAgICAgLy8gNC4gT3RoZXJ3
aXNlLCByZXR1cm4gZmFsc2UuCiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0
ZW5zaWJsZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpc0V4
dGVuc2libGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25z
dHJ1Y3RvcklzRnJvemVuKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8v
IDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgcmV0dXJuIHRydWUuCiAgICAgSlNWYWx1ZSBv
YmogPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoIW9iai5pc09iamVjdCgpKQpAQCAtNjg0
LDEyICs3MjEsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RDb25zdAog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChvYmopOwogCiAgICAgaWYgKGlzSlNGaW5h
bE9iamVjdChvYmplY3QpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihvYmplY3QtPmlzRnJvemVuKGV4ZWMtPnZtKCkpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKG9iamVjdC0+aXNGcm96ZW4odm0pKSk7CiAKICAgICAvLyAyLiBG
b3IgZWFjaCBuYW1lZCBvd24gcHJvcGVydHkgbmFtZSBQIG9mIE8sCiAgICAgUHJvcGVydHlOYW1l
QXJyYXkgcHJvcGVydGllcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzQW5kU3ltYm9s
cyk7Ci0gICAgb2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVBy
b3BlcnRpZXNNb2RlOjpJbmNsdWRlKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsIGV4ZWMsIHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIFByb3Bl
cnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcm9wZXJ0aWVzLmVuZCgpOwogICAg
IGZvciAoUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0aWVz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKQEAgLTcwOSwxOSArNzQ2LDIxIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3QKICAgICAvLyAzLiBJZiB0aGUg
W1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTyBpcyBmYWxzZSwgdGhlbiByZXR1
cm4gdHJ1ZS4KICAgICAvLyA0LiBPdGhlcndpc2UsIHJldHVybiBmYWxzZS4KICAgICBib29sIGlz
RXh0ZW5zaWJsZSA9IG9iamVjdC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oIWlzRXh0ZW5zaWJsZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0cnVjdG9ySXNFeHRlbnNpYmxlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIG9iaiA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIGlmICghb2JqLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KG9i
aik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUgPSBvYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGlzRXh0ZW5zaWJsZSkpOwogfQpA
QCAtNzM1LDEzICs3NzQsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RD
b25zdAogSlNBcnJheSogb3duUHJvcGVydHlLZXlzKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9iamVjdCwgUHJvcGVydHlOYW1lTW9kZSBwcm9wZXJ0eU5hbWVNb2RlLCBEb250RW51bVByb3Bl
cnRpZXNNb2RlIGRvbnRFbnVtUHJvcGVydGllc01vZGUpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgUHJv
cGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVjLCBwcm9wZXJ0eU5hbWVNb2RlKTsKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnRpZXMsIEVudW1lcmF0aW9uTW9kZShkb250RW51bVByb3BlcnRpZXNNb2RlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTQXJyYXkqIGtl
eXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5l
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKHByb3BlcnR5TmFtZU1vZGUpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0
b3IuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw5IEBAIGlu
bGluZSBKU09iamVjdCogY29uc3RydWN0T2JqZWN0KEV4ZWNTdGEKIGlubGluZSBKU09iamVjdCog
Y29uc3RydWN0T2JqZWN0RnJvbVByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U09iamVjdCogZGVzY3JpcHRpb24gPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKLSAgICBp
ZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIWRlc2NyaXB0b3IuaXNBY2Nlc3Nv
ckRlc2NyaXB0b3IoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw5ICs4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJv
cGVydHkoRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNWYWx1ZSB0aGlz
VmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSk7CiAgICAg
YXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGV4ZWMp
OwogICAgIGlmICghdGhpc09iamVjdCkKQEAgLTEwMSw2ICsxMDQsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhp
cyhleGVjLCBTdHJpY3RNb2RlKTsKICAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50
b09iamVjdChleGVjKTsKICAgICBpZiAoIXRoaXNPYmopCkBAIC0xMDksOSArMTE1LDggQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGlmICghZXhlYy0+YXJn
dW1lbnQoMCkuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oZmFsc2UpKTsKIAotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNWYWx1ZSB2
ID0gYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwot
ICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
OwogCiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTEyMCw3ICsxMjUsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIGlmICh2ID09IHRoaXNPYmopCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiAgICAg
ICAgIHYgPSBhc09iamVjdCh2KS0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKICAgICB9CiB9CkBAIC0xMzEsNyArMTM2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBvYmplY3RQcm90bwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlz
KGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBnZXQg
PSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE0MCw3ICsxNDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoImludmFsaWQgZ2V0dGVyIHVzYWdlIikpOwogCiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xNjAsNyAr
MTY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBzZXQgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAg
LTE2OSw3ICsxNzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3Rv
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoImludmFsaWQgc2V0dGVyIHVzYWdlIikpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7CkBAIC0xODUsMTIgKzE5MCwxNSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKwogICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9U
aGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVudCgwKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAg
ICAgUHJvcGVydHlTbG90IHNsb3QodGhpc09iamVjdCwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTIxMiwxMiArMjIwLDE1IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBleGVjLT50aGlzVmFsdWUo
KS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqZWN0LCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtMjM5LDEyICsyNTAsMTUgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+
YXJndW1lbnQoMCkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2Jq
ZWN0KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwogICAgIGJv
b2wgZW51bWVyYWJsZSA9IHRoaXNPYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVj
LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpOwpA
QCAtMjU0LDkgKzI2OCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFBy
b3RvCiAvLyAxNS4yLjQuMyBPYmplY3QucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nKCkKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0IHBhc3NpbmcgdGhlIHRoaXMgdmFsdWUgYXMgdGhlIGFy
Z3VtZW50LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMo
ZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3QoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAyLiBMZXQgdG9T
dHJpbmcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldF1dIGludGVybmFsIG1ldGhv
ZCBvZiBPIHBhc3NpbmcgInRvU3RyaW5nIiBhcyB0aGUgYXJndW1lbnQuCkBAIC0yOTIsNyArMzA5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhpc09iamVjdC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHRvU3Ry
aW5nVGFnU3ltYm9sLCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgdG9TdHJpbmdUYWdT
bG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICBKU1Zh
bHVlIHN0cmluZ1RhZyA9IHRvU3RyaW5nVGFnU2xvdC5nZXRWYWx1ZShleGVjLCB0b1N0cmluZ1Rh
Z1N5bWJvbCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGlmIChzdHJpbmdUYWcuaXNTdHJp
bmcoKSkgewogICAgICAgICAgICAgICAgIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxkZXIgcm9wZUJ1
aWxkZXIodm0pOwpAQCAtMzA3LDcgKzMyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgb2JqZWN0UHJvdG8KICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyB0YWcgPSB0aGlzT2Jq
ZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9TdHJpbmdOYW1lKHRoaXNPYmplY3QsIGV4
ZWMpOwotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICBTdHJpbmcgbmV3U3RyaW5nID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2JqZWN0ICIsIFdURk1v
dmUodGFnKSwgIl0iKTsKICAgICAgICAgaWYgKCFuZXdTdHJpbmcpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NTY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0
LDExICs0NCwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKENhbGxGCiB7
CiAgICAgLy8gZXhjZXB0aW9uIGZvciB0aGUgRGF0ZSBleGNlcHRpb24gaW4gZGVmYXVsdFZhbHVl
KCkKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgcDEgPSB2MS50b1ByaW1pdGl2ZShjYWxs
RnJhbWUpOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICBK
U1ZhbHVlIHAyID0gdjIudG9QcmltaXRpdmUoY2FsbEZyYW1lKTsKLSAgICBpZiAoVU5MSUtFTFko
dm0uZXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKICAgICBpZiAocDEuaXNTdHJpbmcoKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQ2LDYgKzM0Niw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIHYoYm9vbCwgdXNlRXhjZXB0aW9uRnV6eiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIGZpcmVFeGNlcHRpb25GdXp6QXQsIDAsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgdmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZywgZmFsc2UsIE5vcm1h
bCwgIkNhdXNlcyB0aGUgREZHIHRvIGVtaXQgY29kZSB2YWxpZGF0aW5nIGV4Y2VwdGlvbiBoYW5k
bGluZyBmb3IgZWFjaCBub2RlIHRoYXQgY2FuIGV4aXQiKSAvKiBUaGlzIGlzIHRydWUgYnkgZGVm
YXVsdCBvbiBEZWJ1ZyBidWlsZHMgKi9cCisgICAgdihib29sLCBkdW1wU2ltdWxhdGVkVGhyb3dz
LCBmYWxzZSwgTm9ybWFsLCAiRHVtcHMgdGhlIGNhbGwgc3RhY2sgYXQgZWFjaCBzaW11bGF0ZWQg
dGhyb3cgZm9yIGV4Y2VwdGlvbiBzY29wZSB2ZXJpZmljYXRpb24iKSBcCiAgICAgXAogICAgIHYo
Ym9vbCwgdXNlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdih1bnNpZ25lZCwgZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0LCAwLCBO
b3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5RGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsOSArNzUsMTEgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldFVu
ZGVmaW5lZCgpCiBHZXR0ZXJTZXR0ZXIqIFByb3BlcnR5RGVzY3JpcHRvcjo6c2xvd0dldHRlclNl
dHRlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIEdldHRl
clNldHRlciogZ2V0dGVyU2V0dGVyID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChtX2dl
dHRlciAmJiAhbV9nZXR0ZXIuaXNVbmRlZmluZWQoKSkKICAgICAgICAgZ2V0dGVyU2V0dGVyLT5z
ZXRHZXR0ZXIodm0sIGdsb2JhbE9iamVjdCwganNDYXN0PEpTT2JqZWN0Kj4obV9nZXR0ZXIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjMgKzU1LDIz
IEBAIFByb3h5Q29uc3RydWN0b3I6OlByb3h5Q29uc3RydWN0b3IoVk0mIHYKIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFrZVJldm9jYWJsZVByb3h5KEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgp
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMikKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUHJv
eHkucmV2b2NhYmxlIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSB0
YXJnZXQgYW5kIHRoZSBoYW5kbGVyIikpOwogCi0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBBcmdMaXN0IGFyZ3MoZXhlYyk7CiAgICAgSlNWYWx1ZSB0YXJnZXQgPSBhcmdzLmF0KDApOwog
ICAgIEpTVmFsdWUgaGFuZGxlciA9IGFyZ3MuYXQoMSk7CiAgICAgUHJveHlPYmplY3QqIHByb3h5
ID0gUHJveHlPYmplY3Q6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHRhcmdldCwgaGFuZGxlcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZSgpKTsKICAgICBQcm94eVJldm9rZSogcmV2b2tlID0gUHJveHlSZXZva2U6OmNyZWF0
ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm94eVJldm9rZVN0cnVjdHVyZSgp
LCBwcm94eSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKIAogICAgIEpTT2JqZWN0KiByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJl
c3VsdC0+cHV0RGlyZWN0KHZtLCBtYWtlSWRlbnRpZmllcih2bSwgInByb3h5IiksIHByb3h5LCBO
b25lKTsKICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgbWFrZUlkZW50aWZpZXIodm0sICJyZXZv
a2UiKSwgcmV2b2tlLCBOb25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm94eU9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIg
KzUzLDEzIEBAIFByb3h5T2JqZWN0OjpQcm94eU9iamVjdChWTSYgdm0sIFN0cnVjdHUKIFN0cmlu
ZyBQcm94eU9iamVjdDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBjb25zdCBQcm94eU9iamVjdCogcHJveHkg
PSBqc0Nhc3Q8Y29uc3QgUHJveHlPYmplY3QqPihvYmplY3QpOwogICAgIHdoaWxlIChwcm94eSkg
ewogICAgICAgICBjb25zdCBKU09iamVjdCogdGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOwogICAg
ICAgICBpZiAoaXNBcnJheShleGVjLCB0YXJnZXQpKQogICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dC0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLnRvU3RyaW5nTmFtZSh0YXJnZXQsIGV4ZWMpOwot
ICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBwcm94eSA9IGpzRHlu
YW1pY0Nhc3Q8Y29uc3QgUHJveHlPYmplY3QqPih0YXJnZXQpOwpAQCAtMTQwLDcgKzE0MSw3IEBA
IHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdldEhhbmRsZXIg
PSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0
eU5hbWVzLT5nZXQsIEFTQ0lJTGl0ZXJhbCgiJ2dldCcgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhh
bmRsZXIgb2JqZWN0IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoZ2V0SGFuZGxlci5pc1VuZGVmaW5lZCgp
KQpAQCAtMTUxLDcgKzE1Miw3IEBAIHN0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVj
U3RhdGUKICAgICBhcmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVl
KHZtLCBJZGVudGlmaWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAg
IGFyZ3VtZW50cy5hcHBlbmQocmVjZWl2ZXIpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNh
bGwoZXhlYywgZ2V0SGFuZGxlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVu
dHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFBy
b3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwpAQCAtMTY1LDcgKzE2Niw3IEBAIHN0YXRpYyBK
U1ZhbHVlIHBlcmZvcm1Qcm94eUdldChFeGVjU3RhdGUKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiB0cmFw
UmVzdWx0OwpAQCAtMTczLDggKzE3NCwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJveHlH
ZXQoRXhlY1N0YXRlCiAKIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXQoRXhlY1N0YXRlKiBl
eGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJveHlHZXQoZXhlYywgdGhp
cywgc2xvdC50aGlzVmFsdWUoKSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHVuc2lnbmVkIGlnbm9yZWRBdHRyaWJ1dGVzID0gMDsKICAgICBz
bG90LnNldFZhbHVlKHRoaXMsIGlnbm9yZWRBdHRyaWJ1dGVzLCByZXN1bHQpOwpAQCAtMjA4LDcg
KzIxMSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBj
YWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yIiksIEFTQ0lJTGl0ZXJhbCgiJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicgcHJvcGVy
dHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGdldE93blByb3BlcnR5RGVzY3JpcHRv
ck1ldGhvZC5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gcGVyZm9ybURlZmF1bHRHZXRP
d25Qcm9wZXJ0eSgpOwpAQCAtMjE3LDcgKzIyMCw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZv
cm1JbnRlcm5hbE1ldGhvZEcKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJn
dW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmll
cjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBS
ZXN1bHQgPSBjYWxsKGV4ZWMsIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSAmJiAhdHJh
cFJlc3VsdC5pc09iamVjdCgpKSB7CkBAIC0yMjcsNyArMjMwLDcgQEAgYm9vbCBQcm94eU9iamVj
dDo6cGVyZm9ybUludGVybmFsTWV0aG9kRwogCiAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHRhcmdl
dFByb3BlcnR5RGVzY3JpcHRvcjsKICAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9y
RGVmaW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGFyZ2V0UHJvcGVydHlEZXNjcmlwdG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHQuaXNVbmRlZmluZWQoKSkgewpAQCAtMjQw
LDcgKzI0Myw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEcKICAg
ICAgICAgLy8gRklYTUU6IHRoaXMgZG9lc24ndCB3b3JrIGlmICd0YXJnZXQnIGlzIGFub3RoZXIg
UHJveHkuIFdlIGRvbid0IGhhdmUgaXNFeHRlbnNpYmxlIGltcGxlbWVudGVkIGluIGEgd2F5IHRo
YXQgZml0cyB3LyBQcm94eXMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQzNzUKICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0YXJnZXQt
PmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IENvbWUgdXAgd2l0aCBhIHRlc3QgZm9yIHRoaXMgZXJyb3IuIEknbSBub3Qgc3VyZSBo
b3cgdG8gYmVjYXVzZQpAQCAtMjU0LDExICsyNTcsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybUludGVybmFsTWV0aG9kRwogICAgIH0KIAogICAgIGJvb2wgaXNFeHRlbnNpYmxlID0gdGFy
Z2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgdHJhcFJlc3VsdEFzRGVzY3JpcHRvcjsKICAgICB0
b1Byb3BlcnR5RGVzY3JpcHRvcihleGVjLCB0cmFwUmVzdWx0LCB0cmFwUmVzdWx0QXNEZXNjcmlw
dG9yKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgdGhyb3dF
eGNlcHRpb24gPSBmYWxzZTsKICAgICBib29sIHZhbGlkID0gdmFsaWRhdGVBbmRBcHBseVByb3Bl
cnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUsIGlzRXh0ZW5zaWJsZSwK
QEAgLTI3Nyw3ICsyODAsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSW50ZXJuYWxNZXRo
b2RHCiAKICAgICBpZiAodHJhcFJlc3VsdEFzRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRv
cigpKSB7CiAgICAgICAgIEdldHRlclNldHRlciogZ2V0dGVyU2V0dGVyID0gdHJhcFJlc3VsdEFz
RGVzY3JpcHRvci5zbG93R2V0dGVyU2V0dGVyKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHNsb3Quc2V0R2V0dGVyU2xvdCh0aGlz
LCB0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLmF0dHJpYnV0ZXMoKSwgZ2V0dGVyU2V0dGVyKTsKICAg
ICB9IGVsc2UgaWYgKHRyYXBSZXN1bHRBc0Rlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpICYm
ICF0cmFwUmVzdWx0QXNEZXNjcmlwdG9yLnZhbHVlKCkuaXNFbXB0eSgpKQpAQCAtMzE2LDcgKzMx
OSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eShFeGUKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGhhc01l
dGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnBy
b3BlcnR5TmFtZXMtPmhhcywgQVNDSUlMaXRlcmFsKCInaGFzJyBwcm9wZXJ0eSBvZiBhIFByb3h5
J3MgaGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoaGFzTWV0aG9kLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJl
dHVybiBwZXJmb3JtRGVmYXVsdEhhc1Byb3BlcnR5KCk7CkBAIC0zMjUsMTcgKzMyOCwxNyBAQCBi
b29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgYXJndW1lbnRzLmFw
cGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2FmZVB1Ymxp
Y0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50
b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghdHJhcFJlc3VsdEFzQm9vbCkgewogICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVzY3JpcHRvckRlZmluZWQgPSB0YXJn
ZXQtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IpOyAKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoaXNQcm9wZXJ0eURlc2NyaXB0b3JEZWZpbmVkKSB7CiAgICAgICAgICAgICBpZiAo
IWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpIHsKQEAgLTM0Myw3ICszNDYsNyBAQCBib29sIFBy
b3h5T2JqZWN0OjpwZXJmb3JtSGFzUHJvcGVydHkoRXhlCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBpc0V4dGVuc2libGUgPSB0
YXJnZXQtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2li
bGUpIHsKICAgICAgICAgICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlByb3h5ICdoYXMnIG11c3QgcmV0dXJuICd0cnVlJyBmb3IgYSBub24tZXh0ZW5z
aWJsZSAndGFyZ2V0JyBvYmplY3Qgd2l0aCBhIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSIpKTsKQEAg
LTQxNiw3ICs0MTksNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtUHV0KEV4ZWNTdGF0ZSog
CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNW
YWx1ZSBzZXRNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxU
eXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIEFTQ0lJTGl0ZXJhbCgiJ3NldCcgcHJvcGVydHkg
b2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdl
dCgpOwogICAgIGlmIChzZXRNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAgLTQyOCwxMCArNDMxLDEw
IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1QdXQoRXhlY1N0YXRlKiAKICAgICBhcmd1bWVu
dHMuYXBwZW5kKHB1dFZhbHVlKTsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRoaXNWYWx1ZSk7CiAg
ICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBzZXRNZXRob2QsIGNhbGxUeXBlLCBj
YWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCF0cmFw
UmVzdWx0QXNCb29sKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjcsOCArNDcwLDkgQEAg
Ym9vbCBQcm94eU9iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlYwogYm9vbCBQcm94eU9iamVj
dDo6cHV0QnlJbmRleENvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgcHV0VmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
CiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBwcm9wZXJ0eU5hbWUpOyAKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGF1dG8gcGVyZm9ybURlZmF1bHRQdXQgPSBbJl0gKCkgewogICAgICAgICBKU09i
amVjdCogdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7CkBAIC01MDIsNyArNTA2LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZgogICAgIENhbGxEYXRhIGNhbGxEYXRh
OwogICAgIENhbGxUeXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5k
bGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2
bSwgImFwcGx5IiksIEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3Mg
aGFuZGxlciBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9
IHByb3h5LT50YXJnZXQoKTsKICAgICBpZiAoYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKSkgewpA
QCAtNTEzLDcgKzUxNyw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBl
cmYKICAgICB9CiAKICAgICBKU0FycmF5KiBhcmdBcnJheSA9IGNvbnN0cnVjdEFycmF5KGV4ZWMs
IHN0YXRpY19jYXN0PEFycmF5QWxsb2NhdGlvblByb2ZpbGUqPihudWxscHRyKSwgQXJnTGlzdChl
eGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3Vt
ZW50cy5hcHBlbmQodGFyZ2V0KTsKQEAgLTU1Miw3ICs1NTYsNyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBwZXJmCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RNZXRob2QgPSBoYW5kbGVyLT5n
ZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImNv
bnN0cnVjdCIpLCBBU0NJSUxpdGVyYWwoIidjb25zdHJ1Y3QnIHByb3BlcnR5IG9mIGEgUHJveHkn
cyBoYW5kbGVyIHNob3VsZCBiZSBjb25zdHJ1Y3RpYmxlIikpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTT2JqZWN0KiB0
YXJnZXQgPSBwcm94eS0+dGFyZ2V0KCk7CiAgICAgaWYgKGNvbnN0cnVjdE1ldGhvZC5pc1VuZGVm
aW5lZCgpKSB7CkBAIC01NjMsMTQgKzU2NywxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwZXJmCiAgICAgfQogCiAgICAgSlNBcnJheSogYXJnQXJyYXkgPSBjb25zdHJ1
Y3RBcnJheShleGVjLCBzdGF0aWNfY2FzdDxBcnJheUFsbG9jYXRpb25Qcm9maWxlKj4obnVsbHB0
ciksIEFyZ0xpc3QoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50
czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChh
cmdBcnJheSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChleGVjLT5uZXdUYXJnZXQoKSk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIGNvbnN0cnVjdE1ldGhvZCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmICghcmVzdWx0LmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlJlc3VsdCBmcm9tIFByb3h5IGhhbmRsZXIncyAnY29uc3RydWN0JyBtZXRob2Qgc2hv
dWxkIGJlIGFuIG9iamVjdCIpKTsKQEAgLTYxMyw3ICs2MTcsNyBAQCBib29sIFByb3h5T2JqZWN0
OjpwZXJmb3JtRGVsZXRlKEV4ZWNTdGF0CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2Fs
bFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBkZWxldGVQcm9wZXJ0eU1ldGhvZCA9IGhhbmRs
ZXItPmdldE1ldGhvZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZt
LCAiZGVsZXRlUHJvcGVydHkiKSwgQVNDSUlMaXRlcmFsKCInZGVsZXRlUHJvcGVydHknIHByb3Bl
cnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50
YXJnZXQoKTsKICAgICBpZiAoZGVsZXRlUHJvcGVydHlNZXRob2QuaXNVbmRlZmluZWQoKSkKQEAg
LTYyMywxMSArNjI3LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWxldGUoRXhlY1N0
YXQKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChp
ZGVudGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0s
IHByb3BlcnR5TmFtZS51aWQoKSkpKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4
ZWMsIGRlbGV0ZVByb3BlcnR5TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFy
Z3VtZW50cyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wg
dHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBSZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXRyYXBSZXN1bHRBc0Jvb2wpCkBA
IC02NDEsNyArNjQ1LDcgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlbGV0ZShFeGVjU3Rh
dAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHJldHVybiB0cnVlOwpAQCAtNjg3LDcgKzY5MSw3IEBAIGJvb2wgUHJveHlPYmplY3Q6
OnBlcmZvcm1QcmV2ZW50RXh0ZW5zaW8KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIHByZXZlbnRFeHRlbnNpb25zTWV0aG9kID0gaGFu
ZGxlci0+Z2V0TWV0aG9kKGV4ZWMsIGNhbGxEYXRhLCBjYWxsVHlwZSwgbWFrZUlkZW50aWZpZXIo
dm0sICJwcmV2ZW50RXh0ZW5zaW9ucyIpLCBBU0NJSUxpdGVyYWwoIidwcmV2ZW50RXh0ZW5zaW9u
cycgcHJvcGVydHkgb2YgYSBQcm94eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgSlNPYmplY3QqIHRhcmdldCA9
IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZC5pc1VuZGVm
aW5lZCgpKQpAQCAtNjk2LDE2ICs3MDAsMTYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybVBy
ZXZlbnRFeHRlbnNpbwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBh
cmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChl
eGVjLCBwcmV2ZW50RXh0ZW5zaW9uc01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBi
b29sIHRyYXBSZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHRyYXBSZXN1bHRBc0Jvb2wp
IHsKICAgICAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAodGFyZ2V0SXNFeHRlbnNpYmxlKSB7CiAgICAgICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5J3MgJ3ByZXZlbnRFeHRlbnNp
b25zJyB0cmFwIHJldHVybmVkIHRydWUgZXZlbiB0aG91Z2ggaXRzIHRhcmdldCBpcyBleHRlbnNp
YmxlLiBJdCBzaG91bGQgaGF2ZSByZXR1cm5lZCBmYWxzZSIpKTsKQEAgLTc0MCw3ICs3NDQsNyBA
QCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtSXNFeHRlbnNpYmxlKEV4CiAgICAgQ2FsbERhdGEg
Y2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgSlNWYWx1ZSBpc0V4dGVuc2li
bGVNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBt
YWtlSWRlbnRpZmllcih2bSwgImlzRXh0ZW5zaWJsZSIpLCBBU0NJSUxpdGVyYWwoIidpc0V4dGVu
c2libGUnIHByb3BlcnR5IG9mIGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNPYmplY3QqIHRh
cmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtNzUwLDE1ICs3NTQsMTUgQEAgYm9vbCBQcm94eU9i
amVjdDo6cGVyZm9ybUlzRXh0ZW5zaWJsZShFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFy
Z3VtZW50czsKICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgSlNWYWx1ZSB0cmFw
UmVzdWx0ID0gY2FsbChleGVjLCBpc0V4dGVuc2libGVNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0
YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgYm9vbCB0cmFwUmVzdWx0QXNCb29sID0gdHJhcFJlc3VsdC50b0Jvb2xlYW4oZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgaXNUYXJn
ZXRFeHRlbnNpYmxlID0gdGFyZ2V0LT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh0cmFwUmVzdWx0QXNCb29sICE9IGlzVGFy
Z2V0RXh0ZW5zaWJsZSkgewpAQCAtODA3LDE0ICs4MTEsMTQgQEAgYm9vbCBQcm94eU9iamVjdDo6
cGVyZm9ybURlZmluZU93blByb3BlcgogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlOwogICAgIEpTVmFsdWUgZGVmaW5lUHJvcGVydHlNZXRob2QgPSBoYW5kbGVy
LT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5k
ZWZpbmVQcm9wZXJ0eSwgQVNDSUlMaXRlcmFsKCInZGVmaW5lUHJvcGVydHknIHByb3BlcnR5IG9m
IGEgUHJveHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGRlZmluZVByb3BlcnR5TWV0aG9kLmlzVW5kZWZpbmVk
KCkpCiAgICAgICAgIHJldHVybiBwZXJmb3JtRGVmYXVsdERlZmluZU93blByb3BlcnR5KCk7CiAK
ICAgICBKU09iamVjdCogZGVzY3JpcHRvck9iamVjdCA9IGNvbnN0cnVjdE9iamVjdEZyb21Qcm9w
ZXJ0eURlc2NyaXB0b3IoZXhlYywgZGVzY3JpcHRvcik7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigp
KQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTgyMiwxMSAr
ODI2LDExIEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1EZWZpbmVPd25Qcm9wZXIKICAgICBh
cmd1bWVudHMuYXBwZW5kKGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKHZtLCBJZGVudGlm
aWVyOjpmcm9tVWlkKCZ2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwogICAgIGFyZ3VtZW50cy5h
cHBlbmQoZGVzY3JpcHRvck9iamVjdCk7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChl
eGVjLCBkZWZpbmVQcm9wZXJ0eU1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBh
cmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBib29sIHRyYXBS
ZXN1bHRBc0Jvb2wgPSB0cmFwUmVzdWx0LnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKQpAQCAtODM0LDExICs4
MzgsMTEgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybURlZmluZU93blByb3BlcgogCiAgICAg
UHJvcGVydHlEZXNjcmlwdG9yIHRhcmdldERlc2NyaXB0b3I7CiAgICAgYm9vbCBpc1RhcmdldERl
c2NyaXB0b3JEZWZpbmVkID0gdGFyZ2V0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywg
cHJvcGVydHlOYW1lLCB0YXJnZXREZXNjcmlwdG9yKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYm9vbCB0YXJnZXRJc0V4dGVuc2libGUgPSB0YXJnZXQtPmlzRXh0ZW5zaWJs
ZShleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGJvb2wgc2V0dGluZ0Nv
bmZpZ3VyYWJsZVRvRmFsc2UgPSBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVByZXNlbnQoKSAmJiAh
ZGVzY3JpcHRvci5jb25maWd1cmFibGUoKTsKIApAQCAtODk2LDcgKzkwMCw3IEBAIHZvaWQgUHJv
eHlPYmplY3Q6OnBlcmZvcm1HZXRPd25Qcm9wZXJ0eU4KICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIG93bktleXNNZXRob2QgPSBoYW5k
bGVyLT5nZXRNZXRob2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2
bSwgIm93bktleXMiKSwgQVNDSUlMaXRlcmFsKCInb3duS2V5cycgcHJvcGVydHkgb2YgYSBQcm94
eSdzIGhhbmRsZXIgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIGlmICh2bS5leGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47
CiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwogICAgIGlmIChvd25LZXlz
TWV0aG9kLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTkwNyw3ICs5MTEsNyBAQCB2b2lkIFByb3h5T2Jq
ZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJn
dW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKICAgICBKU1ZhbHVlIGFycmF5
TGlrZU9iamVjdCA9IGNhbGwoZXhlYywgb3duS2V5c01ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRh
LCBoYW5kbGVyLCBhcmd1bWVudHMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQcm9w
ZXJ0eU5hbWVNb2RlIHByb3BlcnR5TmFtZU1vZGUgPSB0cmFwUmVzdWx0Lm1vZGUoKTsKQEAgLTkz
NSw3ICs5MzksNyBAQCB2b2lkIFByb3h5T2JqZWN0OjpwZXJmb3JtR2V0T3duUHJvcGVydHlOCiAg
ICAgICAgICAgICByZXR1cm4gZG9udEV4aXRFYXJseTsKIAogICAgICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gdmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAgICAgICAgaWYgKHZtLmV4Y2VwdGlv
bigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGRvRXhpdEVhcmx5OwogCiAgICAgICAgIHVuY2hlY2tlZFJlc3VsdEtleXMuYWRk
KGlkZW50LmltcGwoKSk7CkBAIC05NDQsMjEgKzk0OCwyMSBAQCB2b2lkIFByb3h5T2JqZWN0Ojpw
ZXJmb3JtR2V0T3duUHJvcGVydHlOCiAgICAgfTsKIAogICAgIGNyZWF0ZUxpc3RGcm9tQXJyYXlM
aWtlKGV4ZWMsIGFycmF5TGlrZU9iamVjdCwgZG9udFRocm93QW5FeGNlcHRpb25UeXBlRmlsdGVy
LCBBU0NJSUxpdGVyYWwoIlByb3h5IGhhbmRsZXIncyAnb3duS2V5cycgbWV0aG9kIG11c3QgcmV0
dXJuIGFuIGFycmF5LWxpa2Ugb2JqZWN0IGNvbnRhaW5pbmcgb25seSBTdHJpbmdzIGFuZCBTeW1i
b2xzIiksIGFkZFByb3BOYW1lKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCB0
YXJnZXRJc0V4ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwogCiAgICAgUHJv
cGVydHlOYW1lQXJyYXkgdGFyZ2V0S2V5cygmdm0sIHByb3BlcnR5TmFtZU1vZGUpOwogICAgIHRh
cmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCwgZXhlYywg
dGFyZ2V0S2V5cywgZW51bWVyYXRpb25Nb2RlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFZlY3RvcjxVbmlxdWVkU3RyaW5nSW1wbCo+IHRhcmdldENvbmZpZ3VyYWJsZUtleXM7CiAgICAg
VmVjdG9yPFVuaXF1ZWRTdHJpbmdJbXBsKj4gdGFyZ2V0Tm9uQ29uZmlndXJhYmxlS2V5czsKICAg
ICBmb3IgKGNvbnN0IElkZW50aWZpZXImIGlkZW50IDogdGFyZ2V0S2V5cykgewogICAgICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5RGVm
aW5lZCA9IHRhcmdldC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMsIGlkZW50LmltcGwo
KSwgZGVzY3JpcHRvcik7IAotICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChpc1Byb3BlcnR5RGVmaW5lZCAmJiAhZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkK
ICAgICAgICAgICAgIHRhcmdldE5vbkNvbmZpZ3VyYWJsZUtleXMuYXBwZW5kKGlkZW50LmltcGwo
KSk7CkBAIC0xMDQ3LDcgKzEwNTEsNyBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJv
dG90eXBlKEV4CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgSlNWYWx1ZSBzZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhvZChl
eGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAic2V0UHJvdG90eXBl
T2YiKSwgQVNDSUlMaXRlcmFsKCInc2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJveHkn
cyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgSlNPYmplY3QqIHRhcmdldCA9IHRoaXMtPnRhcmdldCgpOwpAQCAtMTA1OCwx
MSArMTA2MiwxMSBAQCBib29sIFByb3h5T2JqZWN0OjpwZXJmb3JtU2V0UHJvdG90eXBlKEV4CiAg
ICAgYXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocHJvdG90
eXBlKTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIHNldFByb3RvdHlwZU9m
TWV0aG9kLCBjYWxsVHlwZSwgY2FsbERhdGEsIGhhbmRsZXIsIGFyZ3VtZW50cyk7Ci0gICAgaWYg
KHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgdHJhcFJlc3VsdEFzQm9vbCA9IHRyYXBS
ZXN1bHQudG9Cb29sZWFuKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgaWYgKCF0cmFwUmVzdWx0QXNCb29sKSB7CkBAIC0xMDcyLDEzICsxMDc2LDEzIEBAIGJv
b2wgUHJveHlPYmplY3Q6OnBlcmZvcm1TZXRQcm90b3R5cGUoRXgKICAgICB9CiAKICAgICBib29s
IHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwotICAgIGlm
ICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRXh0ZW5zaWJsZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBKU1ZhbHVlIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC0+
Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmICghc2FtZVZhbHVlKGV4ZWMsIHByb3RvdHlwZSwgdGFyZ2V0UHJvdG90eXBlKSkgewogICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlByb3h5ICdz
ZXRQcm90b3R5cGVPZicgdHJhcCByZXR1cm5lZCB0cnVlIHdoZW4gaXRzIHRhcmdldCBpcyBub24t
ZXh0ZW5zaWJsZSBhbmQgdGhlIG5ldyBwcm90b3R5cGUgdmFsdWUgaXMgbm90IHRoZSBzYW1lIGFz
IHRoZSBjdXJyZW50IHByb3RvdHlwZSB2YWx1ZS4gSXQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZmFs
c2UiKSk7CkBAIC0xMTEyLDcgKzExMTYsNyBAQCBKU1ZhbHVlIFByb3h5T2JqZWN0OjpwZXJmb3Jt
R2V0UHJvdG90eXBlCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5
cGU7CiAgICAgSlNWYWx1ZSBnZXRQcm90b3R5cGVPZk1ldGhvZCA9IGhhbmRsZXItPmdldE1ldGhv
ZChleGVjLCBjYWxsRGF0YSwgY2FsbFR5cGUsIG1ha2VJZGVudGlmaWVyKHZtLCAiZ2V0UHJvdG90
eXBlT2YiKSwgQVNDSUlMaXRlcmFsKCInZ2V0UHJvdG90eXBlT2YnIHByb3BlcnR5IG9mIGEgUHJv
eHkncyBoYW5kbGVyIHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKIAogICAgIEpTT2JqZWN0KiB0YXJnZXQgPSB0aGlzLT50YXJnZXQoKTsKQEAg
LTExMjIsNyArMTEyNiw3IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5
cGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1lbnRzLmFw
cGVuZCh0YXJnZXQpOwogICAgIEpTVmFsdWUgdHJhcFJlc3VsdCA9IGNhbGwoZXhlYywgZ2V0UHJv
dG90eXBlT2ZNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsK
LSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKIAogICAgIGlmICghdHJhcFJlc3VsdC5p
c09iamVjdCgpICYmICF0cmFwUmVzdWx0LmlzTnVsbCgpKSB7CkBAIC0xMTMxLDEzICsxMTM1LDEz
IEBAIEpTVmFsdWUgUHJveHlPYmplY3Q6OnBlcmZvcm1HZXRQcm90b3R5cGUKICAgICB9CiAKICAg
ICBib29sIHRhcmdldElzRXh0ZW5zaWJsZSA9IHRhcmdldC0+aXNFeHRlbnNpYmxlKGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIGlmICh0YXJnZXRJc0V4dGVuc2li
bGUpCiAgICAgICAgIHJldHVybiB0cmFwUmVzdWx0OwogCiAgICAgSlNWYWx1ZSB0YXJnZXRQcm90
b3R5cGUgPSB0YXJnZXQtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgaWYgKCFzYW1lVmFsdWUoZXhlYywgdGFyZ2V0UHJvdG90eXBl
LCB0cmFwUmVzdWx0KSkgewogICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIlByb3h5J3MgJ2dldFByb3RvdHlwZU9mJyB0cmFwIGZvciBhIG5vbi1leHRl
bnNpYmxlIHRhcmdldCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSB0YXJnZXQn
cyBwcm90b3R5cGUiKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZs
ZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3
ICsxMjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdChleGVjLCB0YXJn
ZXQsIGNvbnN0cnVjdFR5cGUsIGNvbnN0cnVjdERhdGEsIGFyZ3VtZW50cywgbmV3VGFyZ2V0KSk7
CkBAIC0xMzksMTQgKzEzOSwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxl
Y3RPYmplCiAgICAgaWYgKCF0YXJnZXQuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZs
ZWN0LmRlZmluZVByb3BlcnR5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmpl
Y3QiKSkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwog
ICAgIGlmICghdG9Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgZXhlYy0+YXJndW1lbnQoMiksIGRl
c2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIEFTU0VSVCgoZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkgJiBBY2Nlc3NvcikgfHwgKCFk
ZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9yKCkpKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIC8v
IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvciB3aGVuIHRo
ZSBkZWZpbmVPd25Qcm9wZXJ0eSBvcGVyYXRpb24gZmFpbHMuCiAgICAgYm9vbCBzaG91bGRUaHJv
dyA9IGZhbHNlOwpAQCAtMTc4LDcgKzE3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVF
cnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0LmdldCByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKIAogICAgIGNvbnN0IElkZW50aWZpZXIg
cHJvcGVydHlOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9wZXJ0eUtleShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CiAKICAg
ICBKU1ZhbHVlIHJlY2VpdmVyID0gdGFyZ2V0OwpAQCAtMjAwLDcgKzIwMCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVmbGVjdE9iamUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZWZsZWN0
LmdldE93blByb3BlcnR5RGVzY3JpcHRvciByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUg
YW4gb2JqZWN0IikpKTsKIAogICAgIGF1dG8ga2V5ID0gZXhlYy0+YXJndW1lbnQoMSkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUob2JqZWN0Q29u
c3RydWN0b3JHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgYXNPYmplY3QodGFyZ2V0KSwg
a2V5KSk7CkBAIC0yMjksNyArMjI5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBy
ZWZsZWN0T2JqZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlJlZmxlY3QuaXNFeHRlbnNpYmxlIHJlcXVpcmVz
IHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3QiKSkpOwogCiAgICAgYm9vbCBpc0V4dGVu
c2libGUgPSBhc09iamVjdCh0YXJnZXQpLT5pc0V4dGVuc2libGUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpc0V4dGVuc2libGUpKTsKIH0KQEAgLTI1Nyw3ICsy
NTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZmxlY3RPYmplCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyByZXF1aXJlcyB0aGUgZmlyc3QgYXJn
dW1lbnQgYmUgYW4gb2JqZWN0IikpKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
dGFyZ2V0KTsKICAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5wcmV2
ZW50RXh0ZW5zaW9ucyhvYmplY3QsIGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ocmVzdWx0KSk7CiB9CkBAIC0yNzQsNyArMjc0LDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCByZWZsZWN0T2JqZQogICAgIEpTT2JqZWN0KiB0YXJnZXRPYmplY3QgPSBh
c09iamVjdCh0YXJnZXQpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBleGVjLT5hcmd1bWVu
dCgxKS50b1Byb3BlcnR5S2V5KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSByZWNlaXZlciA9IHRh
cmdldDsKQEAgLTMwNyw3ICszMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
ZmxlY3RPYmplCiAKICAgICBib29sIHNob3VsZFRocm93SWZDYW50U2V0ID0gZmFsc2U7CiAgICAg
Ym9vbCBkaWRTZXRQcm90b3R5cGUgPSBvYmplY3QtPnNldFByb3RvdHlwZSh2bSwgZXhlYywgcHJv
dG8sIHNob3VsZFRocm93SWZDYW50U2V0KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGRpZFNldFByb3RvdHlwZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTYsMTMgKzIxNiwxMyBAQCBpbmxpbmUgUmVnRXhwRmxhZ3MgdG9GbGFn
cyhFeGVjU3RhdGUqIGV4CiAgICAgaWYgKGZsYWdzLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJl
dHVybiBOb0ZsYWdzOwogICAgIEpTU3RyaW5nKiBmbGFnc1N0cmluZyA9IGZsYWdzLnRvU3RyaW5n
KGV4ZWMpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBmbGFnc1N0cmluZyk7CiAg
ICAgaWYgKCFmbGFnc1N0cmluZykgewotICAgICAgICBBU1NFUlQoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpOwogICAgICAgICByZXR1cm4gSW52YWxpZEZsYWdzOwogICAgIH0KIAogICAgIFJlZ0V4cEZs
YWdzIHJlc3VsdCA9IHJlZ0V4cEZsYWdzKGZsYWdzU3RyaW5nLT52YWx1ZShleGVjKSk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBJbnZhbGlkRmxhZ3M7CiAgICAgaWYgKHJlc3VsdCA9PSBJ
bnZhbGlkRmxhZ3MpCiAgICAgICAgIHRocm93U3ludGF4RXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0byBSZWdFeHAgY29uc3RydWN0b3IuIikp
OwpAQCAtMjM1LDcgKzIzNSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNT
dGF0ZSoKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBT
dHJpbmcgcGF0dGVybiA9IHBhdHRlcm5BcmcuaXNVbmRlZmluZWQoKSA/IGVtcHR5U3RyaW5nKCkg
OiBwYXR0ZXJuQXJnLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWdFeHBGbGFncyBmbGFncyA9IHRvRmxhZ3Mo
ZXhlYywgZmxhZ3NBcmcpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVn
RXhwQ3JlYXRlKEV4ZWNTdGF0ZSoKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKGV4ZWMs
IHNjb3BlLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCByZWdFeHAtPmVycm9yTWVzc2FnZSgpKSk7
CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBn
bG9iYWxPYmplY3QsIG5ld1RhcmdldCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIHJldHVybiBSZWdFeHBPYmplY3Q6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCByZWdFeHApOwog
fQpAQCAtMjU1LDYgKzI1NSw3IEBAIHN0YXRpYyBKU09iamVjdCogcmVnRXhwQ3JlYXRlKEV4ZWNT
dGF0ZSoKIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCAgSlNPYmplY3QqIGNh
bGxlZSwgSlNWYWx1ZSBuZXdUYXJnZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNWYWx1ZSBwYXR0
ZXJuQXJnID0gYXJncy5hdCgwKTsKICAgICBKU1ZhbHVlIGZsYWdzQXJnID0gYXJncy5hdCgxKTsK
IApAQCAtMjYzLDcgKzI2NCw3IEBAIEpTT2JqZWN0KiBjb25zdHJ1Y3RSZWdFeHAoRXhlY1N0YXRl
KiBleGUKIAogICAgIGlmIChuZXdUYXJnZXQuaXNVbmRlZmluZWQoKSAmJiBjb25zdHJ1Y3RBc1Jl
Z2V4cCAmJiBmbGFnc0FyZy5pc1VuZGVmaW5lZCgpKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3Ry
dWN0b3IgPSBwYXR0ZXJuQXJnLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3Rv
cik7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBp
ZiAoY2FsbGVlID09IGNvbnN0cnVjdG9yKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQg
cGF0dGVybkFyZyBpcyBhIG9iamVjdCBvdGhlcndpc2UgY29uc3RydWN0QXNSZWdleHAgd291bGQg
YmUgZmFsc2UuCkBAIC0yNzQsNyArMjc1LDcgQEAgSlNPYmplY3QqIGNvbnN0cnVjdFJlZ0V4cChF
eGVjU3RhdGUqIGV4ZQogICAgIGlmIChpc1BhdHRlcm5SZWdFeHApIHsKICAgICAgICAgUmVnRXhw
KiByZWdFeHAgPSBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4ocGF0dGVybkFyZyktPnJlZ0V4cCgpOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldFJlZ0V4cFN0cnVjdHVyZShleGVjLCBn
bG9iYWxPYmplY3QsIG5ld1RhcmdldCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmICghZmxhZ3NBcmcuaXNVbmRlZmluZWQoKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTIgKzEzMywx
MyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgUmVnRXhwQ29uc3RydWN0b3I6OnJlCiAKIEFMV0FZU19J
TkxJTkUgYm9vbCBpc1JlZ0V4cChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwogICAgIEpTVmFsdWUgbWF0Y2hWYWx1ZSA9IG9i
amVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPm1hdGNoU3ltYm9sKTsKLSAgICBpZiAo
dm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbWF0Y2hWYWx1ZS5pc1VuZGVmaW5lZCgpKQog
ICAgICAgICByZXR1cm4gbWF0Y2hWYWx1ZS50b0Jvb2xlYW4oZXhlYyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBKU1ZhbHVlIGNvbGxlY3RNYXRjaGVz
KFZNJiB2bSwgRXhlY1N0YXRlCiAgICAgc3RhdGljIHVuc2lnbmVkIG1heFNpemVGb3JEaXJlY3RQ
YXRoID0gMTAwMDAwOwogICAgIAogICAgIEpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgYXV0byBpdGVyYXRlID0gWyZdICgpIHsKQEAgLTIzMywxNCArMjMz
LDE0IEBAIEpTVmFsdWUgY29sbGVjdE1hdGNoZXMoVk0mIHZtLCBFeGVjU3RhdGUKIAogSlNWYWx1
ZSBSZWdFeHBPYmplY3Q6Om1hdGNoR2xvYmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKIHsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CiAKICAgICBBU1NFUlQocmVn
RXhwLT5nbG9iYWwoKSk7CiAKLSAgICBWTSogdm0gPSAmZ2xvYmFsT2JqZWN0LT52bSgpOwotCiAg
ICAgc2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIFN0cmluZyBzID0gc3RyaW5nLT52YWx1ZShleGVjKTsKQEAgLTI0
OSwxNCArMjQ5LDE0IEBAIEpTVmFsdWUgUmVnRXhwT2JqZWN0OjptYXRjaEdsb2JhbChFeGVjU3QK
ICAgICBpZiAocmVnRXhwLT51bmljb2RlKCkpIHsKICAgICAgICAgdW5zaWduZWQgc3RyaW5nTGVu
Z3RoID0gcy5sZW5ndGgoKTsKICAgICAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAotICAgICAg
ICAgICAgKnZtLCBleGVjLCBzdHJpbmcsIHMsIHJlZ0V4cENvbnN0cnVjdG9yLCByZWdFeHAsCisg
ICAgICAgICAgICB2bSwgZXhlYywgc3RyaW5nLCBzLCByZWdFeHBDb25zdHJ1Y3RvciwgcmVnRXhw
LAogICAgICAgICAgICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAg
ICAgIHJldHVybiBhZHZhbmNlU3RyaW5nVW5pY29kZShzLCBzdHJpbmdMZW5ndGgsIGVuZCk7CiAg
ICAgICAgICAgICB9KTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGNvbGxlY3RNYXRjaGVzKAot
ICAgICAgICAqdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwK
KyAgICAgICAgdm0sIGV4ZWMsIHN0cmluZywgcywgcmVnRXhwQ29uc3RydWN0b3IsIHJlZ0V4cCwK
ICAgICAgICAgWyZdIChzaXplX3QgZW5kKSAtPiBzaXplX3QgewogICAgICAgICAgICAgcmV0dXJu
IGVuZCArIDE7CiAgICAgICAgIH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksMTMgKzE1OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJl
Z0V4cFByb3RvCiAgICAgICAgIHJlZ0V4cCA9IGFzUmVnRXhwT2JqZWN0KGFyZzApLT5yZWdFeHAo
KTsKICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICFleGVjLT5hcmd1bWVu
dENvdW50KCkgPyBlbXB0eVN0cmluZygpIDogYXJnMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
Yyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSBOb0ZsYWdz
OwogICAgICAgICBpZiAoIWFyZzEuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgZmxhZ3Mg
PSByZWdFeHBGbGFncyhhcmcxLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgICAgICBpZiAoZmxhZ3MgPT0gSW52YWxpZEZsYWdz
KQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBmbGFncyBzdXBwbGllZCB0
byBSZWdFeHAgY29uc3RydWN0b3IuIikpKTsKQEAgLTE4OSwyMSArMTg5LDIyIEBAIHN0YXRpYyBp
bmxpbmUgRmxhZ3NTdHJpbmcgZmxhZ3NTdHJpbmcoRXgKICAgICBzdHJpbmdbMF0gPSAwOwogCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGdsb2JhbFZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJp
bmc7CiAgICAgSlNWYWx1ZSBpZ25vcmVDYXNlVmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBzdHJp
bmc7CiAgICAgSlNWYWx1ZSBtdWx0aWxpbmVWYWx1ZSA9IHJlZ2V4cC0+Z2V0KGV4ZWMsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5n
OwogICAgIEpTVmFsdWUgdW5pY29kZVZhbHVlID0gcmVnZXhwLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnVuaWNvZGUpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gc3RyaW5nOwogICAg
IEpTVmFsdWUgc3RpY2t5VmFsdWUgPSByZWdleHAtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuc3RpY2t5KTsKLSAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIHN0cmluZzsKIAogICAgIHVuc2ln
bmVkIGluZGV4ID0gMDsKQEAgLTIzOCwxNyArMjM5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlYXJs
eVJldHVyblZhbHVlKTsKIAogICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSB0aGlzT2JqZWN0LT5n
ZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlKTsKLSAgICBpZiAodm0uZXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBTdHJpbmcgc291cmNlID0gc291
cmNlVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSlNWYWx1ZSBmbGFnc1Zh
bHVlID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPmZsYWdzKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBT
dHJpbmcgZmxhZ3MgPSBmbGFnc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAnLycs
IHNvdXJjZSwgJy8nLCBmbGFncykpOwpAQCAtMzM5LDcgKzM0MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3Mg
Z2V0dGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBhbiBvYmplY3QiKSk7CiAKICAgICBhdXRvIGZs
YWdzID0gZmxhZ3NTdHJpbmcoZXhlYywgYXNPYmplY3QodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGZsYWdzLmRhdGEoKSkpOwpAQCAt
NDcyLDEyICs0NzMsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90
bwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90b0Z1bmNTZWFyY2hGYXN0
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPnRoaXNWYWx1ZSgpOwogICAgIFJlZ0V4cCogcmVnRXhwID0gYXNSZWdFeHBPYmplY3Qo
dGhpc1ZhbHVlKS0+cmVnRXhwKCk7CiAKICAgICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CiAgICAgU3RyaW5nIHMgPSBzdHJpbmct
PnZhbHVlKGV4ZWMpOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpOwpAQCAtNTg2
LDcgKzU4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG8KICAg
ICAvLyAzLiBbaGFuZGxlZCBieSBKUyBidWlsdGluXSBMZXQgUyBiZSA/IFRvU3RyaW5nKHN0cmlu
ZykuCiAgICAgSlNTdHJpbmcqIGlucHV0U3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJp
bmcoZXhlYyk7CiAgICAgU3RyaW5nIGlucHV0ID0gaW5wdXRTdHJpbmctPnZhbHVlKGV4ZWMpOwot
ICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IEFTU0VSVCghaW5wdXQuaXNOdWxsKCkpOwogCkBAIC02MDEsNyArNjAzLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIC8vIDExLiBMZXQgQSBiZSBBcnJh
eUNyZWF0ZSgwKS4KICAgICAvLyAxMi4gTGV0IGxlbmd0aEEgYmUgMC4KICAgICBKU0FycmF5KiBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2
bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB1bnNpZ25l
ZCByZXN1bHRMZW5ndGggPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldCk7CiAKICAgICBKU1ZhbHVlIGFk
ZGVyRnVuY3Rpb24gPSBzZXQtPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYWRkKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0Nv
bnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmkKIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBkb3VibGUgY29kZVBvaW50QXNEb3VibGUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudChpKS50b051bWJlcihleGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgICAgICB1aW50MzJfdCBjb2RlUG9pbnQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
Y29kZVBvaW50QXNEb3VibGUpOwpAQCAtMTIyLDEwICsxMjIsMTEgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaQogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29uc3RydWN0V2l0aFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4
ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBJbnRlcm5h
bEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQo
KSwgZ2xvYmFsT2JqZWN0LT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKIAogICAgIGlmICghZXhl
Yy0+YXJndW1lbnRDb3VudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RyaW5nT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJpbmdPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
NiArMTA4LDggQEAgc3RhdGljIGJvb2wgaXNTdHJpbmdPd25Qcm9wZXJ0eShFeGVjU3RhdAogCiBi
b29sIFN0cmluZ09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCiB7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAgICAgU3RyaW5nT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFN0cmluZ09iamVjdCo+KG9i
amVjdCk7CiAKICAgICBpZiAoaXNTdHJpbmdPd25Qcm9wZXJ0eShleGVjLCB0aGlzT2JqZWN0LCBw
cm9wZXJ0eU5hbWUpKSB7CkBAIC0xMjAsNyArMTIyLDcgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRl
ZmluZU93blByb3BlcnR5KEpTTwogICAgICAgICBib29sIGlzQ3VycmVudERlZmluZWQgPSB0aGlz
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhlYywgcHJvcGVydHlOYW1lLCBjdXJy
ZW50KTsKICAgICAgICAgQVNTRVJUKGlzQ3VycmVudERlZmluZWQpOwogICAgICAgICBib29sIGlz
RXh0ZW5zaWJsZSA9IHRoaXNPYmplY3QtPmlzRXh0ZW5zaWJsZShleGVjKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdmFsaWRh
dGVBbmRBcHBseVByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBudWxscHRyLCBwcm9wZXJ0eU5hbWUs
IGlzRXh0ZW5zaWJsZSwgZGVzY3JpcHRvciwgaXNDdXJyZW50RGVmaW5lZCwgY3VycmVudCwgdGhy
b3dFeGNlcHRpb24pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDc3LDkgKzQ3NywxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZXBsCiAgICAgVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcsIEpT
VmFsdWUgc2VhcmNoVmFsdWUsIENhbGxEYXRhJiBjYWxsRGF0YSwKICAgICBDYWxsVHlwZSBjYWxs
VHlwZSwgU3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCiB7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2UgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIHVuc2lnbmVkIHNvdXJj
ZUxlbiA9IHNvdXJjZS5sZW5ndGgoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVj
dCA9IGFzUmVnRXhwT2JqZWN0KHNlYXJjaFZhbHVlKTsKICAgICBSZWdFeHAqIHJlZ0V4cCA9IHJl
Z0V4cE9iamVjdC0+cmVnRXhwKCk7CkBAIC00ODgsNyArNDkwLDcgQEAgc3RhdGljIEFMV0FZU19J
TkxJTkUgRW5jb2RlZEpTVmFsdWUgcmVwbAogICAgIGlmIChnbG9iYWwpIHsKICAgICAgICAgLy8g
RVM1LjEgMTUuNS40LjEwIHN0ZXAgOC5hLgogICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJ
bmRleChleGVjLCAwKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBpZiAoY2FsbFR5cGUgPT0g
Q2FsbFR5cGU6Ok5vbmUgJiYgIXJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpKQpAQCAtNTExLDcg
KzUxMyw3IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAg
ICAgaW50IGFyZ0NvdW50ID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSArIDI7CiAgICAg
ICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHJlcGxhY2VWYWx1ZSk7
CiAgICAgICAgIENhY2hlZENhbGwgY2FjaGVkQ2FsbChleGVjLCBmdW5jLCBhcmdDb3VudCk7Ci0g
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgICAgIGlmIChzb3VyY2UuaXM4Qml0KCkpIHsKICAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CkBAIC01MzksNyArNTQxLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUg
RW5jb2RlZEpTVmFsdWUgcmVwbAogICAgICAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzUmVzdWx0ID0gY2FjaGVk
Q2FsbC5jYWxsKCk7CiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLmFwcGVuZChqc1Jlc3Vs
dC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmVuZDsK
QEAgLTU3OCw3ICs1ODAsNyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBy
ZXBsCiAgICAgICAgICAgICAgICAgY2FjaGVkQ2FsbC5zZXRUaGlzKGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICAgICAgICAgIEpTVmFsdWUganNSZXN1bHQgPSBjYWNoZWRDYWxsLmNhbGwoKTsKICAg
ICAgICAgICAgICAgICByZXBsYWNlbWVudHMuYXBwZW5kKGpzUmVzdWx0LnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAK
ICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSByZXN1bHQuZW5kOwpAQCAtNjE4LDcgKzYyMCw3
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIHJlcGwKICAgICAgICAgICAg
ICAgICBhcmdzLmFwcGVuZChzdHJpbmcpOwogCiAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRz
LmFwcGVuZChjYWxsKGV4ZWMsIHJlcGxhY2VWYWx1ZSwgY2FsbFR5cGUsIGNhbGxEYXRhLCBqc1Vu
ZGVmaW5lZCgpLCBhcmdzKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgICAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpbnQgcmVwbExlbiA9IHJlcGxhY2VtZW50U3RyaW5nLmxlbmd0aCgpOwpAQCAt
NjU4LDEyICs2NjAsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25T
dAogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIAorICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIFJlZ0V4cCogcmVnRXhwID0gc2VhcmNoVmFsdWUtPnJlZ0V4cCgp
OwogICAgIGlmIChyZWdFeHAtPmdsb2JhbCgpKSB7CiAgICAgICAgIC8vIEVTNS4xIDE1LjUuNC4x
MCBzdGVwIDguYS4KICAgICAgICAgc2VhcmNoVmFsdWUtPnNldExhc3RJbmRleChleGVjLCAwKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0dXJuIHJlbW92ZVVzaW5nUmVnRXhwU2VhcmNoKHZt
LCBleGVjLCB0aGlzVmFsdWUsIHRoaXNWYWx1ZS0+dmFsdWUoZXhlYyksIHJlZ0V4cCk7CiAgICAg
fQpAQCAtNjg4LDEyICs2OTEsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25TdAogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNp
bmdSZWdFeHBTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcs
IEpTVmFsdWUgc2VhcmNoVmFsdWUsIEpTVmFsdWUgcmVwbGFjZVZhbHVlKQogeworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmluZyByZXBsYWNlbWVu
dFN0cmluZzsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IGdldENhbGxEYXRhKHJlcGxhY2VWYWx1ZSwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9
PSBDYWxsVHlwZTo6Tm9uZSkgewogICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHJlcGxhY2VW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQog
CkBAIC03MDEsMTEgKzcwNiwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1
ZSByZXBsCiAgICAgICAgIHZtLCBleGVjLCBzdHJpbmcsIHNlYXJjaFZhbHVlLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIHJlcGxhY2VtZW50U3RyaW5nLCByZXBsYWNlVmFsdWUpOwogfQogCi1zdGF0aWMg
QUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goVk0m
LCBFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1
ZSwgSlNWYWx1ZSByZXBsYWNlVmFsdWUpCitzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNW
YWx1ZSByZXBsYWNlVXNpbmdTdHJpbmdTZWFyY2goVk0mIHZtLCBFeGVjU3RhdGUqIGV4ZWMsIEpT
U3RyaW5nKiBqc1N0cmluZywgSlNWYWx1ZSBzZWFyY2hWYWx1ZSwgSlNWYWx1ZSByZXBsYWNlVmFs
dWUpCiB7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
Y29uc3QgU3RyaW5nJiBzdHJpbmcgPSBqc1N0cmluZy0+dmFsdWUoZXhlYyk7CiAgICAgU3RyaW5n
IHNlYXJjaFN0cmluZyA9IHNlYXJjaFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIHNpemVfdCBtYXRjaFN0YXJ0ID0gc3RyaW5nLmZpbmQoc2VhcmNoU3RyaW5nKTsK
QEAgLTcyMSwxMiArNzI4LDEyIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVl
IHJlcGwKICAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIobWF0Y2hTdGFydCkpOwogICAgICAg
ICBhcmdzLmFwcGVuZChqc1N0cmluZyk7CiAgICAgICAgIHJlcGxhY2VWYWx1ZSA9IGNhbGwoZXhl
YywgcmVwbGFjZVZhbHVlLCBjYWxsVHlwZSwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIGFyZ3Mp
OwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIAogICAgIFN0cmluZyByZXBsYWNlU3RyaW5nID0gcmVw
bGFjZVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcuaW1wbCgpOwpAQCAtODExLDE1ICs4MTgsMTggQEAgQUxX
QVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSByZXBsYWNlKAogICAgIGlmICghY2hlY2tPYmplY3RD
b2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgcmV0dXJuIHJlcGxhY2Uodm0sIGV4ZWMsIHN0cmluZywgc2VhcmNoVmFsdWUs
IHJlcGxhY2VWYWx1ZSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jUmVwbGFjZVVzaW5nUmVnRXhwKEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBleGVjLT50aGlzVmFsdWUoKS50b1N0cmluZyhl
eGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIAogICAgIEpTVmFsdWUgc2VhcmNoVmFsdWUgPSBleGVjLT5hcmd1bWVudCgwKTsK
QEAgLTgzMSw4ICs4NDEsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1JlcGxh
Y2VVc2luZ1N0cmluZ1NlYXJjaChFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBKU1N0cmluZyogc3RyaW5nID0gZXhlYy0+dGhpc1ZhbHVlKCkudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICByZXR1cm4gcmVwbGFjZVVzaW5nU3RyaW5nU2VhcmNoKGV4ZWMtPnZtKCksIGV4ZWMs
IHN0cmluZywgZXhlYy0+YXJndW1lbnQoMCksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKQEAgLTk0MSw3
ICs5NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAg
aWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogCiAgICAgZG91YmxlIGRvdWJsZVBvc2l0aW9uID0gYXJndW1lbnQwLnRvSW50ZWdl
cihleGVjKTsKQEAgLTEwNTMsNyArMTA2Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJp
bmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBp
bnQgbGVuID0gcy5sZW5ndGgoKTsKQEAgLTExMTEsMjAgKzExMjQsMjEgQEAgc3RhdGljIEFMV0FZ
U19JTkxJTkUgYm9vbCBzcGxpdFN0cmluZ0J5TwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNTcGxpdEZhc3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJU
KGNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpOwogCiAgICAgLy8gMy4gTGV0IFMgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvU3RyaW5nLCBnaXZpbmcgaXQgdGhlIHRoaXMgdmFsdWUg
YXMgaXRzIGFyZ3VtZW50LgogICAgIC8vIDcuIExldCBzIGJlIHRoZSBudW1iZXIgb2YgY2hhcmFj
dGVycyBpbiBTLgogICAgIFN0cmluZyBpbnB1dCA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+
dmFsdWUoZXhlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEFTU0VSVCghaW5wdXQuaXNOdWxsKCkpOwogCiAgICAg
Ly8gNC4gTGV0IEEgYmUgYSBuZXcgYXJyYXkgY3JlYXRlZCBhcyBpZiBieSB0aGUgZXhwcmVzc2lv
biBuZXcgQXJyYXkoKQogICAgIC8vICAgIHdoZXJlIEFycmF5IGlzIHRoZSBzdGFuZGFyZCBidWls
dC1pbiBjb25zdHJ1Y3RvciB3aXRoIHRoYXQgbmFtZS4KICAgICBKU0FycmF5KiByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDApOwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIC8vIDUuIExldCBsZW5n
dGhBIGJlIDAuCkBAIC0xMTQxLDcgKzExNTUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvCiAgICAgLy8gICAgb3RoZXJ3aXNlIGxldCBSID0gVG9TdHJpbmcoc2Vw
YXJhdG9yKS4KICAgICBKU1ZhbHVlIHNlcGFyYXRvclZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCk7CiAgICAgU3RyaW5nIHNlcGFyYXRvciA9IHNlcGFyYXRvclZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAvLyAxMC4gSWYgbGltID09IDAsIHJl
dHVybiBBLgpAQCAtMTI1MCw3ICsxMjY0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90bwogICAgICAgICBsZW4gPSBqc1N0cmluZy0+bGVuZ3RoKCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgdVN0cmluZyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIGxlbiA9IHVTdHJpbmcubGVuZ3RoKCk7CiAg
ICAgfQpAQCAtMTMwMyw3ICsxMzE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAKICAgICBKU1N0cmluZyoganNTdHJpbmcgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xMzc3LDEyICsxMzkx
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAo
IWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0gZXhlYy0+YXJndW1l
bnQoMCk7CiAgICAgU3RyaW5nIHN0ciA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKENvbGxhdG9yKCkuY29sbGF0
ZShzLCBzdHIpKSk7CiB9CkBAIC0xNDAzLDcgKzE0MTcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgdG9Mb2NhbGVDYXNlKEV4ZWNTCiAgICAgY29uc3QgU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUo
c3RhdGUpOwogCiAgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoUykuCi0gICAgaWYgKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgLy8gT3B0
aW1pemF0aW9uIGZvciBlbXB0eSBzdHJpbmdzLgpAQCAtMTQxNCw3ICsxNDI4LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHRvTG9jYWxlQ2FzZShFeGVjUwogICAgIFZlY3RvcjxTdHJpbmc+IHJl
cXVlc3RlZExvY2FsZXMgPSBjYW5vbmljYWxpemVMb2NhbGVMaXN0KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKIAogICAgIC8vIDUuIFJldHVybklmQWJydXB0KHJlcXVlc3RlZExvY2FsZXMp
LgotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIC8vIDYuIExldCBsZW4gYmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBy
ZXF1ZXN0ZWRMb2NhbGVzLgpAQCAtMTQ5OCw3ICsxNTEyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICghY2hlY2tPYmplY3RDb2VyY2libGUodGhp
c1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywg
IjxiaWc+IiwgcywgIjwvYmlnPiIpKTsKIH0KQEAgLTE1MTIsNyArMTUyNiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3Ry
aW5nKGV4ZWMsICI8c21hbGw+IiwgcywgIjwvc21hbGw+IikpOwogfQpAQCAtMTUyNiw3ICsxNTQw
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTWFr
ZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxibGluaz4iLCBzLCAiPC9ibGluaz4iKSk7CiB9CkBA
IC0xNTQwLDcgKzE1NTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1By
b3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlz
VmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPGI+IiwgcywgIjwvYj4iKSk7
CiB9CkBAIC0xNTU0LDcgKzE1NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMg
PSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJpdmlhbFN0cmluZyhleGVjLCAiPHR0PiIsIHMsICI8
L3R0PiIpKTsKIH0KQEAgLTE1NjgsNyArMTU4Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1
ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBT
dHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMsICI8aT4i
LCBzLCAiPC9pPiIpKTsKIH0KQEAgLTE1ODIsNyArMTU5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRo
aXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
ICAgICBTdHJpbmcgcyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc01ha2VOb250cml2aWFsU3RyaW5nKGV4ZWMs
ICI8c3RyaWtlPiIsIHMsICI8L3N0cmlrZT4iKSk7CiB9CkBAIC0xNTk2LDcgKzE2MTAsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09i
amVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjLCBzY29wZSk7CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNNYWtlTm9udHJp
dmlhbFN0cmluZyhleGVjLCAiPHN1Yj4iLCBzLCAiPC9zdWI+IikpOwogfQpAQCAtMTYxMCw3ICsx
NjI0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlm
ICghY2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TWFrZU5vbnRyaXZpYWxTdHJpbmcoZXhlYywgIjxzdXA+IiwgcywgIjwvc3VwPiIpKTsKIH0KQEAg
LTE2MjQsNyArMTYzOCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcgcyA9IHRoaXNW
YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIGEwID0g
ZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNjQzLDcgKzE2NTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgaWYgKCFjaGVja09iamVjdENvZXJjaWJsZSh0
aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwpAQCAtMTY5OCw3ICsxNzEy
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwogICAgIGlmICgh
Y2hlY2tPYmplY3RDb2VyY2libGUodGhpc1ZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoZXhlYywgc2NvcGUpOwogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5n
KGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVu
dCgwKTsKQEAgLTE3MTcsNyArMTczMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29lcmNpYmxlKHRoaXNWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBTdHJpbmcg
cyA9IHRoaXNWYWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1Zh
bHVlIGEwID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC0xNzY1LDcgKzE3NzksNyBAQCBzdGF0aWMg
aW5saW5lIEpTVmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhCiAgICAgaWYgKCFjaGVja09iamVjdENv
ZXJjaWJsZSh0aGlzVmFsdWUpKQogICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwogICAgIFN0cmluZyBzdHIgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
IHVuc2lnbmVkIGxlZnQgPSAwOwpAQCAtMTgyMywxOCArMTgzNywxOCBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1Zh
bHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4
cCh2bSwgZXhlYywgYTApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7CiAgICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlw
ZS5zdGFydHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwogCiAgICAgU3RyaW5nIHNlYXJjaFN0
cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUg
cG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKQEAgLTE4NDQsNyArMTg1OCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBlbHNlIHsKICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKICAgICAgICAg
c3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIo
ZXhlYyksIDAsIGxlbmd0aCk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgfQogCkBAIC0xODYxLDE4ICsx
ODc1LDE4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUpOwogCiAgICAgU3RyaW5nIHN0
cmluZ1RvU2VhcmNoSW4gPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGJvb2wgaXNSZWd1
bGFyRXhwcmVzc2lvbiA9IGlzUmVnRXhwKHZtLCBleGVjLCBhMCk7Ci0gICAgaWYgKHZtLmV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBpZiAoaXNSZWd1bGFyRXhwcmVz
c2lvbikKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYywgc2NvcGUsICJBcmd1
bWVudCB0byBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoIGNhbm5vdCBiZSBhIFJlZ0V4cCIpOwog
CiAgICAgU3RyaW5nIHNlYXJjaFN0cmluZyA9IGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7
CkBAIC0xODgzLDcgKzE4OTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgICAgIGVuZCA9IHN0ZDo6bWF4KDAsIGVuZFBvc2l0aW9uQXJnLmFzSW50MzIo
KSk7CiAgICAgZWxzZSBpZiAoIWVuZFBvc2l0aW9uQXJnLmlzVW5kZWZpbmVkKCkpIHsKICAgICAg
ICAgZW5kID0gY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWduZWQoZW5kUG9zaXRpb25BcmcudG9JbnRl
Z2VyKGV4ZWMpLCAwLCBsZW5ndGgpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIH0KIApAQCAtMTg5Miwx
MyArMTkwNiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ0luY2x1ZGVzSW1wbChW
TSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgU3RyaW5nIHN0cmluZ1RvU2VhcmNoSW4sIFN0cmluZyBz
ZWFyY2hTdHJpbmcsIEpTVmFsdWUgcG9zaXRpb25BcmcpCiB7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKICAgICBpZiAo
cG9zaXRpb25BcmcuaXNJbnQzMigpKQogICAgICAgICBzdGFydCA9IHN0ZDo6bWF4KDAsIHBvc2l0
aW9uQXJnLmFzSW50MzIoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHN0cmluZ1RvU2VhcmNoSW4ubGVuZ3RoKCk7CiAgICAgICAgIHN0YXJ0ID0gY2xhbXBBbmRUcnVu
Y2F0ZVRvVW5zaWduZWQocG9zaXRpb25BcmcudG9JbnRlZ2VyKGV4ZWMpLCAwLCBsZW5ndGgpOwot
ICAgICAgICBpZiAodm0uZXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIH0KIApAQCAtMTkxNSwxOCArMTkzMCwxOCBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGV4ZWMsIHNjb3BlKTsKIAogICAgIFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVl
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBib29sIGlzUmVndWxhckV4cHJlc3Npb24gPSBpc1JlZ0V4cCh2
bSwgZXhlYywgYTApOwotICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7CiAgICAgaWYgKGlzUmVndWxhckV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAiQXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5p
bmNsdWRlcyBjYW5ub3QgYmUgYSBSZWdFeHAiKTsKIAogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcg
PSBhMC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0
aW9uQXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0xOTM2LDE3ICsxOTUxLDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBidWlsdGluU3RyaW5nSW5jbHVkZXNJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1
ZSgpOwogICAgIEFTU0VSVChjaGVja09iamVjdENvZXJjaWJsZSh0aGlzVmFsdWUpKTsKIAogICAg
IFN0cmluZyBzdHJpbmdUb1NlYXJjaEluID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIFN0cmluZyBzZWFyY2hTdHJpbmcgPSBh
MC50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBKU1ZhbHVlIHBvc2l0aW9u
QXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CkBAIC0yMDAyLDE0ICsyMDE5LDE0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICBpZiAoIWNoZWNrT2JqZWN0Q29l
cmNpYmxlKHRoaXNWYWx1ZSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKICAgICBKU1N0cmluZzo6U2FmZVZpZXcgc291cmNlID0gdGhpc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52aWV3KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIGZvcm0g
PSBVTk9STV9ORkM7CiAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGlzIHByb3ZpZGVk
IGFuZCBpcyBub3QgdW5kZWZpbmVkLgogICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRl
ZmluZWQoKSkgewogICAgICAgICBTdHJpbmcgZm9ybVN0cmluZyA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAog
ICAgICAgICBpZiAoZm9ybVN0cmluZyA9PSAiTkZDIikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIw
NTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTEgKzk2LDE0IEBAIENhbGxUeXBlIFN5bWJvbENv
bnN0cnVjdG9yOjpnZXRDYWxsRGF0YSgKIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
eW1ib2xDb25zdHJ1Y3RvckZvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAg
ICBKU1N0cmluZyogc3RyaW5nS2V5ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgU3RyaW5nIHN0cmluZyA9IHN0cmluZ0tleS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMt
PnZtKCkuc3ltYm9sUmVnaXN0cnkoKS5zeW1ib2xGb3JLZXkoc3RyaW5nKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAJ
KHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBs
YXRlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTMgQEAgSlNBcnJh
eSogVGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYgogICAgICAgICByZXR1cm4gY2FjaGVk
OwogCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAgICAgdW5zaWduZWQgY291bnQgPSB0ZW1wbGF0ZUtleS5jb29rZWRT
dHJpbmdzKCkuc2l6ZSgpOwogICAgIEpTQXJyYXkqIHRlbXBsYXRlT2JqZWN0ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCBjb3VudCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICBKU0FycmF5KiByYXdPYmplY3QgPSBjb25zdHJ1Y3RFbXB0
eUFycmF5KGV4ZWMsIG51bGxwdHIsIGNvdW50KTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291
bnQ7ICsraW5kZXgpIHsKQEAgLTU5LDEyICs2MCwxMiBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lz
dHJ5OjpnZXRUZW1wbGF0ZU9iCiAgICAgfQogCiAgICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUo
ZXhlYywgcmF3T2JqZWN0KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5wdXRE
aXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5yYXcsIHJhd09iamVjdCwgUmVhZE9ubHkg
fCBEb250RW51bSB8IERvbnREZWxldGUpOwogCiAgICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUo
ZXhlYywgdGVtcGxhdGVPYmplY3QpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkp
OworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgbV90ZW1wbGF0ZU1hcC5z
ZXQodGVtcGxhdGVLZXksIHRlbXBsYXRlT2JqZWN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rocm93U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwyNTYgKzI2LDI2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGhy
b3dTY29wZS5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogI2luY2x1ZGUgIlZNLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotI2lmIEVOQUJM
RShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9W
RVJJRklDQVRJT04pCiAKLW5hbWVzcGFjZSB7Ci0KLS8vIExvZ3MgYWxsIFRocm93U2NvcGUgYWN0
aXZpdHkgdG8gaGVscCBkZWJ1ZyB0aGUgc291cmNlIG9mIGEgdmVyaWZpY2F0aW9uIGZhaWx1cmUu
Ci1ib29sIHRyYWNlT24gPSBmYWxzZTsKLQotLy8gQSBtb3JlIHZlcmJvc2UgbG9nZ2luZyBvcHRp
b24gdG8gZHVtcCB0aGUgQysrIHN0YWNrIHRyYWNlIGF0IHN0cmF0ZWdpYyBwb2ludHMgdG8gYWlk
IGRlYnVnZ2luZy4KLWJvb2wgdHJhY2VXaXRoU3RhY2tUcmFjZXMgPSBmYWxzZTsKLQotLy8gRGlz
YWJsZWQgdGVtcG9yYXJpbHkgdW50aWwgYWxsIGtub3duIHZlcmlmaWNhdGlvbiBmYWlsdXJlcyBh
cmUgZml4ZWQuCi1ib29sIHZlcmlmaWNhdGlvbk9uID0gZmFsc2U7Ci0KLXVuc2lnbmVkIHRyYWNl
Q291bnQgPSAwOwotfTsKLQotLyoKLSAgICBUaHJvd1Njb3BlIHZlcmlmaWNhdGlvbiB3b3JrcyB0
byBzaW11bGF0ZSBleGNlcHRpb24gdGhyb3dzIGFuZCBjYXRjaCBjYXNlcyB3aGVyZQotICAgIGV4
Y2VwdGlvbiBjaGVja3MgYXJlIG1pc3NpbmcuIFRoaXMgaXMgaG93IGl0IHdvcmtzOgotCi0gMS4g
VGhlIFZNIGhhcyBhIG1fbmVlZEV4Y2VwdGlvbkNoZWNrIGJpdCB0aGF0IGluZGljYXRlcyB3aGVy
ZSBhbiBleGNlcHRpb24gY2hlY2sgaXMKLSAgICBuZWVkZWQuIFlvdSBjYW4gdGhpbmsgb2YgdGhl
IG1fbmVlZEV4Y2VwdGlvbkNoZWNrIGJpdCBiZWluZyBzZXQgYXMgYSBzaW11bGF0ZWQKLSAgICB0
aHJvdy4KLQotIDIuIEV2ZXJ5IHRocm93IHNpdGUgbXVzdCBkZWNsYXJlIGEgVGhyb3dTY29wZSBp
bnN0YW5jZSB1c2luZyBERUNMQVJFX1RIUk9XX1NDT1BFIGF0Ci0gICAgdGhlIHRvcCBvZiBpdHMg
ZnVuY3Rpb24gKGFzIGVhcmx5IGFzIHBvc3NpYmxlKSBlLmcuCi0gCi0gICAgICAgIHZvaWQgZm9v
KC4uLikKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIC4uLik7
Ci0gICAgICAgIH0KLQotICAgIE5vdGU6IFZNOjp0aHJvd0V4Y2VwdGlvbigpIG1ldGhvZHMgYXJl
IHByaXZhdGUsIGFuZCBvbmx5IGNhbGxlYWJsZWJ5IHRoZSBUaHJvd1Njb3BlCi0gICAgZnJpZW5k
IGNsYXNzLiBBbGwgdGhyb3dzIG11c3QgZ28gdGhyb3VnaCBhIFRocm93U2NvcGUuIEhlbmNlLCB3
ZSBhcmUgZ3VhcmFudGVlZCB0aGF0Ci0gICAgYW55IGZ1bmN0aW9uIHRoYXQgY2FuIHRocm93IHdp
bGwgaGF2ZSBhIFRocm93U2NvcGUuCi0KLSAgICBOb3RlOiBieSBjb252ZW50aW9uLCBldmVyeSB0
aHJvdyBoZWxwZXIgZnVuY3Rpb24gbXVzdCB0YWtlIGEgVGhyb3dTY29wZSBhcmd1bWVudAotICAg
IGluc3RlYWQgb2YgaW5zdGFudGlhdGluZyBpdHMgb3duIFRocm93U2NvcGUuICBUaGlzIGFsbG93
cyB0aGUgdGhyb3cgdG8gYmUgYXR0cmlidXRlZAotICAgIHRvIHRoZSBjbGllbnQgY29kZSByYXRo
ZXIgdGhhbiB0aGUgdGhyb3cgaGVscGVyIGl0c2VsZi4KLQotIDMuIFZlcmlmaWNhdGlvbiBvZiBu
ZWVkZWQgZXhjZXB0aW9uIGNoZWNrcwotCi0gICAgYS4gT24gY29uc3RydWN0aW9uLCBlYWNoIFRo
cm93U2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sgaXMKLSAg
ICAgICBub3Qgc2V0LgotIAotICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjYWxsZXIgb2Yg
dGhlIGN1cnJlbnQgZnVuY3Rpb24gaGFzIGNoZWNrZWQgZm9yIGV4Y2VwdGlvbnMKLSAgICAgICB3
aGVyZSBuZWVkZWQgYmVmb3JlIGRvaW5nIG1vcmUgd29yayB3aGljaCBsZWQgdG8gY2FsbGluZyB0
aGUgY3VycmVudCBmdW5jdGlvbi4KLQotICAgIGIuIE9uIGRlc3RydWN0aW9uLCBlYWNoIFRocm93
U2NvcGUgd2lsbCB2ZXJpZnkgdGhhdCBWTTo6bV9uZWVkRXhjZXB0aW9uQ2hlY2sgaXMKLSAgICAg
ICBub3Qgc2V0LiBUaGlzIHZlcmlmaWNhdGlvbiB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIFRocm93
U2NvcGUgaGFzIGJlZW4gcmVsZWFzZWQKLSAgICAgICAoc2VlICg1KSBiZWxvdykuCi0KLSAgICAg
ICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgZnVuY3Rpb24gdGhhdCBvd25zIHRoaXMgVGhyb3dTY29w
ZSBpcyBub3QgbWlzc2luZyBhbnkKLSAgICAgICBleGNlcHRpb24gY2hlY2tzIGJlZm9yZSByZXR1
cm5pbmcuCi0gCi0gICAgYy4gV2hlbiB0aHJvd2luZyBhbiBleGNlcHRpb24sIHRoZSBUaHJvd1Nj
b3BlIHdpbGwgdmVyaWZ5IHRoYXQgVk06Om1fbmVlZEV4Y2VwdGlvbkNoZWNrCi0gICAgICAgaXMg
bm90IHNldCwgdW5sZXNzIGl0J3MgYmVlbiBhc2sgdG8gcmV0aHJvdyB0aGUgc2FtZSBFeGNlcHRp
b24gb2JqZWN0LgotCi0gNC4gU2ltdWxhdGVkIHRocm93cwotCi0gICAgVGhyb3dzIGFyZSBzaW11
bGF0ZWQgYnkgc2V0dGluZyB0aGUgbV9uZWVkRXhjZXB0aW9uQ2hlY2sgYml0LgotCi0gICAgVGhl
IGJpdCB3aWxsIG9ubHkgYmUgc2V0IGluIHRoZSBUaHJvd1Njb3BlIGRlc3RydWN0b3IgZXhjZXB0
IHdoZW4gdGhlIFRocm93U2NvcGUKLSAgICBkZXRlY3RzIHRoZSBjYWxsZXIgaXMgYSBMTEludCBv
ciBKSVQgZnVuY3Rpb24uIExMSW50IG9yIEpJVCBmdW5jdGlvbnMgd2lsbCBhbHdheXMKLSAgICBj
aGVjayBmb3IgZXhjZXB0aW9ucyBhZnRlciBhIGhvc3QgQysrIGZ1bmN0aW9uIHJldHVybnMgdG8g
aXQuIEhvd2V2ZXIsIHRoZXkgd2lsbAotICAgIG5vdCBjbGVhciB0aGUgbV9uZWVkRXhjZXB0aW9u
Q2hlY2sgYml0LgotCi0gICAgSGVuY2UsIGlmIHRoZSBUaHJvd1Njb3BlIGRlc3RydWN0b3IgZGV0
ZWN0cyB0aGUgY2FsbGVyIGlzIGEgTExJbnQgb3IgSklUIGZ1bmN0aW9uLAotICAgIGl0IHdpbGwg
anVzdCBza2lwIHRoZSBzZXR0aW5nIG9mIHRoZSBiaXQuCi0KLSAgICBOb3RlOiB0aGVyZSBpcyBu
byBuZWVkLCBhbmQgaXQgaXMgaW5jb3JyZWN0IHRvIHNldCB0aGUgbV9uZWVkRXhjZXB0aW9uQ2hl
Y2sgYml0Ci0gICAgaW4gdGhlIHRocm93RXhjZXB0aW9uIG1ldGhvZHMuIFRoaXMgaXMgYmVjYXVz
ZSwgaW4gcHJhY3RpY2UsIHdlIGFsd2F5cyByZXR1cm4KLSAgICBpbW1lZGlhdGVseSBhZnRlciB0
aHJvd2luZyBhbiBleGNlcHRpb24uIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBzZXQgdGhlIGJp
dCBpbgotICAgIHRoZSB0aHJvdyBqdXN0IHRvIGhhdmUgdG8gY2xlYXIgaXQgaW1tZWRpYXRlbHkg
YWZ0ZXIgYmVmb3JlIHdlIGRvIHZlcmlmaWNhdGlvbiBpbgotICAgIHRoZSBUaHJvd1Njb3BlIGRl
c3RydWN0b3IuCi0KLSA1LiBVc2luZyBUaHJvd1Njb3BlOjpyZWxlYXNlKCkKLQotICAgIFRocm93
U2NvcGU6OnJlbGVhc2UoKSBzaG91bGQgb25seSBiZSB1c2VkIGF0IHRoZSBib3R0b20gb2YgYSBm
dW5jdGlvbiBpZjoKLSAKLSAgICBhLiBUaGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGxldCBpdHMg
Y2FsbGVyIGNoZWNrIGFuZCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4KLSAKLSAgICAgICAgdm9pZCBm
b28oLi4uKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGdvbygpOyAvLyBtYXkgdGhy
b3cuCi0KLSAgICAgICAgICAgIC4uLiAvLyBDbGVhbnVwIGNvZGUgdGhhdCB3aWxsIGFyZSBub3Qg
YWZmZWN0ZWQgYnkgYSBwZW5kaW5nIGV4Y2VwdGlvbnMuCi0KLSAgICAgICAgICAgIHNjb3BlLnJl
bGVhc2UoKTsgLy8gdGVsbCB0aGUgVGhyb3dTY29wZSB0aGF0IHRoZSBjYWxsZXIgd2lsbCBoYW5k
bGUgdGhlIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAKLSAgICBiLiBUaGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGRvIGEgdGFpbCBjYWxsIHRoYXQg
bWF5IHRocm93LgotCi0gICAgICAgIHZvaWQgZm9vKC4uLikKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICAgICAgLi4u
Ci0gICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7IC8vIHRlbGwgdGhlIFRocm93U2NvcGUgdGhh
dCB0aGUgY2FsbGVyIHdpbGwgaGFuZGxlIHRoZSBleGNlcHRpb24uCi0gICAgICAgICAgICByZXR1
cm4gZ29vKCk7IC8vIG1heSB0aHJvdy4KLSAgICAgICAgfQotIAotICAgIFRocm93U2NvcGU6OnJl
bGVhc2UoKSBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhlIGNvZGUgcGF0aHMgdGhhdCBicmFuY2gu
IEZvciBleGFtcGxlOgotIAotICAgICAgICB2b2lkIGZvbyguLi4pCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBnb28xKCk7IC8vIG1heSB0aHJvdy4KLSAgICAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsgLy8gPD09PT09PT09PT09PT09PT09PT0gdGhlIFdST05HIHdheSAhISEKLSAg
ICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotIAotICAgICAg
ICAgICAgcmVzdWx0ID0gZ29vMigpOyAvLyBtYXkgdGhyb3cuCi0gICAgICAgICAgICAuLi4KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAKLSAgICBUaGUgYWJvdmUgd2ls
bCByZXN1bHQgaW4gYSB2ZXJpZmljYXRpb24gZmFpbHVyZSBpbiBnb28yKCkncyBUaHJvd1Njb3Bl
LiAgVGhlIHByb3BlciB3YXkKLSAgICB0byBmaXggdGhpcyB2ZXJpZmljYXRpb24gaXMgdG8gZG8g
d2l0aGVyICg2KSBvciAoNykgYmVsb3cuCi0gCi0gIDYuIENoZWNraW5nIGV4Y2VwdGlvbnMgd2l0
aCBUaHJvd1Njb3BlOjpleGNlcHRpb24oKQotIAotICAgICBUaHJvd1Njb3BlOjpleGNlcHRpb24o
KSByZXR1cm5zIHRoZSB0aHJvd24gRXhjZXB0aW9uIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUgcGVu
ZGluZy4KLSAgICAgRWxzZSBpdCByZXR1cm5zIG51bGxwdHIuCi0gCi0gICAgIEl0IGFsc28gY2xl
YXJzIHRoZSBtX25lZWRFeGNlcHRpb25DaGVjayBiaXQgdGhlcmVieSBpbmRpY2F0aW5nIHRoYXQg
d2UndmUgc2F0aXNpZmVkCi0gICAgIHRoZSBuZWVkZWQgZXhjZXB0aW9uIGNoZWNrLgotIAotICAg
ICBUaGlzIGlzIGhvdyB3ZSBkbyBpdDoKLSAKLSAgICAgICAgdm9pZCBmb28oLi4uKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZ29vMSgpOyAvLyBtYXkgdGhyb3cuCi0gICAgICAg
ICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICByZXN1bHQgPSBnb28yKCk7IC8vIG1heSB0aHJvdy4KLSAgICAgICAgICAgIC4u
LgotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotIAotICAgIEJ1dCBzb21l
dGltZXMsIGZvciBvcHRpbWl6YXRpb24gcmVhc29ucywgd2UgbWF5IGNob29zZSB0byB0ZXN0IHRo
ZSByZXN1bHQgb2YgdGhlIGNhbGxlZQotICAgIGZ1bmN0aW9uIGluc3RlYWQgZG9pbmcgYSBsb2Fk
IG9mIHRoZSBWTSBleGNlcHRpb24gdmFsdWUuIFNlZSAoNykgYmVsb3cuCi0gCi0gNy4gQ2hlY2tp
bmcgZXhjZXB0aW9uIGJ5IGNoZWNraW5nIGNhbGxlZSByZXN1bHQKLSAKLSAgICBUaGlzIGFwcHJv
YWNoIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgd2hlbiBpdCBtYWtlcyBhIGRpZmZlcmVuY2UgdG8g
cGVyZm9ybWFuY2UuCi0gICAgSWYgd2UgbmVlZCB0byBkbyB0aGlzLCB3ZSBzaG91bGQgYWRkIGFu
IEFTU0VSVCgpIHRoYXQgaW52b2tlcyBUaHJvd1Njb3BlOjpleGNlcHRpb24oKQotICAgIGFuZCB2
ZXJpZnkgdGhlIHJlc3VsdC4gU2luY2UgVGhyb3dTY29wZSB2ZXJpZmljYXRpb24gaXMgb25seSBk
b25lIG9uIERFQlVHIGJ1aWxkcywKLSAgICB0aGlzIEFTU0VSVCB3aWxsIHNhdGlzZnkgdGhlIHZl
cmlmaWNhdGlvbiByZXF1aXJlbWVudHMgd2hpbGUgbm90IGltcGFjdGluZyBwZXJmb3JtYW5jZS4K
LSAKLSAgICBUaGlzIGlzIGhvdyB3ZSBkbyBpdDoKLQotICAgICAgICB2b2lkIGZvbyguLi4pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAgICAgYm9vbCBmYWlsZWQgPSBnb28xKCk7IC8vIG1heSB0aHJvdy4KLSAg
ICAgICAgICAgIEFTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IGZhaWxlZCkKLSAgICAgICAg
ICAgIGlmIChmYWlsZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBy
ZXN1bHQgPSBnb28yKCk7IC8vIG1heSB0aHJvdy4KLSAgICAgICAgICAgIC4uLgotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotIAotIDguIERlYnVnZ2luZyB2ZXJpZmljYXRp
b24gZmFpbHVyZXMuCi0KLSAgICBhLiBXaGVuIHZlcmlmaWNhdGlvbiBmYWlscywgeW91IHdpbGwg
c2VlIGEgaGVscGZ1bCBtZXNzYWdlIGZvbGxvd2VkIGJ5IGFuIGFzc2VydGlvbiBmYWlsdXJlLgot
ICAgICAgIEZvciBleGFtcGxlOgotIAotICAgIEZBSUxFRCBleGNlcHRpb24gY2hlY2sgdmVyaWZp
Y2F0aW9uOgotICAgICAgICBFeGNlcHRpb24gdGhyb3duIGZyb20gVGhyb3dTY29wZSBbMl0gRXhp
dDogc2V0VXBDYWxsIEAgL1ZvbHVtZXMvRGF0YS93czYvT3BlblNvdXJjZS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEyNDUKLSAgICAgICAgaXMgdW5jaGVj
a2VkIGluIFRocm93U2NvcGUgWzFdOiB2YXJhcmdzU2V0dXAgQCAvVm9sdW1lcy9EYXRhL3dzNi9P
cGVuU291cmNlL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHA6
MTM5OAotCi0gICAgICAgVGhlIG1lc3NhZ2UgdGVsbHMgeW91IHRoYXQgZmFpbHVyZSB3YXMgZGV0
ZWN0ZWQgYXQgaW4gdmFyYXJnc1NldHVwKCkgQCBMTEludFNsb3dQYXRocy5jcHAKLSAgICAgICBs
aW5lIDEzOTgsIGFuZCB0aGF0IHRoZSBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVjayBzaG91bGQgaGF2
ZSBoYXBwZW5lZCBzb21ld2hlcmUgYmV0d2VlbgotICAgICAgIHRoZSBjYWxsIHRvIHNldFVwQ2Fs
bCgpIEAgTExJbnRTbG93UGF0aHMuY3BwIGxpbmUgMTI0NSBhbmQgaXQuCi0KLSAgICAgICBJZiB0
aGF0IGlzIGluc3VmZmljaWVudCBpbmZvcm1hdGlvbiwgeW91IGNhbiAuLi4KLQotICAgIGIuIFR1
cm4gb24gVGhyb3dTY29wZSB0cmFjaW5nCi0gCi0gICAgICAgSnVzdCBzZXQgdHJhY2VPbj10cnVl
IGF0IHRoZSB0b3Agb2YgVGhyb3dTY29wZS5jcHAsIGFuZCByZWJ1aWxkLiBUaGVyZWFmdGVyLCB5
b3Ugc2hvdWxkCi0gICAgICAgc2VlIGEgdHJhY2Ugb2YgVGhyb3dTY29wZXMgYmVpbmcgZW50ZXJl
ZCBhbmQgZXhpdGVkIGFzIHdlbGwgYXMgdGhlaXIgZGVwdGggZS5nLgotCi0gICAgVGhyb3dTY29w
ZSBbMV0gRW50ZXI6IGxsaW50X3Nsb3dfcGF0aF9qZmFsc2UgQCAvVm9sdW1lcy9EYXRhL3dzNi9P
cGVuU291cmNlL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHA6
MTAzMgotICAgIFRocm93U2NvcGUgWzFdIEV4aXQ6IGxsaW50X3Nsb3dfcGF0aF9qZmFsc2UgQCAv
Vm9sdW1lcy9EYXRhL3dzNi9PcGVuU291cmNlL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHA6MTAzMgotCi0gICAgICAgWW91IHdpbGwgYWxzbyBzZWUgdHJhY2Vz
IG9mIHNpbXVsYXRlZCB0aHJvd3MgZS5nLgotCi0gICAgVGhyb3dTY29wZSBbMl0gVGhyb3cgZnJv
bTogc2V0VXBDYWxsIEAgL1ZvbHVtZXMvRGF0YS93czYvT3BlblNvdXJjZS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOjEyNDUKLQotICAgICAgIElmIHRoYXQg
aXMgaW5zdWZmaWNpZW50IGluZm9ybWF0aW9uLCB5b3UgY2FuIC4uLgotCi0gICAgYy4gVHVybiBv
biBUaHJvd1Njb3BlIHN0YWNrIGR1bXBzCi0KLSAgICAgICBKdXN0IHNldCB0cmFjZVdpdGhTdGFj
a1RyYWNlcz10cnVlIGF0IHRoZSB0b3Agb2YgVGhyb3dTY29wZS5jcHAsIGFuZCByZWJ1aWxkLgot
ICAgICAgIFRoZXJlYWZ0ZXIsIHlvdSBzaG91bGQgc2VlIGEgc3RhY2sgdHJhY2VzIGF0IHZhcmlv
dXMgcmVsZXZhbnQgVGhyb3dTY29wZSBldmVudHMuCi0KLSAgICBkLiBVc2luZyB0aHJvd1Njb3Bl
UHJpbnRJZk5lZWRDaGVjaygpCi0KLSAgICAgICBJZiB5b3UgaGF2ZSBpc29sYXRlZCB0aGUgbWlz
c2luZyBleGNlcHRpb24gY2hlY2sgdG8gYSBmdW5jdGlvbiB0aGF0IGlzIGxhcmdlIGJ1dAotICAg
ICAgIGlzIHVuc3VyZSB3aGljaCBzdGF0ZW1lbnQgY2FuIHRocm93IGFuZCBpcyBtaXNzaW5nIHRo
ZSBjaGVjaywgeW91IGNhbiBzcHJpbmtsZQotICAgICAgIHRoZSBmdW5jdGlvbiB3aXRoIGNhbGxz
IHRvIHRocm93U2NvcGVQcmludElmTmVlZENoZWNrKCkuCi0KLSAgICAgICB0aHJvd1Njb3BlUHJp
bnRJZk5lZWRDaGVjaygpIHdpbGwgbG9nIGEgbGluZSAiTmVlZCBleGNlcHRpb24gY2hlY2sgYXQg
Li4uIiB0aGF0Ci0gICAgICAgaW5sY3VkZXMgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIG9ubHkg
d2hlbiBpdCBzZWUgdGhlIG1fbmVlZEV4Y2VwdGlvbkNoZWNrIHNldC4KLSAgICAgICBUaGlzIHdp
bGwgdGVsbCB5b3Ugd2hpY2ggc3RhdGVtZW50IHNpbXVsYXRlZCB0aGUgdGhyb3cgdGhhdCBpcyBu
b3QgYmVpbmcgY2hlY2tlZAotICAgICAgIGkuZS4gdGhlIG9uZSB0aGF0IHByZWNlZGVkIHRoZSB0
aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjaygpIHRoYXQgcHJpbnRlZCBhIGxpbmUuCi0qLwotCi1U
aHJvd1Njb3BlOjpUaHJvd1Njb3BlKFZNJiB2bSwgVGhyb3dTY29wZUxvY2F0aW9uIGxvY2F0aW9u
KQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fcHJldmlvdXNTY29wZSh2bS5tX3RvcFRocm93U2Nv
cGUpCi0gICAgLCBtX2xvY2F0aW9uKGxvY2F0aW9uKQotICAgICwgbV9kZXB0aChtX3ByZXZpb3Vz
U2NvcGUgPyBtX3ByZXZpb3VzU2NvcGUtPm1fZGVwdGggKyAxIDogMCkKK1Rocm93U2NvcGU6OlRo
cm93U2NvcGUoVk0mIHZtLCBFeGNlcHRpb25FdmVudExvY2F0aW9uIGxvY2F0aW9uKQorICAgIDog
RXhjZXB0aW9uU2NvcGUodm0sIGxvY2F0aW9uKQogewotICAgIG1fdm0ubV90b3BUaHJvd1Njb3Bl
ID0gdGhpczsKLQotICAgIGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFj
ZUNvdW50KyssICI+IFRocm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEVudGVyOiAiLCBsb2NhdGlv
bi5mdW5jdGlvbk5hbWUsICIgQCAiLCBsb2NhdGlvbi5maWxlLCAiOiIsIGxvY2F0aW9uLmxpbmUp
OwotICAgICAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAgICAgICAgICAgIGRh
dGFMb2coIiwgbmVlZHMgY2hlY2siKTsKLSAgICAgICAgZGF0YUxvZygiXG4iKTsKLQotICAgICAg
ICBpZiAodHJhY2VXaXRoU3RhY2tUcmFjZXMpCi0gICAgICAgICAgICBXVEZSZXBvcnRCYWNrdHJh
Y2UoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChT
aXRlOjpTY29wZUVudHJ5KTsKKyAgICBtX3ZtLnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0
aXNmaWVkKG1fcmVjdXJzaW9uRGVwdGgsIG1fbG9jYXRpb24pOwogfQogCiBUaHJvd1Njb3BlOjp+
VGhyb3dTY29wZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3RvcFRocm93U2NvcGUp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fdm0ubV90b3BFeGNlcHRpb25TY29wZSk7CiAKICAgICBp
ZiAoIW1faXNSZWxlYXNlZCkKLSAgICAgICAgdmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQoU2l0ZTo6U2NvcGVFeGl0KTsKKyAgICAgICAgbV92bS52ZXJpZnlFeGNlcHRpb25DaGVj
a05lZWRJc1NhdGlzZmllZChtX3JlY3Vyc2lvbkRlcHRoLCBtX2xvY2F0aW9uKTsKICAgICBlbHNl
IHsKICAgICAgICAgLy8gSWYgd2UgcmVsZWFzZWQgdGhlIHNjb3BlLCB0aGF0IG1lYW5zIHdlJ3Jl
IGxldHRpbmcgb3VyIGNhbGxlcnMgZG8gdGhlCiAgICAgICAgIC8vIGV4Y2VwdGlvbiBjaGVjay4g
SG93ZXZlciwgYmVjYXVzZSBvdXIgY2FsbGVyIG1heSBiZSBhIExMSW50IG9yIEpJVApAQCAtMjk4
LDI2ICs2OCwxMiBAQCBUaHJvd1Njb3BlOjp+VGhyb3dTY29wZSgpCiAgICAgCiAgICAgaWYgKCF3
aWxsQmVIYW5kbGVCeUxMSW50T3JKSVQpCiAgICAgICAgIHNpbXVsYXRlVGhyb3coKTsKLQotICAg
IGlmICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRo
cm93U2NvcGUgWyIsIG1fZGVwdGgsICJdIEV4aXQ6ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25OYW1l
LCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24ubGluZSk7Ci0gICAgICAg
IGlmICghd2lsbEJlSGFuZGxlQnlMTEludE9ySklUKQotICAgICAgICAgICAgZGF0YUxvZygiLCB3
aXRoIHJldGhyb3ciKTsKLSAgICAgICAgaWYgKG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spCi0g
ICAgICAgICAgICBkYXRhTG9nKCIsIG5lZWRzIGNoZWNrIik7Ci0gICAgICAgIGRhdGFMb2coIlxu
Iik7Ci0KLSAgICAgICAgaWYgKHRyYWNlV2l0aFN0YWNrVHJhY2VzKQotICAgICAgICAgICAgV1RG
UmVwb3J0QmFja3RyYWNlKCk7Ci0gICAgfQotCi0gICAgbV92bS5tX3RvcFRocm93U2NvcGUgPSBt
X3ByZXZpb3VzU2NvcGU7CiB9CiAKIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb24qIGV4Y2VwdGlvbikKIHsKICAgICBpZiAobV92bS5leGNl
cHRpb24oKSAmJiBtX3ZtLmV4Y2VwdGlvbigpICE9IGV4Y2VwdGlvbikKLSAgICAgICAgdmVyaWZ5
RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQoU2l0ZTo6VGhyb3cpOworICAgICAgICBtX3Zt
LnZlcmlmeUV4Y2VwdGlvbkNoZWNrTmVlZElzU2F0aXNmaWVkKG1fcmVjdXJzaW9uRGVwdGgsIG1f
bG9jYXRpb24pOwogICAgIAogICAgIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
KTsKIH0KQEAgLTMyNSw3ICs4MSw3IEBAIHZvaWQgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24o
RXhlY1N0YXQKIEpTVmFsdWUgVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGVycm9yKQogewogICAgIGlmICghZXJyb3IuaXNDZWxsKCkgfHwgIWpzRHlu
YW1pY0Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IuYXNDZWxsKCkpKQotICAgICAgICB2ZXJpZnlFeGNl
cHRpb25DaGVja05lZWRJc1NhdGlzZmllZChTaXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVy
aWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRpc2ZpZWQobV9yZWN1cnNpb25EZXB0aCwgbV9sb2Nh
dGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXJyb3Ip
OwogfQpAQCAtMzMzLDYzICs4OSwyNSBAQCBKU1ZhbHVlIFRocm93U2NvcGU6OnRocm93RXhjZXB0
aW9uKEV4ZWNTCiBKU09iamVjdCogVGhyb3dTY29wZTo6dGhyb3dFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb2JqKQogewogICAgIGlmICghanNEeW5hbWljQ2FzdDxFeGNlcHRp
b24qPihvYmopKQotICAgICAgICB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZChT
aXRlOjpUaHJvdyk7CisgICAgICAgIG1fdm0udmVyaWZ5RXhjZXB0aW9uQ2hlY2tOZWVkSXNTYXRp
c2ZpZWQobV9yZWN1cnNpb25EZXB0aCwgbV9sb2NhdGlvbik7CiAgICAgCiAgICAgcmV0dXJuIG1f
dm0udGhyb3dFeGNlcHRpb24oZXhlYywgb2JqKTsKIH0KIAotdm9pZCBUaHJvd1Njb3BlOjpwcmlu
dElmTmVlZENoZWNrKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmlsZSwg
dW5zaWduZWQgbGluZSkKLXsKLSAgICBpZiAobV92bS5tX25lZWRFeGNlcHRpb25DaGVjaykKLSAg
ICAgICAgZGF0YUxvZygiPCIsIHRyYWNlQ291bnQrKywgIj4gTmVlZCBleGNlcHRpb24gY2hlY2sg
YXQgIiwgZnVuY3Rpb25OYW1lLCAiIEAgIiwgZmlsZSwgIjoiLCBsaW5lLCAiXG4iKTsKLX0KLQog
dm9pZCBUaHJvd1Njb3BlOjpzaW11bGF0ZVRocm93KCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCht
X3ZtLm1fdG9wVGhyb3dTY29wZSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV92bS5tX3RvcEV4Y2Vw
dGlvblNjb3BlKTsKICAgICBtX3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uID0gbV9s
b2NhdGlvbjsKLSAgICBtX3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludERlcHRoID0gbV9kZXB0aDsK
KyAgICBtX3ZtLm1fc2ltdWxhdGVkVGhyb3dQb2ludFJlY3Vyc2lvbkRlcHRoID0gbV9yZWN1cnNp
b25EZXB0aDsKICAgICBtX3ZtLm1fbmVlZEV4Y2VwdGlvbkNoZWNrID0gdHJ1ZTsKIAotICAgIGlm
ICh0cmFjZU9uKSB7Ci0gICAgICAgIGRhdGFMb2coIjwiLCB0cmFjZUNvdW50KyssICI+IFRocm93
U2NvcGUgWyIsIG1fZGVwdGgsICJdIFRocm93IGZyb206ICIsIG1fbG9jYXRpb24uZnVuY3Rpb25O
YW1lLCAiIEAgIiwgbV9sb2NhdGlvbi5maWxlLCAiOiIsIG1fbG9jYXRpb24ubGluZSwgIlxuIik7
Ci0gICAgICAgIGlmICh0cmFjZVdpdGhTdGFja1RyYWNlcykKLSAgICAgICAgICAgIFdURlJlcG9y
dEJhY2t0cmFjZSgpOwotICAgIH0KLX0KLQotdm9pZCBUaHJvd1Njb3BlOjp2ZXJpZnlFeGNlcHRp
b25DaGVja05lZWRJc1NhdGlzZmllZChUaHJvd1Njb3BlOjpTaXRlIHNpdGUpCi17Ci0gICAgaWYg
KCF2ZXJpZmljYXRpb25PbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFVOTElLRUxZKG1f
dm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2spKSB7Ci0gICAgICAgIGF1dG8gZmFpbERlcHRoID0gbV92
bS5tX3NpbXVsYXRlZFRocm93UG9pbnREZXB0aDsKLSAgICAgICAgYXV0byYgZmFpbExvY2F0aW9u
ID0gbV92bS5tX3NpbXVsYXRlZFRocm93UG9pbnRMb2NhdGlvbjsKLQotICAgICAgICBhdXRvIHNp
dGVOYW1lID0gW10gKFNpdGUgc2l0ZSkgLT4gY29uc3QgY2hhciogewotICAgICAgICAgICAgc3dp
dGNoIChzaXRlKSB7Ci0gICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRW50cnk6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJFbnRyeSI7Ci0gICAgICAgICAgICBjYXNlIFNpdGU6OlNjb3BlRXhp
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkV4aXQiOwotICAgICAgICAgICAgY2FzZSBTaXRl
OjpUaHJvdzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlRocm93IjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfTsKLQotICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgIkZBSUxFRCBleGNlcHRpb24gY2hlY2sgdmVyaWZpY2F0aW9uOlxuIgotICAgICAgICAgICAg
IiAgICBFeGNlcHRpb24gdGhyb3duIGZyb20gVGhyb3dTY29wZSBbIiwgZmFpbERlcHRoLCAiXSAi
LCBzaXRlTmFtZShzaXRlKSwgIjogIiwgZmFpbExvY2F0aW9uLmZ1bmN0aW9uTmFtZSwgIiBAICIs
IGZhaWxMb2NhdGlvbi5maWxlLCAiOiIsIGZhaWxMb2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAg
ICAgICAiICAgIGlzIHVuY2hlY2tlZCBpbiBUaHJvd1Njb3BlIFsiLCBtX2RlcHRoLCAiXTogIiwg
bV9sb2NhdGlvbi5mdW5jdGlvbk5hbWUsICIgQCAiLCBtX2xvY2F0aW9uLmZpbGUsICI6IiwgbV9s
b2NhdGlvbi5saW5lLCAiXG4iCi0gICAgICAgICAgICAiXG4iKTsKLQotICAgICAgICBSRUxFQVNF
X0FTU0VSVCghbV92bS5tX25lZWRFeGNlcHRpb25DaGVjayk7CisgICAgaWYgKE9wdGlvbnM6OmR1
bXBTaW11bGF0ZWRUaHJvd3MoKSkgeworICAgICAgICBkYXRhTG9nKCJTaW11bGF0ZWQgdGhyb3cg
ZnJvbSB0aGlzIHNjb3BlOiAiLCBtX2xvY2F0aW9uLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgIChFeGNlcHRpb25TY29wZTo6bV9yZWN1cnNpb25EZXB0aCB3YXMgIiwgbV9yZWN1cnNpb25E
ZXB0aCwgIilcbiIpOworICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKICAgICB9CiB9CiAK
LSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FUSU9OKQorI2VuZGlmIC8vIEVO
QUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogICAgIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZS5oCShy
ZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Nj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDg4ICsyNiw2OSBAQAogI2lmbmRlZiBUaHJvd1Nj
b3BlX2gKICNkZWZpbmUgVGhyb3dTY29wZV9oCiAKLSNpbmNsdWRlICJFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJWTS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvblNjb3BlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBKU09iamVjdDsKIAotI2lmIEVOQUJMRShU
SFJPV19TQ09QRV9WRVJJRklDQVRJT04pCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJ
RklDQVRJT04pCiAKLWNsYXNzIFRocm93U2NvcGUgeworLy8gSWYgYSBmdW5jdGlvbiBjYW4gdGhy
b3cgYSBKUyBleGNlcHRpb24sIGl0IHNob3VsZCBkZWNsYXJlIGEgVGhyb3dTY29wZSBhdCB0aGUK
Ky8vIHRvcCBvZiB0aGUgZnVuY3Rpb24gKGFzIGVhcmx5IGFzIHBvc3NpYmxlKSB1c2luZyB0aGUg
REVDTEFSRV9USFJPV19TQ09QRSBtYWNyby4KKy8vIERlY2xhcmluZyBhIFRocm93U2NvcGUgaW4g
YSBmdW5jdGlvbiBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBtYXkgdGhyb3cgYW4KKy8vIGV4Y2Vw
dGlvbiB0aGF0IGl0cyBjYWxsZXIgd2lsbCBoYXZlIHRvIGhhbmRsZS4KKworY2xhc3MgVGhyb3dT
Y29wZSA6IHB1YmxpYyBFeGNlcHRpb25TY29wZSB7CiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgVGhyb3dTY29wZShWTSYsIFRocm93U2NvcGVMb2NhdGlvbik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgVGhyb3dTY29wZShWTSYsIEV4Y2VwdGlvbkV2ZW50TG9jYXRpb24pOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIH5UaHJvd1Njb3BlKCk7CiAKICAgICBUaHJvd1Njb3BlKGNvbnN0IFRo
cm93U2NvcGUmKSA9IGRlbGV0ZTsKICAgICBUaHJvd1Njb3BlKFRocm93U2NvcGUmJikgPSBkZWZh
dWx0OwogCi0gICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsgfQotCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqLCBFeGNlcHRpb24qKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlv
bihFeGVjU3RhdGUqLCBKU09iamVjdCopOwogCi0gICAgaW5saW5lIEV4Y2VwdGlvbiogZXhjZXB0
aW9uKCkKLSAgICB7Ci0gICAgICAgIG1fdm0ubV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsK
LSAgICAgICAgcmV0dXJuIG1fdm0uZXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZv
aWQgcmVsZWFzZSgpIHsgbV9pc1JlbGVhc2VkID0gdHJ1ZTsgfQorICAgIHZvaWQgcmVsZWFzZSgp
IHsgbV9pc1JlbGVhc2VkID0gdHJ1ZTsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
cmludElmTmVlZENoZWNrKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZmls
ZSwgdW5zaWduZWQgbGluZSk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzaW11bGF0ZVRocm93KCk7
CiAKLSAgICBlbnVtIGNsYXNzIFNpdGUgewotICAgICAgICBTY29wZUVudHJ5LAotICAgICAgICBT
Y29wZUV4aXQsCi0gICAgICAgIFRocm93Ci0gICAgfTsKLSAgICB2b2lkIHZlcmlmeUV4Y2VwdGlv
bkNoZWNrTmVlZElzU2F0aXNmaWVkKFNpdGUpOwotCi0gICAgVk0mIG1fdm07Ci0gICAgVGhyb3dT
Y29wZSogbV9wcmV2aW91c1Njb3BlOwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX2xvY2F0aW9u
OwotICAgIHVuc2lnbmVkIG1fZGVwdGg7CiAgICAgYm9vbCBtX2lzUmVsZWFzZWQgeyBmYWxzZSB9
OwogfTsKIAogI2RlZmluZSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtX18pIFwKLSAgICBKU0M6OlRo
cm93U2NvcGUoKHZtX18pLCBKU0M6OlRocm93U2NvcGVMb2NhdGlvbihfX0ZVTkNUSU9OX18sIF9f
RklMRV9fLCBfX0xJTkVfXykpCisgICAgSlNDOjpUaHJvd1Njb3BlKCh2bV9fKSwgSlNDOjpFeGNl
cHRpb25FdmVudExvY2F0aW9uKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKSkKIAog
I2RlZmluZSB0aHJvd1Njb3BlUHJpbnRJZk5lZWRDaGVjayhzY29wZV9fKSBcCiAgICAgc2NvcGVf
Xy5wcmludElmTmVlZENoZWNrKF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKQogCi0j
ZWxzZSAvLyBub3QgRU5BQkxFKFRIUk9XX1NDT1BFX1ZFUklGSUNBVElPTikKKyNlbHNlIC8vIG5v
dCBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKIAotY2xhc3MgVGhyb3dTY29w
ZSB7CitjbGFzcyBUaHJvd1Njb3BlIDogcHVibGljIEV4Y2VwdGlvblNjb3BlIHsKIHB1YmxpYzoK
LSAgICBUaHJvd1Njb3BlKFZNJiB2bSkKLSAgICAgICAgOiBtX3ZtKHZtKQorICAgIEFMV0FZU19J
TkxJTkUgVGhyb3dTY29wZShWTSYgdm0pCisgICAgICAgIDogRXhjZXB0aW9uU2NvcGUodm0pCiAg
ICAgeyB9CisgICAgVGhyb3dTY29wZShjb25zdCBUaHJvd1Njb3BlJikgPSBkZWxldGU7CisgICAg
VGhyb3dTY29wZShUaHJvd1Njb3BlJiYpID0gZGVmYXVsdDsKIAotICAgIFZNJiB2bSgpIGNvbnN0
IHsgcmV0dXJuIG1fdm07IH0KLSAgICAKLSAgICB2b2lkIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24pIHsgbV92bS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOyB9Ci0gICAgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgdmFs
dWUpOyB9Ci0gICAgSlNPYmplY3QqIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iaikgeyByZXR1cm4gbV92bS50aHJvd0V4Y2VwdGlvbihleGVjLCBvYmopOyB9Ci0g
ICAgCi0gICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSB7IHJldHVybiBtX3ZtLmV4Y2VwdGlvbigp
OyB9Ci0gICAgdm9pZCByZWxlYXNlKCkgeyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFZNJiBtX3Zt
OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEV4Y2VwdGlvbiogZXhjZXB0aW9uKSB7IG1fdm0udGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0aHJvd0V4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fdm0udGhyb3dFeGNlcHRpb24oZXhl
YywgdmFsdWUpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU09iamVjdCogdGhyb3dFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqKSB7IHJldHVybiBtX3ZtLnRocm93RXhjZXB0
aW9uKGV4ZWMsIG9iaik7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZWxlYXNlKCkgeyB9
CiB9OwogCiAjZGVmaW5lIERFQ0xBUkVfVEhST1dfU0NPUEUodm1fXykgXAogICAgIEpTQzo6VGhy
b3dTY29wZSgodm1fXykpCiAKLSNlbmRpZiAvLyBFTkFCTEUoVEhST1dfU0NPUEVfVkVSSUZJQ0FU
SU9OKQorI2VuZGlmIC8vIEVOQUJMRShFWENFUFRJT05fU0NPUEVfVkVSSUZJQ0FUSU9OKQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgdGhyb3dFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBUaHJvd1Nj
b3BlJiBzY29wZSwgRXhjZXB0aW9uKiBleGNlcHRpb24pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UaHJvd1Njb3BlTG9jYXRpb24uaAkocmV2aXNpb24g
MjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGhyb3dTY29wZUxvY2F0
aW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1zdHJ1Y3QgVGhyb3dTY29wZUxvY2F0aW9uIHsKLSAgICBUaHJvd1Njb3BlTG9jYXRpb24o
KSB7IH0KLSAgICBUaHJvd1Njb3BlTG9jYXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBmaWxlLCB1bnNpZ25lZCBsaW5lKQotICAgICAgICA6IGZ1bmN0aW9uTmFtZShm
dW5jdGlvbk5hbWUpCi0gICAgICAgICwgZmlsZShmaWxlKQotICAgICAgICAsIGxpbmUobGluZSkK
LSAgICB7IH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUgeyBudWxscHRyIH07
Ci0gICAgY29uc3QgY2hhciogZmlsZSB7IG51bGxwdHIgfTsKLSAgICB1bnNpZ25lZCBsaW5lIHsg
MCB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw0ICs4OTQsMjggQEAgYm9vbCBW
TTo6aXNTYWZlVG9SZWN1cnNlU29mdENMb29wKCkgY29ucwogfQogI2VuZGlmIC8vICFFTkFCTEUo
SklUKQogCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJT04pCit2b2lkIFZN
Ojp2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZCh1bnNpZ25lZCByZWN1cnNpb25E
ZXB0aCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiYgbG9jYXRpb24pCit7CisgICAgaWYgKCFtX3Zl
cmlmeUV4Y2VwdGlvbkV2ZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFVOTElLRUxZ
KG1fbmVlZEV4Y2VwdGlvbkNoZWNrKSkgeworICAgICAgICBhdXRvIHRocm93RGVwdGggPSBtX3Np
bXVsYXRlZFRocm93UG9pbnRSZWN1cnNpb25EZXB0aDsKKyAgICAgICAgYXV0byYgdGhyb3dMb2Nh
dGlvbiA9IG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOworCisgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAiRVJST1I6IFVuY2hlY2tlZCBKUyBleGNlcHRpb246XG4iCisgICAgICAg
ICAgICAiICAgIFRoaXMgc2NvcGUgY2FuIHRocm93IGEgSlMgZXhjZXB0aW9uOiAiLCB0aHJvd0xv
Y2F0aW9uLCAiXG4iCisgICAgICAgICAgICAiICAgICAgICAoRXhjZXB0aW9uU2NvcGU6Om1fcmVj
dXJzaW9uRGVwdGggd2FzICAiLCB0aHJvd0RlcHRoLCAiKVxuIgorICAgICAgICAgICAgIiAgICBC
dXQgdGhlIGV4Y2VwdGlvbiB3YXMgdW5jaGVja2VkIGFzIG9mIHRoaXMgc2NvcGU6ICIsIGxvY2F0
aW9uLCAiXG4iCisgICAgICAgICAgICAiICAgICAgICAoRXhjZXB0aW9uU2NvcGU6Om1fcmVjdXJz
aW9uRGVwdGggd2FzICAiLCByZWN1cnNpb25EZXB0aCwgIilcbiIKKyAgICAgICAgICAgICJcbiIp
OworICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9uZWVkRXhjZXB0aW9uQ2hlY2spOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5j
bHVkZSAiQ29udHJvbEZsb3dQcm9maWxlci5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNhY2hl
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uRXZlbnRMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkV4ZWN1
dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIK
ICNpbmNsdWRlICJIZWFwLmgiCkBAIC00Nyw3ICs0OCw2IEBACiAjaW5jbHVkZSAiU21hbGxTdHJp
bmdzLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgotI2lu
Y2x1ZGUgIlRocm93U2NvcGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5o
IgogI2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJl
Y29yZC5oIgpAQCAtODUsNiArODUsNyBAQCBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKIGNsYXNz
IEN1c3RvbUdldHRlclNldHRlcjsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEV4Y2VwdGlvbjsK
K2NsYXNzIEV4Y2VwdGlvblNjb3BlOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBUeXBlUHJv
ZmlsZXI7CiBjbGFzcyBUeXBlUHJvZmlsZXJMb2c7CkBAIC0xMTIsNyArMTEzLDYgQEAgY2xhc3Mg
U3RydWN0dXJlOwogY2xhc3MgUmVnRXhwOwogI2VuZGlmCiBjbGFzcyBTeW1ib2w7Ci1jbGFzcyBU
aHJvd1Njb3BlOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEV2YWxD
b2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTQ0NywxMiAr
NDQ3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzdG9yZVByZXZpb3VzRXhjZXB0aW9uKEV4
Y2VwdGlvbiogZXhjZXB0aW9uKSB7IHNldEV4Y2VwdGlvbihleGNlcHRpb24pOyB9CiAKLSAgICB2
b2lkIGNsZWFyRXhjZXB0aW9uKCkgeyBtX2V4Y2VwdGlvbiA9IG51bGxwdHI7IH0KICAgICB2b2lk
IGNsZWFyTGFzdEV4Y2VwdGlvbigpIHsgbV9sYXN0RXhjZXB0aW9uID0gbnVsbHB0cjsgfQogCiAg
ICAgRXhlY1N0YXRlKiogYWRkcmVzc09mQ2FsbEZyYW1lRm9yQ2F0Y2goKSB7IHJldHVybiAmY2Fs
bEZyYW1lRm9yQ2F0Y2g7IH0KIAotICAgIEV4Y2VwdGlvbiogZXhjZXB0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9leGNlcHRpb247IH0KICAgICBKU0NlbGwqKiBhZGRyZXNzT2ZFeGNlcHRpb24oKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCoqPigmbV9leGNlcHRpb24pOyB9CiAKICAg
ICBFeGNlcHRpb24qIGxhc3RFeGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RFeGNlcHRp
b247IH0KQEAgLTY0OCw2ICs2NDYsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgbV9leGNlcHRpb24g
PSBleGNlcHRpb247CiAgICAgICAgIG1fbGFzdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgICB9
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24oKSBjb25zdAorICAgIHsKKyNpZiBFTkFCTEUoRVhD
RVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAgICAgICAgbV9uZWVkRXhjZXB0aW9uQ2hlY2sg
PSBmYWxzZTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gbV9leGNlcHRpb247CisgICAgfQorICAg
IHZvaWQgY2xlYXJFeGNlcHRpb24oKQorICAgIHsKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BF
X1ZFUklGSUNBVElPTikKKyAgICAgICAgbV9uZWVkRXhjZXB0aW9uQ2hlY2sgPSBmYWxzZTsKKyNl
bmRpZgorICAgICAgICBtX2V4Y2VwdGlvbiA9IG51bGxwdHI7CisgICAgfQogCiAjaWYgIUVOQUJM
RShKSVQpICAgIAogICAgIGJvb2wgZW5zdXJlU3RhY2tDYXBhY2l0eUZvckNMb29wKFJlZ2lzdGVy
KiBuZXdUb3BPZlN0YWNrKTsKQEAgLTY1OCw2ICs2NzAsMTAgQEAgcHJpdmF0ZToKICAgICBKU19F
WFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSosIEpTVmFsdWUp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiB0aHJvd0V4Y2VwdGlvbihFeGVjU3Rh
dGUqLCBKU09iamVjdCopOwogCisjaWYgRU5BQkxFKEVYQ0VQVElPTl9TQ09QRV9WRVJJRklDQVRJ
T04pCisgICAgdm9pZCB2ZXJpZnlFeGNlcHRpb25DaGVja05lZWRJc1NhdGlzZmllZCh1bnNpZ25l
ZCBkZXB0aCwgRXhjZXB0aW9uRXZlbnRMb2NhdGlvbiYpOworI2VuZGlmCisKICNpZiBFTkFCTEUo
QVNTRU1CTEVSKQogICAgIGJvb2wgbV9jYW5Vc2VBc3NlbWJsZXI7CiAjZW5kaWYKQEAgLTY4Miwx
MSArNjk4LDE0IEBAIHByaXZhdGU6CiAKICAgICBFeGNlcHRpb24qIG1fZXhjZXB0aW9uIHsgbnVs
bHB0ciB9OwogICAgIEV4Y2VwdGlvbiogbV9sYXN0RXhjZXB0aW9uIHsgbnVsbHB0ciB9OwotI2lm
IEVOQUJMRShUSFJPV19TQ09QRV9WRVJJRklDQVRJT04pCi0gICAgVGhyb3dTY29wZSogbV90b3BU
aHJvd1Njb3BlIHsgbnVsbHB0ciB9OwotICAgIFRocm93U2NvcGVMb2NhdGlvbiBtX3NpbXVsYXRl
ZFRocm93UG9pbnRMb2NhdGlvbjsKLSAgICB1bnNpZ25lZCBtX3NpbXVsYXRlZFRocm93UG9pbnRE
ZXB0aCB7IDAgfTsKKyNpZiBFTkFCTEUoRVhDRVBUSU9OX1NDT1BFX1ZFUklGSUNBVElPTikKKyAg
ICBFeGNlcHRpb25TY29wZSogbV90b3BFeGNlcHRpb25TY29wZSB7IG51bGxwdHIgfTsKKyAgICBF
eGNlcHRpb25FdmVudExvY2F0aW9uIG1fc2ltdWxhdGVkVGhyb3dQb2ludExvY2F0aW9uOworICAg
IHVuc2lnbmVkIG1fc2ltdWxhdGVkVGhyb3dQb2ludFJlY3Vyc2lvbkRlcHRoIHsgMCB9OwogICAg
IG11dGFibGUgYm9vbCBtX25lZWRFeGNlcHRpb25DaGVjayB7IGZhbHNlIH07CisKKyAgICAvLyBE
aXNhYmxlZCB0ZW1wb3JhcmlseSB1bnRpbCBhbGwga25vd24gdmVyaWZpY2F0aW9uIGZhaWx1cmVz
IGFyZSBmaXhlZC4KKyAgICBib29sIG1fdmVyaWZ5RXhjZXB0aW9uRXZlbnRzIHsgZmFsc2UgfTsK
ICNlbmRpZgogCiAgICAgYm9vbCBtX2ZhaWxOZXh0TmV3Q29kZUJsb2NrIHsgZmFsc2UgfTsKQEAg
LTcxMiw2ICs3MzEsMTAgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93Q2hp
Y2tlbj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUludHJp
bnNpY1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICAvLyBGcmll
bmRzIGZvciBleGNlcHRpb24gY2hlY2tpbmcgcHVycG9zZSBvbmx5LgorICAgIGZyaWVuZCBjbGFz
cyBIZWFwOworICAgIGZyaWVuZCBjbGFzcyBDYXRjaFNjb3BlOworICAgIGZyaWVuZCBjbGFzcyBF
eGNlcHRpb25TY29wZTsKICAgICBmcmllbmQgY2xhc3MgVGhyb3dTY29wZTsKIH07CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtNYXBDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha01hcENvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiB3ZWFrTWFwU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+d2Vha01hcFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwogICAgIEpTV2Vha01hcCog
d2Vha01hcCA9IEpTV2Vha01hcDo6Y3JlYXRlKGV4ZWMsIHdlYWtNYXBTdHJ1Y3R1cmUpOwogICAg
IEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTY3LDcgKzY3LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHdlYWtNYXApOwogCiAgICAgSlNWYWx1ZSBhZGRlckZ1bmN0aW9uID0g
d2Vha01hcC0+SlNPYmplY3Q6OmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc2V0KTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAogICAgIENhbGxEYXRhIGFkZGVyRnVuY3Rpb25DYWxsRGF0YTsKQEAgLTc2LDE3ICs3Niwx
OCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUpKTsKIAogICAg
IGZvckVhY2hJbkl0ZXJhYmxlKGV4ZWMsIGl0ZXJhYmxlLCBbJl0oVk0mIHZtLCBFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgbmV4dEl0ZW0pIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgICAgICBpZiAoIW5leHRJdGVtLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWUga2V5ID0gbmV4dEl0ZW0uZ2V0KGV4ZWMs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigwKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJl
dHVybjsKIAogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbmV4dEl0ZW0uZ2V0KGV4ZWMsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigxKSk7Ci0gICAgICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrU2V0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtTZXRDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtT
ZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2Jh
bE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogd2Vha1NldFN0cnVjdHVyZSA9IEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBn
bG9iYWxPYmplY3QtPndlYWtTZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKICAgICBKU1dlYWtTZXQqIHdlYWtTZXQg
PSBKU1dlYWtTZXQ6OmNyZWF0ZShleGVjLCB3ZWFrU2V0U3RydWN0dXJlKTsKICAgICBKU1ZhbHVl
IGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC02Nyw3ICs2Nyw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh3ZWFrU2V0KTsKIAogICAgIEpTVmFsdWUgYWRkZXJGdW5jdGlvbiA9IHdlYWtTZXQt
PkpTT2JqZWN0OjpnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmFkZCk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAg
ICBDYWxsRGF0YSBhZGRlckZ1bmN0aW9uQ2FsbERhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk1Qcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDU1NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw5ICszMDcsMTAgQEAgc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShleGVjLT52bSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGFy
Z1N0ciA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KGkpLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShl
eGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgZGF0YUxvZyhhcmdTdHIpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgQ2F0Y2hTY29wZSBhbmQgZm9yY2UgYWxsIGV4Y2VwdGlv
biBjaGVja3MgdG8gYmUgdmlhIFRocm93U2NvcGUgb3IgQ2F0Y2hTY29wZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTQ5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisK
IDIwMTYtMDktMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtTdHJlYW1zIEFQSV0gU2VwYXJhdGUgY29tcGlsZSBmbGFnIGZvciBSZWFkYWJsZVN0cmVhbSBh
bmQgV3JpdGFibGVTdHJlYW0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMjA1NTY2KQorKysg
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDggKzkxOCw4
IEBACiAjZGVmaW5lIEVOQUJMRV9NQVNNX1BST0JFIDAKICNlbmRpZgogCi0jaWZuZGVmIEVOQUJM
RV9USFJPV19TQ09QRV9WRVJJRklDQVRJT04KLSNkZWZpbmUgRU5BQkxFX1RIUk9XX1NDT1BFX1ZF
UklGSUNBVElPTiAoIWRlZmluZWQoTkRFQlVHKSkKKyNpZm5kZWYgRU5BQkxFX0VYQ0VQVElPTl9T
Q09QRV9WRVJJRklDQVRJT04KKyNkZWZpbmUgRU5BQkxFX0VYQ0VQVElPTl9TQ09QRV9WRVJJRklD
QVRJT04gKCFkZWZpbmVkKE5ERUJVRykpCiAjZW5kaWYKIAogLyogUGljayB3aGljaCBhbGxvY2F0
b3IgdG8gdXNlOyB3ZSBvbmx5IG5lZWQgYW4gZXhlY3V0YWJsZSBhbGxvY2F0b3IgaWYgdGhlIGFz
c2VtYmxlciBpcyBjb21waWxlZCBpbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUx
NSBAQAorMjAxNi0wOS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZp
YSBUaHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdCBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2
aW9yIGNoYW5nZSBpbiBnZW5lcmFsIGV4Y2VwdCBmb3IgMSBidWcgZml4LgorICAgICAgICBUaGF0
IGJ1ZyBpcyBhbHJlYWR5IGNhdWdodCBieSBleGlzdGluZyB0ZXN0cyB3aXRoIHRoZSBpbnRyb2R1
Y3Rpb24gb2YgdGhlIENhdGNoU2NvcGUuCisKKyAgICAgICAgRml4ZXMgYSBidWcgaW4gSlNFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudCgpIHdoZXJlIHRoZSBleGNlcHRpb24gdGhyb3duIGZyb20K
KyAgICAgICAgYSBmYWlsZWQgYXR0ZW1wdCB0byBnZXQgdGhlIGhhbmRsZUV2ZW50IGNhbGxiYWNr
IGlzIG5vdCBoYW5kbGVkLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9D
YXRjaFNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvZW5jcnlwdGVkbWVkaWEvQ0RN
U2Vzc2lvbkNsZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNETVNlc3Npb25DbGVhcktl
eTo6dXBkYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0T3JBZGQpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtUHV0T3JB
ZGQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6Y2FsbFNjcmlwdCk6CisgICAgICAgICogTW9k
dWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6OmVuc3VyZVJlcGxhY2VtZW50U2NyaXB0
SW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UXVpY2tUaW1lUGx1Z2luUmVwbGFjZW1lbnQ6
Omluc3RhbGxSZXBsYWNlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvQXJyYXlWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcnJheVZhbHVlOjpnZXQpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlvbmFyeTo6Z2V0
T3duUHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcCk6CisgICAgICAgICogYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVTaGlwcGluZ01ldGhvZFNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpKU0FwcGxlUGF5U2Vzc2lvbjo6Y29tcGxldGVTaGlwcGluZ0Nv
bnRhY3RTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNBcHBsZVBheVNlc3Npb246OmNv
bXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNB
dWRpb1RyYWNrQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQXVkaW9UcmFjazo6c2V0
S2luZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdlKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29uc3RydWN0SlNCbG9iKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbW1hbmRM
aW5lQVBJSG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRKU0xpc3RlbmVyRnVu
Y3Rpb25zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25h
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpn
ZXRBbGdvcml0aG1JZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEhhc2hBbGdvcml0
aG0pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQWVzQ2JjUGFyYW1zKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUFlc0tleUdlblBhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVI
bWFjUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUhtYWNLZXlQYXJhbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhS2V5R2VuUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZVJzYU9hZXBQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUnNhU3NhUGFy
YW1zKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SlNBcnJheUZyb21KU09OKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldFN0cmluZ0Zyb21KU09OKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvb2xlYW5G
cm9tSlNPTik6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6
OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSyk6CisgICAgICAgIChXZWJDb3JlOjpKU0NyeXB0
b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uY2lsZVVzYWdlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OmtleURhdGFPY3RldFNlcXVlbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6a2V5RGF0YVJTQUNv
bXBvbmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
OjprZXlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSlNPTkZvclJTQUNvbXBvbmVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6YWRkVXNhZ2VzVG9KU09OKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjb25zdHJ1Y3RFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsZW1lbnQpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Ondo
ZW5EZWZpbmVkUHJvbWlzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUVsZW1lbnRSZWdp
c3RyeTo6d2hlbkRlZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZVRvVVNWU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRDdXJyZW50RXhj
ZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERPTUV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpoYXNJdGVyYXRvck1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjp0b1NtYWxsZXJJ
bnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9TbWFsbGVyVUludCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0ludDMyRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVUludDMyRW5mb3Jj
ZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSW50NjRFbmZvcmNlUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9VSW50NjRFbmZvcmNlUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6dGhy
b3dOb3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjp0aHJvd0ludmFsaWRTdGF0
ZUVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRocm93U2VjdXJpdHlFcnJvcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0pTU2Vx
dWVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpqc0Zy
b3plbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPFN0cmluZz46
Om5hdGl2ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdGl2ZVZhbHVlVHJhaXRzPHVuc2ln
bmVkPjo6bmF0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlVmFsdWVUcmFpdHM8
ZmxvYXQ+OjpuYXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVWYWx1ZVRyYWl0
czxkb3VibGU+OjpuYXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b05hdGl2ZUFycmF5
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjptYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VHZXR0ZXJUeXBlRXJyb3JGb3JCdWlsdGlucyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjppdGVyYXRvckZvckVhY2gpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWpl
Y3RQcm9taXNlV2l0aEV4Y2VwdGlvbklmQW55KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TVByb21pc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxQcm9taXNlRnVuY3Rpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NU3RyaW5nTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NU3RyaW5nTWFwOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93TWlj
cm90YXNrQ2FsbGJhY2s6OmNhbGwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3Blbik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRs
ZVBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRUaW1lb3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRJbnRlcnZhbCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNEYXRhQ3VlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN0cnVjdEpTRGF0YUN1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25F
dmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkQWNjZWxlcmF0aW9uQXJndW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVhZFJvdGF0aW9uUmF0ZUFyZ3VtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRGV2aWNlTW90aW9uRXZlbnQ6OmluaXREZXZpY2VNb3Rpb25FdmVudCk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNE
aWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlv
bmFyeS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eUFu
ZFJlc3VsdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNG
aWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTRmlsZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVQb3NpdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SlNHZW9sb2Nh
dGlvbjo6Z2V0Q3VycmVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTR2VvbG9jYXRp
b246OndhdGNoUG9zaXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxl
Y3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbEhUTUxBbGxDb2xsZWN0aW9u
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldDNEQ29udGV4dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0hUTUxDYW52YXNFbGVtZW50Ojpwcm9iYWJseVN1cHBvcnRzQ29udGV4dCk6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hpc3Rv
cnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpwdXNoU3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNIaXN0b3J5OjpyZXBsYWNlU3RhdGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTSURCRGF0YWJhc2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
TGF6eUV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNMYXp5RXZlbnRMaXN0
ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWluVGhyZWFkRXhlY1N0
YXRlOjpsaW5rQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjp+SlNNYWluVGhyZWFkRXhlY1N0YXRlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVJ
bml0TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxNZXNzYWdlUG9ydEFycmF5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmg6CisgICAgICAgIChXZWJDb3Jl
OjpoYW5kbGVQb3N0TWVzc2FnZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNb2NrQ29udGVu
dEZpbHRlclNldHRpbmdzQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTW9ja0NvbnRl
bnRGaWx0ZXJTZXR0aW5nczo6c2V0RGVjaXNpb25Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjp0
b0RlY2lzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5n
czo6c2V0RGVjaXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNNb2NrQ29udGVudEZpbHRlclNl
dHRpbmdzOjpzZXRVbmJsb2NrUmVxdWVzdERlY2lzaW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVy
OjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b05vZGVPclN0cmluZ1ZlY3Rvcik6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NW
R0xlbmd0aEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR0xlbmd0aDo6Y29udmVy
dFRvU3BlY2lmaWVkVW5pdHMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3JhZ2U6OmdldE93blByb3BlcnR5TmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTdG9yYWdlOjpwdXREZWxlZ2F0ZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNUZXh0VHJhY2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNU
ZXh0VHJhY2s6OnNldExhbmd1YWdlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNWaWRlb1RyYWNrOjpzZXRLaW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVmlkZW9UcmFjazo6c2V0TGFuZ3VhZ2UpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEluZGV4ZWRQYXJhbWV0ZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRPYmplY3RQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlv
bmYpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uTWF0cml4KToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcnlw
dG9LZXlGb3JtYXRGcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcnlwdG9LZXlVc2Fn
ZXNGcm9tSlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6
ZW5jcnlwdCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlw
dCk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6dmVyaWZ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkaWdlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SlNXZWJLaXRTdWJ0bGVDcnlwdG86OmdlbmVyYXRlS2V5KToKKyAgICAgICAgKFdlYkNvcmU6Omlt
cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYktpdFN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjp3cmFwS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViS2l0U3Vi
dGxlQ3J5cHRvOjp1bndyYXBLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTV29ya2VyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OmltcG9ydFNjcmlwdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0VGltZW91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzZXRJbnRlcnZhbCk6CisgICAgICAgICogYmluZGluZ3Mv
anMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppbnZva2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6aXNDb250cm9sbGVkUmVhZGFi
bGVTdHJlYW1Mb2NrZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlU3RyZWFtRGVmYXVs
dENvbnRyb2xsZXI6OmVucXVldWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVkdWxlZEFj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEdsb2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVCYXNlOjpz
aG91bGRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRl
c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
emUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2Vu
ZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKEdlbmVyYXRl
SW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2spOgorICAg
ICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChHZW5l
cmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RBY3RpdmVET01PYmplY3RQcm90b3R5cGVGdW5jdGlvblBvc3RNZXNzYWdlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJQcm90b3R5cGVGdW5jdGlv
bkFub3RoZXJGdW5jdGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRD
b25zdHJ1Y3RvckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RFdmVudFRhcmdldFByb3RvdHlwZUZ1bmN0aW9uSXRlbSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhdGVBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9i
amVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvblJlZ3VsYXJPcGVyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5jdGlvbkVuYWJsZWRBdFJ1bnRp
bWVPcGVyYXRpb24xKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdEluc3Rh
bmNlRnVuY3Rpb25FbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMik6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU1Rlc3RJbnRlcmZhY2VDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9ySW1wbGVtZW50c1N0YXRpY0F0dHIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c05vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0b3JTdXBwbGVtZW50YWxTdGF0aWNB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0
cjIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3Ry
Myk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uSW1w
bGVtZW50c01ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0SW50ZXJmYWNlUHJvdG90
eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JUZXN0QXR0cmlidXRlUldDdXN0b20p
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3JOYW1lZENv
bnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3ROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE5vZGVOYW1lKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9uZGV0ZXJtaW5pc3Rp
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0
ZXJtaW5pc3RpY1dyaXRlYWJsZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0Tm9u
ZGV0ZXJtaW5pc3RpY05vbmRldGVybWluaXN0aWNFeGNlcHRpb25BdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE5vbmRldGVybWluaXN0aWNOb25kZXRlcm1pbmlzdGljR2V0dGVyRXhj
ZXB0aW9uQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaW5pc3RpY1NldHRlckV4Y2VwdGlvbkF0dHIpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeT4pOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91bGROb3RUb2xlcmF0ZU51
bGw+KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5PFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkVG9sZXJhdGVOdWxsPik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
RGljdGlvbmFyeTxBbHRlcm5hdGVEaWN0aW9uYXJ5TmFtZT4pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ29uc3RydWN0b3JTdGF0aWNTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialRlc3RTdWJPYmpFbmFibGVkQnlTZXR0aW5nQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW51bUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqQnl0ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
T2N0ZXRBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialNob3J0QXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9iakVuZm9yY2VSYW5nZVNob3J0QXR0cik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0QXR0cik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpMb25nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpM
b25nTG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyaW5nQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVc3ZzdHJpbmdBdHRyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9ialRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdE9ialRlc3ROdWxsYWJsZU9iakF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0
T2JqTGVuaWVudFRlc3RPYmpBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0
cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqWE1MT2JqQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RPYmpDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
U1ZTdHJpbmdBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZElu
dGVncmFsQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVbnNp
Z25lZEludGVncmFsQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0
ZWRCb29sZWFuQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRV
UkxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZFVTVlVSTEF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdy
YWxBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbUJv
b2xlYW5BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3Rv
bVVSTEF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGlt
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpUeXBlZEFycmF5QXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlv
bldpdGhNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakF0dHJXaXRoU2V0
dGVyRXhjZXB0aW9uV2l0aE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2Jq
U3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ3VzdG9tQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpP
bmZvbyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpPbndlYmtpdGZvbyk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0
aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlw
dFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjEpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNUZXN0T2JqQ29uZGl0aW9uYWxBdHRyMik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpDb25kaXRpb25hbEF0dHIzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakNv
bmRpdGlvbmFsQXR0cjRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpDb25kaXRpb25hbEF0dHI1Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqQ29uZGl0aW9uYWxBdHRyNkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakFueUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpN
dXRhYmxlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU3RyYXdiZXJyeSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpJZCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RP
YmpSZXBsYWNlYWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpO
dWxsYWJsZUxvbmdTZXR0YWJsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rl
c3RPYmpOdWxsYWJsZVN0cmluZ1NldHRhYmxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9iak51bGxhYmxlVVNWU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTnVsbGFibGVTdHJpbmdWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbnVtVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc0F0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpQdXRGb3J3YXJkc051bGxhYmxlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialN0cmluZ2lmaWVyQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uRW5hYmxlZEF0UnVudGltZU9w
ZXJhdGlvbjEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25F
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblZvaWRNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkJ5dGVNZXRob2RXaXRoQXJncyk6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9jdGV0TWV0aG9kV2l0aEFyZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25Mb25nTWV0aG9kV2l0
aEFyZ3MpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PYmpN
ZXRob2RXaXRoQXJncyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhBcmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFhQYXRoTlNSZXNvbHZl
clBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk51bGxhYmxlU3RyaW5nU3BlY2lhbE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFbnVtQXJnKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsRW51bUFyZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRp
b25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aFVTVlN0
cmluZ0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOdWxsYWJsZVVTVlN0cmluZ0FyZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhVU1ZTdHJpbmdBcmdUcmVhdGluZ051bGxBc0Vt
cHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
U2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uUHJpdmF0ZU1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvblB1YmxpY0FuZFByaXZhdGVNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uUmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRTdGF0ZU9i
aik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3Jp
cHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNl
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFy
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFs
VVNWU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nQW5kRGVmYXVsdFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNO
dWxsKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBdG9taWNTdHJpbmdJc051bGwp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsVVNWU3RyaW5nSXNFbXB0eVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEF0b21pY1N0cmluZ0lzRW1wdHlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxEb3VibGVJc05hTik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhP
cHRpb25hbEZsb2F0SXNOYU4pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxMb25nTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbExvbmdMb25nSXNaZXJv
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aE9wdGlvbmFsVW5zaWduZWRMb25nTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmdJc1plcm8p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxTZXF1ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFNlcXVlbmNlSXNFbXB0eSk6CisgICAgICAgIChXZWJD
b3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEJvb2xlYW4p
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRo
T3B0aW9uYWxCb29sZWFuSXNGYWxzZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbFhQYXRoTlNSZXNvbHZlcik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3Zl
cmxvYWRlZE1ldGhvZDIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25PdmVybG9hZGVkTWV0aG9kMyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2Q0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDcpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kOSk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMCk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRN
ZXRob2QxMSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk92
ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIxKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBh
cmFtZXRlcjIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlv
bkNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakNv
bnN0cnVjdG9yRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kMTEpOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqQ29uc3RydWN0b3JGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QxMik6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNsYXNzTWV0aG9kV2l0aENsYW1w
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ2xhc3NNZXRo
b2RXaXRoRW5mb3JjZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aFVuc2lnbmVkTG9uZ1NlcXVlbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU3RyaW5nQXJyYXlGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhBbmRXaXRo
b3V0TnVsbGFibGVTZXF1ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ29udmVydDMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25Db252ZXJ0NCk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvblZhcmlhZGljU3RyaW5nTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uVmFyaWFkaWNEb3VibGVNZXRob2QpOgorICAgICAgICAo
V2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25BbnkpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25UZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aEZsb2F0
QXJndW1lbnRQcm9taXNlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uVGVzdFByb21pc2VGdW5jdGlvbldpdGhPcHRpb25hbEludEFyZ3VtZW50UHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblRlc3RQcm9taXNl
T3ZlcmxvYWRlZEZ1bmN0aW9uMVByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25Db25kaXRpb25hbE92ZXJsb2FkMSk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkNvbmRpdGlvbmFsT3ZlcmxvYWQyKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2luZ2xlQ29uZGl0aW9uYWxP
dmVybG9hZDEpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25T
aW5nbGVDb25kaXRpb25hbE92ZXJsb2FkMik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbkF0dGFjaFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMSk6CisgICAgICAgIChXZWJD
b3JlOjpjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlMik6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRp
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T3ZlcnJpZGVCdWlsdGluc1Byb3RvdHlw
ZUZ1bmN0aW9uTmFtZWRJdGVtKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNhY2hl
ZFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRl
ZnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0VHlwZWRlZnNDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdFR5cGVkZWZzVW5zaWduZWRMb25n
TG9uZ0F0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRlZnNJbW11dGFibGVT
ZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0VHlwZWRl
ZnNBdHRyV2l0aEdldHRlckV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RU
eXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpT
VGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0ZXJFeGNlcHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uRnVuYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RUeXBlZGVmc1Byb3RvdHlwZUZ1bmN0aW9uU2V0U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZzUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90
b3R5cGVGdW5jdGlvbk51bGxhYmxlU2VxdWVuY2VBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvbkZ1bmNXaXRoQ2xhbXApOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0cmluZ1NlcXVlbmNlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0VHlwZWRlZnNQcm90b3R5cGVGdW5jdGlvblN0
cmluZ1NlcXVlbmNlRnVuY3Rpb24yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdFR5cGVkZWZz
UHJvdG90eXBlRnVuY3Rpb25DYWxsV2l0aFNlcXVlbmNlVGhhdFJlcXVpcmVzSW5jbHVkZSk6Cisg
ICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKyAgICAgICAgKF9OUE5fSW52b2tlRGVm
YXVsdCk6CisgICAgICAgIChfTlBOX0ludm9rZSk6CisgICAgICAgIChfTlBOX0V2YWx1YXRlKToK
KyAgICAgICAgKF9OUE5fR2V0UHJvcGVydHkpOgorICAgICAgICAoX05QTl9TZXRQcm9wZXJ0eSk6
CisgICAgICAgIChfTlBOX1JlbW92ZVByb3BlcnR5KToKKyAgICAgICAgKF9OUE5fSGFzUHJvcGVy
dHkpOgorICAgICAgICAoX05QTl9IYXNNZXRob2QpOgorICAgICAgICAoX05QTl9FbnVtZXJhdGUp
OgorICAgICAgICAoX05QTl9Db25zdHJ1Y3QpOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjptb3ZlR2xvYmFsRXhj
ZXB0aW9uVG9FeGVjU3RhdGUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVj
dC5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEV4Y2VwdGlvblRvQ29uc29sZSk6CisgICAgICAg
ICgtW1dlYlNjcmlwdE9iamVjdCBjYWxsV2ViU2NyaXB0TWV0aG9kOndpdGhBcmd1bWVudHM6XSk6
CisgICAgICAgICgtW1dlYlNjcmlwdE9iamVjdCBldmFsdWF0ZVdlYlNjcmlwdDpdKToKKyAgICAg
ICAgKC1bV2ViU2NyaXB0T2JqZWN0IHNldFZhbHVlOmZvcktleTpdKToKKyAgICAgICAgKC1bV2Vi
U2NyaXB0T2JqZWN0IHZhbHVlRm9yS2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qg
cmVtb3ZlV2ViU2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3QgaGFzV2Vi
U2NyaXB0S2V5Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgd2ViU2NyaXB0VmFsdWVB
dEluZGV4Ol0pOgorICAgICAgICAoLVtXZWJTY3JpcHRPYmplY3Qgc2V0V2ViU2NyaXB0VmFsdWVB
dEluZGV4OnZhbHVlOl0pOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRl
bnNpb25QYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Omdl
dERvbWFpbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdldFR5
cGVGbGFncyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZFRyaWdn
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRBY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmxvYWRFbmNvZGVkUnVsZXMpOgor
ICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b250cm9sbGVySlNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1
cGRhdGVDYXB0aW9uQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OmVuc3VyZU1lZGlhQ29udHJvbHNJbmplY3RlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhQ29udHJvbHNBZnRlclByZXNl
bnRhdGlvbk1vZGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6
Z2V0Q3VycmVudE1lZGlhQ29udHJvbHNTdGF0dXMpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJ
bkltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50OjpkaWRBZGRVc2VyQWdlbnRTaGFkb3dSb290KToKKwogMjAxNi0wOS0wNyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBoYW5kbGluZyBvZiBuZWdhdGl2
ZSByYWRpdXMgaW4gSFRNTEFyZWFFbGVtZW50J3MgY29vcmRzIHdoZW4gaW4gY2lyY2xlIHN0YXRl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0NhdGNoU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50
aW1lL0NhdGNoU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL0NhdGNoU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfQ2F0Y2hTY29wZV9oCisjZGVmaW5lIFdlYkNvcmVf
RldEX0NhdGNoU2NvcGVfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NhdGNoU2NvcGUuaD4K
KyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1T
ZXNzaW9uQ2xlYXJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvQ0RNU2Vzc2lvbkNsZWFyS2V5LmNwcAkocmV2aXNpb24gMjA1NTY2KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9DRE1TZXNzaW9uQ2xlYXJL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTIgKzExMSwxMyBAQCBib29sIENETVNlc3Np
b25DbGVhcktleTo6dXBkYXRlKFVpbnQ4QXJyCiAKICAgICAgICAgVk0mIHZtID0gY2xlYXJLZXlW
TSgpOwogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIGpzTnVsbCgpKSk7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogCiAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIo
Y2xlYXJLZXlWTSgpKTsKICAgICAgICAgSlNWYWx1ZSBrZXlzRGF0YU9iamVjdCA9IEpTT05QYXJz
ZShleGVjLCByYXdLZXlzU3RyaW5nKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
IHx8ICFrZXlzRGF0YU9iamVjdCkgeworICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwg
IWtleXNEYXRhT2JqZWN0KSB7CiAgICAgICAgICAgICBMT0coTWVkaWEsICJDRE1TZXNzaW9uQ2xl
YXJLZXk6OnVwZGF0ZSglcCkgLSBmYWlsZWQ6IGludmFsaWQgSlNPTiIsIHRoaXMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDYgKzIzNiw5IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmpl
Y3RTdG9yZTo6cHV0Rm8KIAogUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXRP
ckFkZChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8SURCS2V5PiBrZXks
IEluZGV4ZWREQjo6T2JqZWN0U3RvcmVPdmVyd3JpdGVNb2RlIG92ZXJ3cml0ZU1vZGUsIElubGlu
ZUtleUNoZWNrIGlubGluZUtleUNoZWNrLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQog
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjpwdXRP
ckFkZCIpOwogICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIApAQCAtMjcwLDkgKzI3Myw5IEBAIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0T3IKICAgICB9CiAKICAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVlLCBudWxscHRyLCBudWxscHRyKTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KSB7CiAgICAgICAgIC8vIENsZWFyIHRoZSBET00gZXhjZXB0aW9uIGZyb20gdGhlIHNlcmlhbGl6
ZXIgc28gd2UgY2FuIGdpdmUgYSBtb3JlIHRhcmdldGVkIGV4Y2VwdGlvbi4KLSAgICAgICAgc3Rh
dGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAog
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFDbG9uZUVycm9yOwog
ICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gc3RvcmUgcmVjb3Jk
IGluIGFuIElEQk9iamVjdFN0b3JlOiBBbiBvYmplY3QgY291bGQgbm90IGJlIGNsb25lZC4iKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODU5LDcgKzg1OSw5IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJh
c2U6OnBlcmZvcm1QdXRPckFkZCgKICAgICAvLyB1c2luZyBzdGVwcyB0byBhc3NpZ24gYSBrZXkg
dG8gYSB2YWx1ZSB1c2luZyBhIGtleSBwYXRoLgogICAgIFRocmVhZFNhZmVEYXRhQnVmZmVyIGlu
amVjdGVkUmVjb3JkVmFsdWU7CiAgICAgaWYgKHVzZWRLZXlJc0dlbmVyYXRlZCAmJiAhb2JqZWN0
U3RvcmVJbmZvLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2tlcihkYXRhYmFzZVRocmVhZFZNKCkpOworICAgICAgICBWTSYgdm0gPSBkYXRhYmFzZVRocmVh
ZFZNKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgYXV0byB2YWx1ZSA9IGRl
c2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoZGF0YWJhc2VUaHJlYWRFeGVjU3RhdGUoKSwgb3Jp
Z2luYWxSZWNvcmRWYWx1ZS5kYXRhKCkpOwogICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQo
KSkgewpAQCAtODczLDcgKzg3NSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBlcmZvcm1Q
dXRPckFkZCgKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gc2VyaWFsaXplZFZhbHVlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJmRhdGFiYXNlVGhyZWFkRXhlY1N0YXRlKCksIHZh
bHVlLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlVGhyZWFkRXhlY1N0
YXRlKCkuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkgewogICAgICAgICAgICAgcG9zdERhdGFiYXNlVGFza1JlcGx5KGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJlVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQZXJmb3JtUHV0T3JBZGQs
IGNhbGxiYWNrSWRlbnRpZmllciwgSURCRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0
cmFpbnRFcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc2VyaWFsaXplIHJlY29yZCB2YWx1
ZSBhZnRlciBpbmplY3RpbmcgcmVjb3JkIGtleSIpKSwgdXNlZEtleSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1NEUFByb2Nlc3Nvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTAwLDE1ICs1MDEsMTcgQEAgYm9vbCBTRFBQcm9jZXNzb3I6OmNhbGxTY3JpcHQo
Y29uc3QgU3RyaQogCiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IGRv
Y3VtZW50LT5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVy
Lmdsb2JhbE9iamVjdCgqbV9pc29sYXRlZFdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBl
eGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBwcm9iZUZ1bmN0aW9uVmFsdWUgPSBnbG9i
YWxPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImdl
bmVyYXRlIikpOwogICAgIGlmICghcHJvYmVGdW5jdGlvblZhbHVlLmlzRnVuY3Rpb24oKSkgewog
ICAgICAgICBVUkwgc2NyaXB0VVJMOwogICAgICAgICBzY3JpcHRDb250cm9sbGVyLmV2YWx1YXRl
SW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKFNEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlOjpzY3Jp
cHRTdHJpbmcoKSwgc2NyaXB0VVJMKSwgKm1faXNvbGF0ZWRXb3JsZCk7Ci0gICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTUyNyw5ICs1MzAsOSBAQCBib29sIFNEUFByb2Nlc3Nvcjo6Y2Fs
bFNjcmlwdChjb25zdCBTdHJpCiAgICAgYXJnTGlzdC5hcHBlbmQoSlNDOjpqc1N0cmluZyhleGVj
LCBhcmd1bWVudCkpOwogCiAgICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IEpTQzo6Y2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJTRFBQcm9jZXNzb3Igc2NyaXB0IHRo
cmV3IGluIGZ1bmN0aW9uICVzIiwgZnVuY3Rpb25OYW1lLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9wbHVnaW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvcGx1Z2lucy9RdWlja1RpbWVQbHVnaW5SZXBsYWNl
bWVudC5tbQkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9wbHVn
aW5zL1F1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAs
MTcgKzE2MCwxOSBAQCBib29sIFF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50OjplbnN1cmVSCiAg
ICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCA9IGlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gbV9wYXJlbnRFbGVtZW50LT5kb2N1bWVudCgp
LmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIuZ2xvYmFs
T2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICAK
ICAgICBKU0M6OkpTVmFsdWUgcmVwbGFjZW1lbnRGdW5jdGlvbiA9IGdsb2JhbE9iamVjdC0+Z2V0
KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlUGx1Z2luUmVw
bGFjZW1lbnQiKSk7CiAgICAgaWYgKHJlcGxhY2VtZW50RnVuY3Rpb24uaXNGdW5jdGlvbigpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBzY3JpcHRDb250cm9sbGVyLmV2YWx1YXRl
SW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKHF1aWNrVGltZVBsdWdpblJlcGxhY2VtZW50U2NyaXB0
KCkpLCB3b3JsZCk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBMT0coUGx1Z2lucywgIiVwIC0g
RXhjZXB0aW9uIHdoZW4gZXZhbHVhdGluZyBRdWlja1RpbWUgcGx1Z2luIHJlcGxhY2VtZW50IHNj
cmlwdCIsIHRoaXMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IApAQCAtMTg4LDE1ICsxOTAsMTcgQEAgYm9vbCBRdWlja1RpbWVQbHVnaW5SZXBsYWNlbWVudDo6
aW5zdGFsbAogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBpc29sYXRlZFdvcmxkKCk7CiAg
ICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9IG1fcGFyZW50RWxlbWVudC0+
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9s
bGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7Ci0gICAgCisKICAgICAvLyBMb29rdXAgdGhlICJjcmVhdGVQbHVnaW5SZXBsYWNlbWVudCIg
ZnVuY3Rpb24uCiAgICAgSlNDOjpKU1ZhbHVlIHJlcGxhY2VtZW50RnVuY3Rpb24gPSBnbG9iYWxP
YmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImNyZWF0
ZVBsdWdpblJlcGxhY2VtZW50IikpOwogICAgIGlmIChyZXBsYWNlbWVudEZ1bmN0aW9uLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBKU0M6OkpTT2JqZWN0
KiByZXBsYWNlbWVudE9iamVjdCA9IHJlcGxhY2VtZW50RnVuY3Rpb24udG9PYmplY3QoZXhlYyk7
Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxU
eXBlIGNhbGxUeXBlID0gcmVwbGFjZW1lbnRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxE
YXRhKHJlcGxhY2VtZW50T2JqZWN0LCBjYWxsRGF0YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IEpT
Qzo6Q2FsbFR5cGU6Ok5vbmUpCkBAIC0yMDksMzIgKzIxMywzMiBAQCBib29sIFF1aWNrVGltZVBs
dWdpblJlcGxhY2VtZW50OjppbnN0YWxsCiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUzxTdHJpbmc+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgbV9uYW1lcykpOwogICAgIGFyZ0xpc3QuYXBwZW5kKHRvSlM8
U3RyaW5nPihleGVjLCBnbG9iYWxPYmplY3QsIG1fdmFsdWVzKSk7CiAgICAgSlNDOjpKU1ZhbHVl
IHJlcGxhY2VtZW50ID0gY2FsbChleGVjLCByZXBsYWNlbWVudE9iamVjdCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBnbG9iYWxPYmplY3QsIGFyZ0xpc3QpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgewotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgPHZpZGVvPiBj
cmVhdGVkIHRvIHJlcGxhY2UgdGhlIHBsdWctaW4uCiAgICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0g
cmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
dmlkZW8iKSk7Ci0gICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24oKSAmJiAhdmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBtX21lZGlhRWxlbWVudCA9IEpTSFRNTFZpZGVvRWxl
bWVudDo6dG9XcmFwcGVkKHZhbHVlKTsKIAogICAgIGlmICghbV9tZWRpYUVsZW1lbnQpIHsKICAg
ICAgICAgTE9HKFBsdWdpbnMsICIlcCAtIEZhaWxlZCB0byBmaW5kIDx2aWRlbz4gZWxlbWVudCBj
cmVhdGVkIGJ5IFF1aWNrVGltZSBwbHVnaW4gcmVwbGFjZW1lbnQgc2NyaXB0LiIsIHRoaXMpOwot
ICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSBz
Y3JpcHRpbmcgaW50ZXJmYWNlLgogICAgIHZhbHVlID0gcmVwbGFjZW1lbnQuZ2V0KGV4ZWMsIEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAic2NyaXB0T2JqZWN0IikpOwotICAgIGlm
ICghZXhlYy0+aGFkRXhjZXB0aW9uKCkgJiYgIXZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmICF2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CiAgICAgICAgIG1fc2NyaXB0T2JqZWN0ID0gdmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAg
ICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICB9CiAKICAgICBpZiAoIW1fc2NyaXB0T2JqZWN0KSB7CiAgICAg
ICAgIExPRyhQbHVnaW5zLCAiJXAgLSBGYWlsZWQgdG8gZmluZCBzY3JpcHQgb2JqZWN0IGNyZWF0
ZWQgYnkgUXVpY2tUaW1lIHBsdWdpbiByZXBsYWNlbWVudC4iLCB0aGlzKTsKLSAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQXJyYXlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQXJyYXlWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0FycmF5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw5
IEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBpbmRleCwgRGljdGkKIAogYm9vbCBBcnJh
eVZhbHVlOjpnZXQoc2l6ZV90IGluZGV4LCBTdHJpbmcmIHZhbHVlKSBjb25zdAogeworICAgIFZN
JiB2bSA9IG1fZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBpZiAoaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC05MCw3ICs5Myw3IEBAIGJvb2wgQXJyYXlWYWx1ZTo6Z2V0KHNpemVfdCBpbmRl
eCwgU3RyaW4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdmFsdWUgPSBpbmRleGVkVmFs
dWUudG9XVEZTdHJpbmcobV9leGVjKTsKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RpY3Rpb25hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBAQCBi
b29sIERpY3Rpb25hcnk6OmdldE93blByb3BlcnRpZXNBc1N0cmluCiAKICAgICBKU09iamVjdCog
b2JqZWN0ID0gIG1fZGljdGlvbmFyeS5pbml0aWFsaXplck9iamVjdCgpOwogICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IG1fZGljdGlvbmFyeS5leGVjU3RhdGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFBy
b3BlcnR5TmFtZUFycmF5IHByb3BlcnR5TmFtZXMoZXhlYywgUHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncyk7CiAgICAgSlNPYmplY3Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUoKSk7CkBAIC02OSwxMCArNzEsMTAgQEAgYm9v
bCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbgogICAgICAgICBpZiAoc3RyaW5n
S2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gb2JqZWN0LT5nZXQoZXhlYywgKml0KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgaWYgKCFleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgaWYgKExJS0VMWSghc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAg
bWFwLnNldChzdHJpbmdLZXksIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTMgKzkwLDE0IEBAIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUmIHN0YXRlLCBKU0dsb2JhbE8KIAogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CiAgICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKHZtLmFwaUxvY2soKSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgc3dpdGNoIChrZXktPnR5cGUoKSkg
ewogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAgICAgYXV0byYgaW5BcnJheSA9IGtl
eS0+YXJyYXkoKTsKICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGluQXJyYXkuc2l6ZSgpOwogICAg
ICAgICBhdXRvIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheSgmc3RhdGUsIDAsICZnbG9i
YWxPYmplY3QsIHNpemUpOwotICAgICAgICBpZiAoVU5MSUtFTFkodm0uZXhjZXB0aW9uKCkpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
KytpKQogICAgICAgICAgICAgb3V0QXJyYXktPnB1dERpcmVjdEluZGV4KCZzdGF0ZSwgaSwgdG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBpbkFycmF5LmF0KGkpLmdldCgpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcHBsZVBheVNlc3Npb25DdXN0
b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0FwcGxlUGF5U2Vzc2lvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE1ICs1NSwx
NSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwCiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICB1aW50MTZfdCBzdGF0dXMgPSBjb252ZXJ0PHVpbnQxNl90
PihzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBEaWN0aW9u
YXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDEpIH07Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5VmFs
dWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSB9OwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5jb21w
bGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHN0YXR1cywgbmV3VG90YWwsIG5ld0xpbmVJdGVt
cywgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKQEAgLTg4LDE5ICs4OCwx
OSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNzaW9uOjpjb21wbGV0ZVNoaXBwCiAKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICB1aW50MTZfdCBzdGF0dXMgPSBjb252ZXJ0PHVpbnQxNl90
PihzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBcnJheVZh
bHVlIG5ld1NoaXBwaW5nTWV0aG9kcyB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMSkgfTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAg
RGljdGlvbmFyeSBuZXdUb3RhbCA9IHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSB9OwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBB
cnJheVZhbHVlIG5ld0xpbmVJdGVtcyB7ICZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMykgfTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGlt
cGwuY29tcGxldGVTaGlwcGluZ0NvbnRhY3RTZWxlY3Rpb24oc3RhdHVzLCBuZXdTaGlwcGluZ01l
dGhvZHMsIG5ld1RvdGFsLCBuZXdMaW5lSXRlbXMsIGVjKTsKICAgICBzZXRET01FeGNlcHRpb24o
JnN0YXRlLCBlYyk7CkBAIC0xMjUsMTEgKzEyNSwxMSBAQCBKU1ZhbHVlIEpTQXBwbGVQYXlTZXNz
aW9uOjpjb21wbGV0ZVBheW1lCiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBEaWN0
aW9uYXJ5IG5ld1RvdGFsID0geyAmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApIH07Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEFycmF5
VmFsdWUgbmV3TGluZUl0ZW1zIHsgJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSB9OwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaW1wbC5j
b21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24obmV3VG90YWwsIG5ld0xpbmVJdGVtcywgZWMp
OwogICAgIHNldERPTUV4Y2VwdGlvbigmc3RhdGUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQXVkaW9UcmFja0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb1RyYWNrQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTEgQEAgdm9pZCBKU0F1ZGlvVHJhY2s6OnZp
c2l0QWRkaXRpb25hbENoaWxkcgogdm9pZCBKU0F1ZGlvVHJhY2s6OnNldEtpbmQoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgYXV0byYgc3RyaW5nID0gdmFsdWUudG9TdHJpbmcoJnN0YXRlKS0+dmFs
dWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIHdyYXBwZWQoKS5z
ZXRLaW5kKHN0cmluZyk7CiAjZWxzZQpAQCAtNTYsOCArNTksMTEgQEAgdm9pZCBKU0F1ZGlvVHJh
Y2s6OnNldEtpbmQoRXhlY1N0YXRlJiBzdAogdm9pZCBKU0F1ZGlvVHJhY2s6OnNldExhbmd1YWdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZz
dGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKICAgICB3
cmFwcGVkKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Jsb2JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmxvYkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDcgKzgwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RK
UwogCiAgICAgdW5zaWduZWQgYmxvYlBhcnRzTGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogYmxv
YlBhcnRzID0gdG9KU1NlcXVlbmNlKGV4ZWMsIGV4ZWMudW5jaGVja2VkQXJndW1lbnQoMCksIGJs
b2JQYXJ0c0xlbmd0aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoYmxvYlBhcnRzKTsKIApAQCAtMTAxLDcgKzEw
MSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgICAg
ICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgZW5kaW5ncyBwcm9wZXJ0eSBhbmQgdmFsaWRhdGUgaXQu
CiAgICAgICAgIGJvb2wgY29udGFpbnNFbmRpbmdzID0gZGljdGlvbmFyeS5nZXQoImVuZGluZ3Mi
LCBlbmRpbmdzKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgIGlmIChjb250YWluc0VuZGluZ3Mp
IHsKQEAgLTExMSw3ICsxMTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTCiAKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgdGhlIHR5cGUgcHJvcGVydHkuCiAg
ICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0eXBlIiwgdHlwZSk7Ci0gICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9
CiAKQEAgLTEyMSw3ICsxMjEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0
cnVjdEpTCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvYlBhcnRzTGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYmxvYlBhcnRzLT5nZXQoJmV4ZWMsIGkpOwot
ICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZlciA9IHRv
QXJyYXlCdWZmZXIoaXRlbSkpCkBAIC0xMzIsNyArMTMyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5kKGJs
b2IpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBpdGVtLnRv
V1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAgICAg
YmxvYkJ1aWxkZXIuYXBwZW5kKHN0cmluZywgZW5kaW5ncyk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xh
cmF0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzU1LDcgKzM1NSw3IEBAIEpTVmFsdWUgSlNDU1NTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXIKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgU3RyaW5nIHByb3BlcnR5TmFt
ZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPENTU1Zh
bHVlPiBjc3NWYWx1ZSA9IHdyYXBwZWQoKS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5TmFt
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9z
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
b21tYW5kTGluZUFQSUhvc3RDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbW1hbmRMaW5lQVBJSG9zdEN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDggKzY4LDkgQEAgSlNWYWx1ZSBKU0NvbW1hbmRMaW5lQVBJSG9zdDo6
aW5zcGVjdGVkTwogc3RhdGljIEpTQXJyYXkqIGdldEpTTGlzdGVuZXJGdW5jdGlvbnMoRXhlY1N0
YXRlJiBzdGF0ZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudExpc3RlbmVySW5mbyYg
bGlzdGVuZXJJbmZvKQogewogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQXJyYXkqIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoJnN0YXRlLCBudWxscHRyKTsKLSAgICBpZiAoVU5MSUtFTFkodm0uZXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHNpemVfdCBoYW5kbGVyc0NvdW50ID0gbGlzdGVuZXJJbmZv
LmV2ZW50TGlzdGVuZXJWZWN0b3Iuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBvdXRw
dXRJbmRleCA9IDA7IGkgPCBoYW5kbGVyc0NvdW50OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyAr
ODAsNyBAQCBib29sIEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KCFhbGdvcml0aG1OYW1lLmNvbnRhaW5zT25seUFTQ0lJKCkpIHsKQEAgLTEwNiwxMiArMTA2LDE0
IEBAIHN0YXRpYyBib29sIGdldEhhc2hBbGdvcml0aG0oSlNEaWN0aW9uYXIKICAgICAvLyBGWElN
RTogVGVhY2ggSlNEaWN0aW9uYXJ5IGhvdyB0byByZXR1cm4gSlNWYWx1ZXMsIGFuZCB1c2UgdGhh
dCB0byBnZXQgaGFzaCBlbGVtZW50IHZhbHVlLgogCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZGlj
dGlvbmFyeS5leGVjU3RhdGUoKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU09iamVjdCogb2JqZWN0ID0g
ZGljdGlvbmFyeS5pbml0aWFsaXplck9iamVjdCgpOwogCiAgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiaGFzaCIpOwogCiAgICAgSlNWYWx1
ZSBoYXNoID0gZ2V0UHJvcGVydHkoZXhlYywgb2JqZWN0LCAiaGFzaCIpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaGFzaC5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CkBAIC0xMzQsMTYgKzEzNiwxNiBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+CiAgICAgfQogCiAgICAgSlNWYWx1ZSBpdiA9IGdldFByb3BlcnR5KGV4ZWMsIHZh
bHVlLmdldE9iamVjdCgpLCAiaXYiKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxnb3JpdGhtQWVz
Q2JjUGFyYW1zKTsKIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgaXZEYXRhOwotICAgIGlmICgh
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGl2LCBpdkRhdGEpKSB7Ci0gICAg
ICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5
cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKGV4ZWMsIGl2LCBpdkRhdGEpOworICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIGlmIChpdkRhdGEuc2Vjb25kICE9IDE2
KSB7CiAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVFcnJvcihleGVj
LCAiQUVTLUNCQyBpbml0aWFsaXphdGlvbiBkYXRhIG11c3QgYmUgMTYgYnl0ZXMiKSk7CkBAIC0x
NjgsNyArMTcwLDcgQEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgog
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1BZXNLZXlHZW5Q
YXJhbXMpOwogCiAgICAgSlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0ZSwg
dmFsdWUuZ2V0T2JqZWN0KCksICJsZW5ndGgiKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICByZXN1bHQtPmxlbmd0aCA9IGNvbnZlcnQ8dWludDE2X3Q+KHN0YXRl
LCBsZW5ndGhWYWx1ZSwgRW5mb3JjZVJhbmdlKTsKQEAgLTE4OSwxMCArMTkxLDEwIEBAIHN0YXRp
YyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBKU0RpY3Rpb25hcnkganNE
aWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVzdWx0ID0g
YWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1IbWFjUGFyYW1zKTsKIAotICAgIGlmICghZ2V0
SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50
OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5o
YXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3Bl
LCBzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
CiB9CkBAIC0yMTAsMTMgKzIxMiwxMyBAQCBzdGF0aWMgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+CiAgICAgSlNEaWN0aW9uYXJ5IGpzRGljdGlvbmFyeSgmc3RhdGUsIHZhbHVlLmdl
dE9iamVjdCgpKTsKICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5cHRvQWxnb3Jp
dGhtSG1hY0tleVBhcmFtcyk7CiAKLSAgICBpZiAoIWdldEhhc2hBbGdvcml0aG0oanNEaWN0aW9u
YXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpKSB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gZ2V0SGFz
aEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJlcXVpcmVtZW50OjpS
ZXF1aXJlZCk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAg
IGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAgICAgcmVz
dWx0LT5oYXNMZW5ndGggPSBqc0RpY3Rpb25hcnkuZ2V0KCJsZW5ndGgiLCByZXN1bHQtPmxlbmd0
aCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKQEAgLTIzNiwxNiArMjM4LDE2IEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4KICAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKCpuZXcgQ3J5
cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFyYW1zKTsKIAogICAgIEpTVmFsdWUgbW9kdWx1c0xlbmd0
aFZhbHVlID0gZ2V0UHJvcGVydHkoJnN0YXRlLCB2YWx1ZS5nZXRPYmplY3QoKSwgIm1vZHVsdXNM
ZW5ndGgiKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBG
SVhNRTogV2h5IG5vIEVuZm9yY2VSYW5nZT8gRmlsZWQgYXMgPGh0dHBzOi8vd3d3LnczLm9yZy9C
dWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjM3Nzk+LgogICAgIHJlc3VsdC0+bW9kdWx1c0xl
bmd0aCA9IGNvbnZlcnQ8dWludDMyX3Q+KHN0YXRlLCBtb2R1bHVzTGVuZ3RoVmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IEpTVmFsdWUgcHVibGljRXhwb25lbnRWYWx1ZSA9IGdldFByb3BlcnR5KCZzdGF0ZSwgdmFsdWUu
Z2V0T2JqZWN0KCksICJwdWJsaWNFeHBvbmVudCIpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxVaW50OEFycmF5PiBwdWJsaWNFeHBvbmVudEFycmF5
ID0gdG9VaW50OEFycmF5KHB1YmxpY0V4cG9uZW50VmFsdWUpOwpAQCAtMjc5LDEzICsyODEsMTMg
QEAgc3RhdGljIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPgogICAgIEpTRGljdGlv
bmFyeSBqc0RpY3Rpb25hcnkoZXhlYywgdmFsdWUuZ2V0T2JqZWN0KCkpOwogICAgIGF1dG8gcmVz
dWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FPYWVwUGFyYW1zKTsKIAotICAg
IGlmICghZ2V0SGFzaEFsZ29yaXRobShqc0RpY3Rpb25hcnksIHJlc3VsdC0+aGFzaCwgSGFzaFJl
cXVpcmVtZW50OjpSZXF1aXJlZCkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwg
cmVzdWx0LT5oYXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKTsKKyAgICBBU1NFUlQoc2Nv
cGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9CiAKICAgICBKU1ZhbHVlIGxhYmVsVmFsdWUgPSBnZXRQcm9w
ZXJ0eShleGVjLCB2YWx1ZS5nZXRPYmplY3QoKSwgImxhYmVsIik7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmVzdWx0LT5oYXNMYWJlbCA9ICFsYWJlbFZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCk7CkBAIC0yOTMsMTAgKzI5NSwxMCBAQCBzdGF0aWMgUmVmUHRy
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+CiAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIGxhYmVsRGF0YTsKLSAgICBpZiAoIWNyeXB0
b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBsYWJlbFZhbHVlLCBsYWJlbERhdGEpKSB7
Ci0gICAgICAgIEFTU0VSVChleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9IGNy
eXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZShleGVjLCBsYWJlbFZhbHVlLCBsYWJlbERhdGEp
OworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJlc3VsdC0+bGFi
ZWwuYXBwZW5kKGxhYmVsRGF0YS5maXJzdCwgbGFiZWxEYXRhLnNlY29uZCk7CiAKQEAgLTMxNiwx
MCArMzE4LDEwIEBAIHN0YXRpYyBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4KICAg
ICBKU0RpY3Rpb25hcnkganNEaWN0aW9uYXJ5KCZzdGF0ZSwgdmFsdWUuZ2V0T2JqZWN0KCkpOwog
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYoKm5ldyBDcnlwdG9BbGdvcml0aG1Sc2FTc2FQYXJh
bXMpOwogCi0gICAgaWYgKCFnZXRIYXNoQWxnb3JpdGhtKGpzRGljdGlvbmFyeSwgcmVzdWx0LT5o
YXNoLCBIYXNoUmVxdWlyZW1lbnQ6OlJlcXVpcmVkKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGdldEhhc2hBbGdvcml0aG0oanNE
aWN0aW9uYXJ5LCByZXN1bHQtPmhhc2gsIEhhc2hSZXF1aXJlbWVudDo6UmVxdWlyZWQpOworICAg
IEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KIAogICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNl
cmlhbGl6YXRpb25KV0suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIGJvb2wgZ2V0SlNBcnJh
eUZyb21KU09OKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBKU1ZhbHVl
IHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoIWV4
ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAg
ICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhbiBhcnJheSBmb3IgXCIlc1wiIEpTT04g
a2V5IiwgIGtleSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04NSwxMCArODUsMTAgQEAg
c3RhdGljIGJvb2wgZ2V0U3RyaW5nRnJvbUpTT04oRXhlY1N0YXRlKgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIGlkZW50
aWZpZXIpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGlmICghanNWYWx1ZS5nZXRTdHJpbmcoZXhlYywgcmVz
dWx0KSkgewogICAgICAgICAvLyBDYW4gZ2V0IGFuIG91dCBvZiBtZW1vcnkgZXhjZXB0aW9uLgot
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBTdHJpbmc6OmZvcm1hdCgiRXhwZWN0ZWQgYSBzdHJp
bmcgdmFsdWUgZm9yIFwiJXNcIiBKU09OIGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBib29sIGdldEJvb2xlYW5Gcm9tSlNPTihF
eGVjU3RhdGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
c2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICBpZiAoIWpz
VmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUs
IFN0cmluZzo6Zm9ybWF0KCJFeHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgZm9yIFwiJXNcIiBKU09O
IGtleSIsICBrZXkpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ4LDcgKzE0OCw3IEBA
IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6SlNDcnlwdG9LZXkKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGpzb25WYWx1ZSA9IEpT
T05QYXJzZShleGVjLCBqc29uU3RyaW5nKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFqc29uVmFsdWUgfHwgIWpzb25WYWx1ZS5pc09iamVjdCgpKSB7CkBAIC0yOTgs
NyArMjk4LDcgQEAgdm9pZCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uYwogICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ga2V5T3BzLT5nZXRJbmRleChtX2V4ZWMsIGkpOwog
ICAgICAgICAgICAgU3RyaW5nIG9wZXJhdGlvbjsKICAgICAgICAgICAgIGlmICghanNWYWx1ZS5n
ZXRTdHJpbmcobV9leGVjLCBvcGVyYXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiSldLIGtleV9vcHMgYXR0cmlidXRlIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQi
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzIwLDcgKzMy
MCw3IEBAIHZvaWQgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpyZWNvbmMKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9l
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBTdHJpbmcgandrVXNlU3RyaW5n
OwpAQCAtMzkxLDcgKzM5MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0Ny
eXB0b0sKIAogICAgIFN0cmluZyBrZXlCYXNlNjRVUkw7CiAgICAgaWYgKCFnZXRTdHJpbmdGcm9t
SlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImsiLCBrZXlCYXNlNjRVUkwpKSB7Ci0gICAgICAg
IGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKCFzY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiU2VjcmV0IGtleSBkYXRhIGlzIG5vdCBwcmVzZW50IGlzIEpXSyIpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDIwLDcgKzQyMCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICBWZWN0b3I8dWludDhfdD4gcHJpdmF0ZUV4
cG9uZW50OwogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBt
X2pzb24uZ2V0KCksICJuIiwgbW9kdWx1cykpIHsKLSAgICAgICAgaWYgKCFtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1aXJlZCBKV0sg
XCJuXCIgbWVtYmVyIGlzIG1pc3NpbmciKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KQEAgLTQzMSwxMyArNDMxLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBK
U0NyeXB0b0sKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTiht
X2V4ZWMsIG1fanNvbi5nZXQoKSwgImUiLCBleHBvbmVudCkpIHsKLSAgICAgICAgaWYgKCFtX2V4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9leGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJSZXF1
aXJlZCBKV0sgXCJlXCIgbWVtYmVyIGlzIG1pc3NpbmciKSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAiZCIsIG1vZHVsdXMpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25l
bnRzOjpjcmVhdGVQdWJsaWMobW9kdWx1cywgZXhwb25lbnQpOwogICAgIH0KQEAgLTQ0NiwzOCAr
NDQ2LDM4IEBAIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICBD
cnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIHNlY29uZFByaW1lSW5mbzsKICAg
ICBWZWN0b3I8Q3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OlByaW1lSW5mbz4gb3RoZXJQcmlt
ZUluZm9zOwogICAgIGlmICghZ2V0QmlnSW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9q
c29uLmdldCgpLCAicCIsIGZpcnN0UHJpbWVJbmZvLnByaW1lRmFjdG9yKSkgewotICAgICAgICBp
ZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9LZXlE
YXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZShtb2R1bHVzLCBleHBvbmVudCwgcHJpdmF0
ZUV4cG9uZW50KTsKICAgICB9CiAKICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNP
TihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImRwIiwgZmlyc3RQcmltZUluZm8uZmFjdG9yQ1JURXhw
b25lbnQpKSB7Ci0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzOjpjcmVhdGVQcml2YXRlKG1vZHVs
dXMsIGV4cG9uZW50LCBwcml2YXRlRXhwb25lbnQpOwogICAgIH0KIAogICAgIGlmICghZ2V0Qmln
SW50ZWdlclZlY3RvckZyb21KU09OKG1fZXhlYywgbV9qc29uLmdldCgpLCAicSIsIHNlY29uZFBy
aW1lSW5mby5wcmltZUZhY3RvcikpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0
ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAg
ICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBtX2pzb24uZ2V0KCks
ICJkcSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRFeHBvbmVudCkpIHsKLSAgICAgICAgaWYg
KG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChzY29wZS5leGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0
YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9kdWx1cywgZXhwb25lbnQsIHByaXZhdGVF
eHBvbmVudCk7CiAgICAgfQogCiAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04o
bV9leGVjLCBtX2pzb24uZ2V0KCksICJxaSIsIHNlY29uZFByaW1lSW5mby5mYWN0b3JDUlRDb2Vm
ZmljaWVudCkpIHsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
ICAgICByZXR1cm4gQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHM6OmNyZWF0ZVByaXZhdGUobW9k
dWx1cywgZXhwb25lbnQsIHByaXZhdGVFeHBvbmVudCk7CiAgICAgfQogCiAgICAgSlNBcnJheSog
b3RoZXJQcmltZUluZm9KU0FycmF5OwogICAgIGlmICghZ2V0SlNBcnJheUZyb21KU09OKG1fZXhl
YywgbV9qc29uLmdldCgpLCAib3RoIiwgb3RoZXJQcmltZUluZm9KU0FycmF5KSkgewotICAgICAg
ICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKHNjb3BlLmV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50czo6Y3JlYXRlUHJpdmF0ZVdpdGhBZGRpdGlvbmFsRGF0YShtb2R1
bHVzLCBleHBvbmVudCwgcHJpdmF0ZUV4cG9uZW50LCBmaXJzdFByaW1lSW5mbywgc2Vjb25kUHJp
bWVJbmZvLCBvdGhlclByaW1lSW5mb3MpOwogICAgIH0KQEAgLTQ4NSwyNCArNDg1LDI0IEBAIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9LZXlEYXRhPiBKU0NyeXB0b0sKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG90aGVyUHJpbWVJbmZvSlNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAg
ICBDcnlwdG9LZXlEYXRhUlNBQ29tcG9uZW50czo6UHJpbWVJbmZvIGluZm87CiAgICAgICAgIEpT
VmFsdWUgZWxlbWVudCA9IG90aGVyUHJpbWVJbmZvSlNBcnJheS0+Z2V0SW5kZXgobV9leGVjLCBp
KTsKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgaWYgKCFlbGVtZW50LmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSldLIFwib3RoXCIgYXJyYXkgbWVtYmVy
IGlzIG5vdCBhbiBvYmplY3QiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMsIGFz
T2JqZWN0KGVsZW1lbnQpLCAiciIsIGluZm8ucHJpbWVGYWN0b3IpKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoIXNjb3BlLmV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBwcmltZSBmYWN0b3IgZm9yIGEgcHJpbWUgaW4gXCJvdGhc
IiBkaWN0aW9uYXJ5IikpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCFnZXRCaWdJbnRlZ2VyVmVjdG9yRnJvbUpTT04obV9leGVjLCBhc09iamVj
dChlbGVtZW50KSwgImQiLCBpbmZvLmZhY3RvckNSVEV4cG9uZW50KSkgewotICAgICAgICAgICAg
aWYgKCFtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCFzY29wZS5leGNl
cHRpb24oKSkKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBnZXQgZmFjdG9yIENSVCBleHBvbmVudCBmb3IgYSBwcmltZSBp
biBcIm90aFwiIGRpY3Rpb25hcnkiKSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgfQogICAgICAgICBpZiAoIWdldEJpZ0ludGVnZXJWZWN0b3JGcm9tSlNPTihtX2V4ZWMs
IGFzT2JqZWN0KGVsZW1lbnQpLCAidCIsIGluZm8uZmFjdG9yQ1JUQ29lZmZpY2llbnQpKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAo
IXNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGdldCBmYWN0b3IgQ1JUIGNvZWZmaWNpZW50
IGZvciBhIHByaW1lIGluIFwib3RoXCIgZGljdGlvbmFyeSIpKTsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9CkBAIC01MTksNyArNTE5LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PENyeXB0b0tleURhdGE+IEpTQ3J5cHRvSwogCiAgICAgU3RyaW5nIGp3a0tleVR5cGU7CiAgICAg
aWYgKCFnZXRTdHJpbmdGcm9tSlNPTihtX2V4ZWMsIG1fanNvbi5nZXQoKSwgImt0eSIsIGp3a0tl
eVR5cGUpKSB7Ci0gICAgICAgIGlmICghbV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
aWYgKCFzY29wZS5leGNlcHRpb24oKSkKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiUmVxdWlyZWQgSldLIFwia3R5XCIgbWVtYmVyIGlzIG1p
c3NpbmciKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTU0OSw2ICs1NDks
OSBAQCBzdGF0aWMgdm9pZCBidWlsZEpTT05Gb3JPY3RldFNlcXVlbmNlKEV4CiAKIHN0YXRpYyB2
b2lkIGJ1aWxkSlNPTkZvclJTQUNvbXBvbmVudHMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IENyeXB0b0tleURhdGFSU0FDb21wb25lbnRzJiBkYXRhLCBKU0M6OkpTT2JqZWN0KiByZXN1bHQp
CiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKICAgICBhZGRUb0pTT04oZXhlYywgcmVzdWx0LCAia3R5IiwgIlJT
QSIpOwogICAgIGFkZFRvSlNPTihleGVjLCByZXN1bHQsICJuIiwgYmFzZTY0VVJMRW5jb2RlKGRh
dGEubW9kdWx1cygpKSk7CiAgICAgYWRkVG9KU09OKGV4ZWMsIHJlc3VsdCwgImUiLCBiYXNlNjRV
UkxFbmNvZGUoZGF0YS5leHBvbmVudCgpKSk7CkBAIC01NzAsOSArNTczLDggQEAgc3RhdGljIHZv
aWQgYnVpbGRKU09ORm9yUlNBQ29tcG9uZW50cyhKUwogICAgIGlmIChkYXRhLm90aGVyUHJpbWVJ
bmZvcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBKU0FycmF5KiBvdGggPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXplKCkp
OwotICAgIGlmIChVTkxJS0VMWSh2bS5leGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
LCBzaXplID0gZGF0YS5vdGhlclByaW1lSW5mb3MoKS5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsK
ICAgICAgICAgSlNPYmplY3QqIGpzUHJpbWVJbmZvID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhl
Yyk7CkBAIC02OTgsOCArNzAwLDkgQEAgc3RhdGljIHZvaWQgYWRkSldLQWxnb3JpdGhtVG9KU09O
KEV4ZWNTdAogc3RhdGljIHZvaWQgYWRkVXNhZ2VzVG9KU09OKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGpzb24sIENyeXB0b0tleVVzYWdlIHVzYWdlcykKIHsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0FycmF5KiBrZXlPcHMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIDAsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CkBAIC03MzgsMTMgKzc0MSwxMyBAQCBTdHJpbmcgSlND
cnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpCiAgICAgSlNPYmplY3QqIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwogCiAgICAgYWRkSldLQWxnb3JpdGhtVG9KU09OKGV4
ZWMsIHJlc3VsdCwga2V5KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
CiAgICAgYWRkQm9vbFRvSlNPTihleGVjLCByZXN1bHQsICJleHQiLCBrZXkuZXh0cmFjdGFibGUo
KSk7CiAKICAgICBhZGRVc2FnZXNUb0pTT04oZXhlYywgcmVzdWx0LCBrZXkudXNhZ2VzQml0bWFw
KCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBpZiAoaXM8
Q3J5cHRvS2V5RGF0YU9jdGV0U2VxdWVuY2U+KCprZXlEYXRhKSkKQEAgLTc1NSw3ICs3NTgsNyBA
QCBTdHJpbmcgSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLOjpzZXJpCiAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIktleSBkb2Vzbid0IHN1cHBvcnQg
ZXhwb3J0S2V5IikpOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICByZXR1cm4gSlNPTlN0cmluZ2lmeShl
eGVjLCByZXN1bHQsIDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBAIFJlZlB0cjxFbGVtZW50PiBKU0N1c3Rv
bUVsZW1lbnRJbnRlcmZhY2UKIAogICAgIFZNJiB2bSA9IG1faXNvbGF0ZWRXb3JsZC0+dm0oKTsK
ICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogCiAgICAgaWYgKCFtX2NvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTc5LDExICs4MCwxMSBAQCBSZWZQdHI8RWxlbWVudD4gSlNDdXN0b21FbGVt
ZW50SW50ZXJmYWNlCiAKICAgICBhdXRvJiBzdGF0ZSA9ICpjb250ZXh0LT5leGVjU3RhdGUoKTsK
ICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5j
aHJvbm91c2x5KGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCksIHZtLCBzdGF0ZSwgbV9jb25z
dHJ1Y3Rvci5nZXQoKSwgbG9jYWxOYW1lKTsKKyAgICBBU1NFUlQoISFzY29wZS5leGNlcHRpb24o
KSA9PSAhZWxlbWVudCk7CiAgICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgIGF1dG8qIGV4Y2Vw
dGlvbiA9IHZtLmV4Y2VwdGlvbigpOwotICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAg
ICAgaWYgKHNob3VsZENsZWFyRXhjZXB0aW9uID09IFNob3VsZENsZWFyRXhjZXB0aW9uOjpDbGVh
cikgewotICAgICAgICAgICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGF1
dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJlcG9ydEV4Y2VwdGlvbigmc3RhdGUsIGV4Y2Vw
dGlvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMTAsNyArMTEx
LDcgQEAgc3RhdGljIFJlZlB0cjxFbGVtZW50PiBjb25zdHJ1Y3RDdXN0b21FbAogICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBKU01haW5UaHJlYWRFeGVjU3RhdGU6
Omluc3RydW1lbnRGdW5jdGlvbkNvbnN0cnVjdCgmZG9jdW1lbnQsIGNvbnN0cnVjdFR5cGUsIGNv
bnN0cnVjdERhdGEpOwogICAgIEpTVmFsdWUgbmV3RWxlbWVudCA9IGNvbnN0cnVjdCgmc3RhdGUs
IGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsKICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb29raWUsICZkb2N1bWVu
dCk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgQVNTRVJUKCFuZXdFbGVt
ZW50LmlzRW1wdHkoKSk7CkBAIC0xNjYsNyArMTY3LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJ
bnRlcmZhY2U6OnVwZ3JhZGVFbAogICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOwog
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0
KGNvbnRleHQsICptX2lzb2xhdGVkV29ybGQpOwogICAgIEV4ZWNTdGF0ZSogc3RhdGUgPSBnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsKQEAgLTE4NSw3ICsxODYsNyBAQCB2b2lk
IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6dXBncmFkZUVsCiAKICAgICBtX2NvbnN0cnVjdGlv
blN0YWNrLnJlbW92ZUxhc3QoKTsKIAotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGVsZW1lbnQu
c2V0SXNGYWlsZWRDdXN0b21FbGVtZW50KCp0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgSlNPYmplY3QqIGdldEN1c3Rv
bUVsZW1lbnRDYWxsYmFjCiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCiAgICAgSlNWYWx1ZSBjYWxsYmFjayA9IHByb3RvdHlwZS5nZXQoJnN0YXRlLCBpZCk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmIChjYWxsYmFjay5pc1Vu
ZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg4LDcgKzg4LDcgQEAgSlNW
YWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKAogICAgICAgICByZXR1cm4gdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
JnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5nKCZzdGF0ZSkpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBK
U1ZhbHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKTsKQEAg
LTExOCw3ICsxMTgsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUo
CiAgICAgfQogCiAgICAgSlNWYWx1ZSBwcm90b3R5cGVWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQo
JnN0YXRlLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBpZiAoIXByb3RvdHlwZVZhbHVlLmlzT2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIG11c3QgYmUgYW4g
b2JqZWN0IikpOwpAQCAtMTI5LDI1ICsxMjksMjUgQEAgSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRS
ZWdpc3RyeTo6ZGVmaW5lKAogCiAgICAgaWYgKGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0
Q3VzdG9tRWxlbWVudENhbGxiYWNrKHN0YXRlLCBwcm90b3R5cGVPYmplY3QsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiY29ubmVjdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJ
bnRlcmZhY2UtPnNldENvbm5lY3RlZENhbGxiYWNrKGNvbm5lY3RlZENhbGxiYWNrKTsKLSAgICBp
ZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoYXV0byogZGlz
Y29ubmVjdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21FbGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3Rv
dHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkaXNjb25uZWN0ZWRDYWxs
YmFjayIpKSkKICAgICAgICAgZWxlbWVudEludGVyZmFjZS0+c2V0RGlzY29ubmVjdGVkQ2FsbGJh
Y2soZGlzY29ubmVjdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIGlmIChhdXRvKiBhZG9wdGVkQ2FsbGJhY2sgPSBnZXRDdXN0b21F
bGVtZW50Q2FsbGJhY2soc3RhdGUsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJhZG9wdGVkQ2FsbGJhY2siKSkpCiAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2Ut
PnNldEFkb3B0ZWRDYWxsYmFjayhhZG9wdGVkQ2FsbGJhY2spOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8qIGF0dHJpYnV0ZUNoYW5nZWRDYWxs
YmFjayA9IGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhzdGF0ZSwgcHJvdG90eXBlT2JqZWN0LCBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIpKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKGF0dHJp
YnV0ZUNoYW5nZWRDYWxsYmFjaykgewogICAgICAgICBhdXRvIHZhbHVlID0gY29udmVydE9wdGlv
bmFsPFZlY3RvcjxTdHJpbmc+PihzdGF0ZSwgY29uc3RydWN0b3ItPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAib2JzZXJ2ZWRBdHRyaWJ1dGVzIikpKTsKLSAgICAg
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAg
IGlmICh2YWx1ZSkKICAgICAgICAgICAgIGVsZW1lbnRJbnRlcmZhY2UtPnNldEF0dHJpYnV0ZUNo
YW5nZWRDYWxsYmFjayhhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2ssICp2YWx1ZSk7CkBAIC0xNzAs
NyArMTcwLDcgQEAgc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAogICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lKHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnRvQXRvbWljU3RyaW5n
KCZzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tRWxlbWVudE5hbWVBbmRUaHJvd0lmTmVl
ZGVkKHN0YXRlLCBsb2NhbE5hbWUpKQpAQCAtMTkxLDEzICsxOTEsMTUgQEAgc3RhdGljIEpTVmFs
dWUgd2hlbkRlZmluZWRQcm9taXNlKEV4ZWNTdAogCiBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJl
Z2lzdHJ5Ojp3aGVuRGVmaW5lZChFeGVjU3RhdGUmIHN0YXRlKQogeworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHN0YXRlLnZtKCkpOworCiAgICAgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIGF1dG8mIHByb21pc2VEZWZlcnJlZCA9ICpKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCk7CiAgICAgSlNWYWx1ZSBw
cm9taXNlID0gd2hlbkRlZmluZWRQcm9taXNlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHdyYXBwZWQo
KSk7CiAKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9u
SWZBbnkoc3RhdGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVycmVkKTsKLSAgICAgICAgQVNT
RVJUKCFzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgICAgICByZXR1cm4gcHJvbWlzZURlZmVycmVkLnByb21pc2UoKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAko
cmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDggKzExOSwxMSBAQCBTdHJpbmcgdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDCiAKIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIFN0cmlu
ZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKIApAQCAtMTg3LDEw
ICsxOTAsMTEgQEAgZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogCiB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uVmFs
dWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4
ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKICAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Nhc3Q8RXhj
ZXB0aW9uKj4oZXhjZXB0aW9uVmFsdWUpOwogICAgIGlmICghZXhjZXB0aW9uKSB7Ci0gICAgICAg
IGV4Y2VwdGlvbiA9IGV4ZWMtPmxhc3RFeGNlcHRpb24oKTsKKyAgICAgICAgZXhjZXB0aW9uID0g
dm0ubGFzdEV4Y2VwdGlvbigpOwogICAgICAgICBpZiAoIWV4Y2VwdGlvbikKICAgICAgICAgICAg
IGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVl
LCBFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKICAgICB9CkBAIC0yMDAsMTUgKzIwNCwx
OCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hl
ZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxz
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50
VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKGV4Y2VwdGlvbikpCiAgICAgICAgIHJldHVybjsKIAogICAgIEVycm9ySGFuZGxp
bmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwogCiAgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsK
LSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0
aW9uKCk7CiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBpZiAo
SlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Nhc3Q8SlNET01XaW5kb3cqPihnbG9iYWxP
YmplY3QpKSB7CkBAIC0yMzksOCArMjQ2LDggQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBFeAogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNl
cHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCiAg
ICAgICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcg
bmV3IGV4Y2VwdGlvbnMuCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CkBAIC0yNTYsOCArMjYzLDEwIEBAIHZvaWQgcmVw
b3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXgKIAogdm9pZCByZXBvcnRDdXJyZW50RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IGV4
ZWMtPmV4Y2VwdGlvbigpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisgICAgRXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwogfQogCkBAIC0zNDEsNyArMzUwLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBFeAogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFlYyB8fCBleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoIWVjIHx8IHNjb3BlLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47
CiAKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKSk7CkBAIC0zNTIsNyArMzYxLDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqIGV4ZQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCFlYy5jb2RlIHx8IGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmICghZWMuY29kZSB8fCBzY29wZS5leGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZURP
TUV4Y2VwdGlvbihleGVjLCBlYy5jb2RlLCBlYy5tZXNzYWdlKSk7CkBAIC0zNjIsMTUgKzM3MSwx
NyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlCiAKIGJvb2wgaGFz
SXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CiB7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
ICAgICBDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0
LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBz
aG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKQEAgLTUwOSw3ICs1MjAsNyBAQCBz
dGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgCiAgICAgfQogCiAgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKQEAgLTU1Niw3
ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmCiAgICAg
fQogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKQEAgLTY0MiwxMSArNjUzLDE0IEBAIHVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmEKIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZwogaW50MzJf
dCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQogICAgICAgICByZXR1cm4g
dmFsdWUuYXNJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwogfQpAQCAtNjcyLDI3
ICs2ODYsMzYgQEAgdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLAogLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCiB1aW50MzJfdCB0
b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCiAgICAgICAgIHJldHVybiB2
YWx1ZS5hc1VJbnQzMigpOwogCiAgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7CiB9CiAKIGludDY0X3QgdG9JbnQ2
NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7CiB9CiAKIHVpbnQ2
NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwogfQpAQCAtODU2LDIx
ICs4NzksMjEgQEAgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeAogCiB2
b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAg
IFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwogICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAm
bWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQogewotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwog
ICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3Rh
dGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2FnZVN0cmluZykpOwogfQogCiB2b2lkIHRocm93
U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBBU1NFUlQoIXN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9F
UlIsIG1lc3NhZ2UpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNyArNTUyLDcgQEAgaW5s
aW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OgogICAgIH0KIAogICAgIEpTQzo6
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOwotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
aWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTU2MSw3ICs1NjEsNyBA
QCBpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6CiAgICAgfQogCiAgICAg
bGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIGlmIChleGVjLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTYwNCw4ICs2MDQsMTEg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9y
KQogeworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAg
IGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTQzo6anNVbmRlZmluZWQoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKICAgICAgICAgYXJy
YXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0
b3JbaV0pKTsKQEAgLTYxNCw4ICs2MTcsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCiB7CisgICAgSlNDOjpWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCiAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
ZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmVjdG9yLnNpemUoKTsgKytpKQogICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwpAQCAtNjk5
LDE0ICs3MDUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IEpTQzo6SlNWYWx1
ZSBqc0Zyb3plbkFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiB7
CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikgewogICAgICAgICBsaXN0
LmFwcGVuZChKU1ZhbHVlVHJhaXRzPFQ+OjphcnJheUpTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICBhdXRvKiBhcnJheSA9IEpTQzo6
Y29uc3RydWN0QXJyYXkoZXhlYywgbnVsbHB0ciwgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICBp
ZiAoVU5MSUtFTFkoZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAgICAg
cmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgYXJyYXkpOwogfQpAQCAt
NzQ1LDMyICs3NTQsNDAgQEAgaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9GbG9h
dAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8U3RyaW5nPiB7CiAgICAgc3Rh
dGljIGlubGluZSBib29sIG5hdGl2ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpT
VmFsdWUganNWYWx1ZSwgU3RyaW5nJiBpbmRleGVkVmFsdWUpCiAgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgICAgICBpbmRleGVkVmFsdWUgPSBqc1ZhbHVlLnRvV1RGU3RyaW5nKCZl
eGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAgICByZXR1
cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3RydWN0IE5h
dGl2ZVZhbHVlVHJhaXRzPHVuc2lnbmVkPiB7CiAgICAgc3RhdGljIGlubGluZSBib29sIG5hdGl2
ZVZhbHVlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSwgdW5zaWdu
ZWQmIGluZGV4ZWRWYWx1ZSkKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAg
IGluZGV4ZWRWYWx1ZSA9IGpzVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgICAgICByZXR1cm4g
IWV4ZWMuaGFkRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiAhc2NvcGUuZXhjZXB0aW9uKCk7
CiAgICAgfQogfTsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgTmF0aXZlVmFsdWVUcmFpdHM8ZmxvYXQ+
IHsKICAgICBzdGF0aWMgaW5saW5lIGJvb2wgbmF0aXZlVmFsdWUoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlLCBmbG9hdCYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b0Zs
b2F0KCZleGVjKTsKLSAgICAgICAgcmV0dXJuICFleGVjLmhhZEV4Y2VwdGlvbigpOworICAgICAg
ICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogICAgIH0KIH07CiAKIHRlbXBsYXRlPD4gc3Ry
dWN0IE5hdGl2ZVZhbHVlVHJhaXRzPGRvdWJsZT4gewogICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBu
YXRpdmVWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIGpzVmFsdWUsIGRv
dWJsZSYgaW5kZXhlZFZhbHVlKQogICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAg
ICAgaW5kZXhlZFZhbHVlID0ganNWYWx1ZS50b051bWJlcigmZXhlYyk7Ci0gICAgICAgIHJldHVy
biAhZXhlYy5oYWRFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuICFzY29wZS5leGNlcHRpb24o
KTsKICAgICB9CiB9OwogCkBAIC04MDcsMTEgKzgyNCwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBWZWN0b3I8VD4gdG9OYXRpdmVBCiAgICAgfQogCiAgICAgVmVjdG9yPFQ+IHJlc3VsdDsKLSAg
ICBmb3JFYWNoSW5JdGVyYWJsZSgmZXhlYywgdmFsdWUsIFsmcmVzdWx0XShKU0M6OlZNJiwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgIGZvckVhY2hJ
bkl0ZXJhYmxlKCZleGVjLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgVCBjb252ZXJ0ZWRWYWx1ZTsKLSAg
ICAgICAgaWYgKCFOYXRpdmVWYWx1ZVRyYWl0czxUPjo6bmF0aXZlVmFsdWUoKnN0YXRlLCBqc1Zh
bHVlLCBjb252ZXJ0ZWRWYWx1ZSkpCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IE5hdGl2ZVZhbHVl
VHJhaXRzPFQ+OjpuYXRpdmVWYWx1ZSgqc3RhdGUsIGpzVmFsdWUsIGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vz
cyk7CisgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
QVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKICAgICB9KTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMSArNzUsMTMgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYWtlVGhpc1R5cAogewogICAgIEFTU0VSVChleGVjU3RhdGUpOwogICAg
IEFTU0VSVChleGVjU3RhdGUtPmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKKyAgICBWTSYgdm0gPSBl
eGVjU3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCiAgICAgYXV0byBpbnRlcmZhY2VOYW1lID0gZXhlY1N0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5nZXRTdHJpbmcoZXhlY1N0YXRlKTsKLSAgICBBU1NFUlQoIWV4ZWNTdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7
CiAgICAgYXV0byBmdW5jdGlvbk5hbWUgPSBleGVjU3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LmdldFN0cmluZyhleGVjU3RhdGUpOwotICAgIEFTU0VSVCghZXhlY1N0YXRlLT5oYWRFeGNlcHRp
b24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjcmVhdGVUeXBlRXJyb3IoZXhlY1N0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1l
c3NhZ2UoaW50ZXJmYWNlTmFtZS51dGY4KCkuZGF0YSgpLCBmdW5jdGlvbk5hbWUudXRmOCgpLmRh
dGEoKSkpKTsKIH0KIApAQCAtODcsMTEgKzg5LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFrZUdldHRlclQKIHsKICAgICBBU1NFUlQoZXhlY1N0YXRlKTsKICAgICBBU1NFUlQo
ZXhlY1N0YXRlLT5hcmd1bWVudENvdW50KCkgPT0gMik7CisgICAgVk0mIHZtID0gZXhlY1N0YXRl
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAg
IGF1dG8gaW50ZXJmYWNlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkuZ2V0
U3RyaW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIGF1
dG8gYXR0cmlidXRlTmFtZSA9IGV4ZWNTdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkuZ2V0U3Ry
aW5nKGV4ZWNTdGF0ZSk7Ci0gICAgQVNTRVJUKCFleGVjU3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNyZWF0ZVR5cGVFcnJvcihleGVjU3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdl
KGludGVyZmFjZU5hbWUudXRmOCgpLmRhdGEoKSwgYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgp
KSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdFRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IFJlZjxKU0dsb2JhbE9iamVjdENhbGxiYWNrPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICBWTSYg
dm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0p
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIApAQCAt
NjQsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6
OnJ1blRhc2soZXhlYywgbV90YXNrKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV90YXNr
LT5ydW4oZXhlYyk7Ci0gICAgICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIH0KIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9y
LmgJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgaXRlcmF0b3JGb3JFYWNoKEpTQzoKICAgICAgICAgYXBwZW5kRm9yRWFjaEFyZ3Vt
ZW50cyhzdGF0ZSwgd3JhcHBlci0+Z2xvYmFsT2JqZWN0KCksIGFyZ3VtZW50cywgdmFsdWUpOwog
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHdyYXBwZXIpOwogICAgICAgICBKU0M6OmNhbGwoJnN0
YXRlLCBjYWxsYmFjaywgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3VtZW50cyk7
Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkocmV2aXNpb24gMjA1NTY2
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDExICsxMDAsMTQgQEAgdm9pZCBEZWZlcnJlZFdyYXBwZXI6OnJlamVj
dChFeGNlcHRpb25DbwogCiB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU1By
b21pc2VEZWZlcnJlZCYgcHJvbWlzZURlZmVycmVkKQogewotICAgIGlmICghc3RhdGUuaGFkRXhj
ZXB0aW9uKCkpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKU1ZhbHVlIGVycm9yID0gc3RhdGUuZXhjZXB0aW9uKCktPnZh
bHVlKCk7Ci0gICAgc3RhdGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU1ZhbHVlIGVycm9yID0g
c2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
IAogICAgIERlZmVycmVkV3JhcHBlcjo6Y3JlYXRlKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgJnBy
b21pc2VEZWZlcnJlZCktPnJlamVjdChlcnJvcik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2UuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OCwx
MiArMTU4LDE1IEBAIHZvaWQgcmVqZWN0UHJvbWlzZVdpdGhFeGNlcHRpb25JZkFueShKU0MKIAog
aW5saW5lIEpTQzo6SlNWYWx1ZSBjYWxsUHJvbWlzZUZ1bmN0aW9uKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBwcm9taXNlRnVuY3Rpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTUHJvbWlzZURlZmVycmVkKikpCiB7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QgPSAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogICAgIEpTQzo6SlNQcm9taXNl
RGVmZXJyZWQmIHByb21pc2VEZWZlcnJlZCA9ICpKU0M6OkpTUHJvbWlzZURlZmVycmVkOjpjcmVh
dGUoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0KTsKICAgICBwcm9taXNlRnVuY3Rpb24oJnN0YXRlLCAm
cHJvbWlzZURlZmVycmVkKTsKIAogICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnko
c3RhdGUsIGdsb2JhbE9iamVjdCwgcHJvbWlzZURlZmVycmVkKTsKLSAgICBBU1NFUlQoIXN0YXRl
LmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0
aW9uKCkpOwogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQucHJvbWlzZSgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVN0cmluZ01hcEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TdHJpbmdNYXBDdXN0
b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVN0cmluZ01hcEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDExICs3NSwxNCBA
QCBib29sIEpTRE9NU3RyaW5nTWFwOjpkZWxldGVQcm9wZXJ0eUJ5SW5kCiAKIGJvb2wgSlNET01T
dHJpbmdNYXA6OnB1dERlbGVnYXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0
KQogeworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgc3RyaW5nVmFsdWUgPSB2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTcsMTMgKzE5NywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYWxsKCkKICAgICB7
CiAgICAgICAgIFJlZjxKU0RPTVdpbmRvd01pY3JvdGFza0NhbGxiYWNrPiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2sobV9nbG9iYWxPYmplY3QtPnZtKCkp
OworICAgICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKTsKIAogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGU6OnJ1blRhc2soZXhlYywg
bV90YXNrKTsKIAotICAgICAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsKICAgICB9CiAKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5k
b3dDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjks
OSBAQCBib29sIEpTRE9NV2luZG93OjpwcmV2ZW50RXh0ZW5zaW9ucyhKU09iCiAKIHZvaWQgSlNE
T01XaW5kb3c6OnNldExvY2F0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgLy8gVG8g
YXZvaWQgYnJlYWtpbmcgb2xkIHdpZGdldHMsIG1ha2UgInZhciBsb2NhdGlvbiA9IiBpbiBhIHRv
cC1sZXZlbCBmcmFtZSBjcmVhdGUKICAgICAvLyBhIHByb3BlcnR5IG5hbWVkICJsb2NhdGlvbiIg
aW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmF2aWdhdGlvbiAoPHJkYXI6Ly9wcm9ibGVtLzU2ODgw
Mzk+KS4KQEAgLTM4Miw3ICszODUsNyBAQCB2b2lkIEpTRE9NV2luZG93OjpzZXRMb2NhdGlvbihF
eGVjU3RhdGUmCiAjZW5kaWYKIAogICAgIFN0cmluZyBsb2NhdGlvblN0cmluZyA9IHZhbHVlLnRv
U3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChMb2NhdGlvbiogbG9jYXRpb24gPSB3cmFwcGVkKCkubG9jYXRpb24oKSkK
QEAgLTQwNiwxNSArNDA5LDE4IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0
ZSYgc3QKIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3BlbihFeGVjU3RhdGUmIHN0YXRlKQogewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRo
VW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEpTVmFsdWUgdGFyZ2V0VmFs
dWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKICAgICBBdG9taWNTdHJpbmcgdGFyZ2V0ID0gdGFyZ2V0
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSA/IEF0b21pY1N0cmluZygiX2JsYW5rIiwgQXRvbWlj
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgOiB0YXJnZXRWYWx1ZS50b1N0cmluZygmc3Rh
dGUpLT50b0F0b21pY1N0cmluZygmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgd2luZG93RmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRv
U3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikp
OwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0
cjxET01XaW5kb3c+IG9wZW5lZFdpbmRvdyA9IHdyYXBwZWQoKS5vcGVuKHVybFN0cmluZywgdGFy
Z2V0LCB3aW5kb3dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KCZzdGF0ZSksIGZpcnN0
RE9NV2luZG93KCZzdGF0ZSkpOwpAQCAtNDcwLDEwICs0NzYsMTAgQEAgSlNWYWx1ZSBKU0RPTVdp
bmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxD
aGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgU3RyaW5nIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0YXRlLmFyZ3VtZW50
KDIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBE
aWFsb2dIYW5kbGVyIGhhbmRsZXIoc3RhdGUpOwpAQCAtNTExLDE2ICs1MTcsMTYgQEAgc3RhdGlj
IEpTVmFsdWUgaGFuZGxlUG9zdE1lc3NhZ2UoRE9NV2luZAogICAgICAgICB9CiAgICAgICAgIGZp
bGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCh0cmFuc2ZlcmFibGVzQXJn
SW5kZXgpLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycyk7CiAgICAgfQotICAgIGlmIChzdGF0
ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MCksICZtZXNzYWdlUG9ydHMsICZhcnJheUJ1ZmZlcnMpOwogCi0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3RyaW5nIHRhcmdldE9yaWdpbiA9IHZhbHVl
VG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCh0YXJnZXRPcmlnaW5BcmdJbmRleCkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTQ1
LDcgKzU1MSw3IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnNldFRpbWVvdXQoRXhlY1N0YXQKIAog
ICAgIENvbnRlbnRTZWN1cml0eVBvbGljeSogY29udGVudFNlY3VyaXR5UG9saWN5ID0gd3JhcHBl
ZCgpLmRvY3VtZW50KCkgPyB3cmFwcGVkKCkuZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9s
aWN5KCkgOiBudWxscHRyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFj
dGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndv
cmxkKCksIGNvbnRlbnRTZWN1cml0eVBvbGljeSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgaWYgKCFhY3Rpb24pCkBAIC01NzAsNyArNTc2LDcgQEAg
SlNWYWx1ZSBKU0RPTVdpbmRvdzo6c2V0SW50ZXJ2YWwoRXhlY1N0YQogCiAgICAgQ29udGVudFNl
Y3VyaXR5UG9saWN5KiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSB3cmFwcGVkKCkuZG9jdW1lbnQo
KSA/IHdyYXBwZWQoKS5kb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKSA6IG51bGxw
dHI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2NoZWR1
bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgY29udGVu
dFNlY3VyaXR5UG9saWN5KTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgaW50IGRlbGF5ID0gc3RhdGUuYXJndW1lbnQoMSkudG9JbnQzMigmc3RhdGUpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFDdWVDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YUN1ZUN1c3RvbS5j
cHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YUN1ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCwxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoJmV4ZWMsIHNjb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmZXhlYykp
OwogCiAgICAgZG91YmxlIHN0YXJ0VGltZShleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvTnVt
YmVyKCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMuaGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBkb3VibGUgZW5kVGltZShleGVjLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvTnVtYmVyKCZleGVjKSk7Ci0gICAgaWYgKFVOTElLRUxZKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVkVGhpcy0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwpAQCAtODcsNyArODcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTCiAgICAgaWYgKHZhbHVlQXJndW1lbnQuaXNDZWxsKCkgJiYgdmFsdWVBcmd1
bWVudC5hc0NlbGwoKS0+aW5oZXJpdHMoc3RkOjpyZW1vdmVfcG9pbnRlcjxKU0FycmF5QnVmZmVy
Kj46OnR5cGU6OmluZm8oKSkpIHsKIAogICAgICAgICBBcnJheUJ1ZmZlciogZGF0YSA9IHRvQXJy
YXlCdWZmZXIodmFsdWVBcmd1bWVudCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShleGVjLmhhZEV4
Y2VwdGlvbigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAg
ICAgaWYgKFVOTElLRUxZKCFkYXRhKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGV2aWNlTW90aW9uRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywzMiArNDcsMzUgQEAgc3RhdGljIFJl
ZlB0cjxEZXZpY2VNb3Rpb25EYXRhOjpBY2NlbGVyYQogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
Ly8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0
LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdCgmc3RhdGUpOwotICAgIEFT
U0VSVCghc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCiAgICAgSlNWYWx1ZSB4VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAieCIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlWCA9ICF4VmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKTsKICAgICBkb3VibGUgeCA9IHhWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEpTVmFsdWUgeVZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInkiKSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJvb2wgY2FuUHJvdmlkZVkgPSAh
eVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIHkgPSB5VmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBK
U1ZhbHVlIHpWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmc3RhdGUsICJ6IikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBib29sIGNhblByb3ZpZGVaID0gIXpWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRv
dWJsZSB6ID0gelZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgaWYgKCFjYW5Qcm92aWRlWCAmJiAhY2FuUHJvdmlkZVkgJiYg
IWNhblByb3ZpZGVaKQpAQCAtODYsMzIgKzg5LDM1IEBAIHN0YXRpYyBSZWZQdHI8RGV2aWNlTW90
aW9uRGF0YTo6Um90YXRpb24KICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEdpdmVuIHRoZSBh
Ym92ZSB0ZXN0LCB0aGlzIHdpbGwgYWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICBKU09iamVj
dCogb2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJnN0YXRlKTsKLSAgICBBU1NFUlQoIXN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAogICAgIEpT
VmFsdWUgYWxwaGFWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJhbHBoYSIpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgYm9vbCBjYW5Qcm92aWRlQWxwaGEgPSAhYWxwaGFWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpOwogICAgIGRvdWJsZSBhbHBoYSA9IGFscGhhVmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBKU1ZhbHVlIGJldGFW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUs
ICJiZXRhIikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29s
IGNhblByb3ZpZGVCZXRhID0gIWJldGFWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOwogICAgIGRv
dWJsZSBiZXRhID0gYmV0YVZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgSlNWYWx1ZSBnYW1tYVZhbHVlID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImdhbW1hIikpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBib29sIGNhblByb3ZpZGVHYW1t
YSA9ICFnYW1tYVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCk7CiAgICAgZG91YmxlIGdhbW1hID0g
Z2FtbWFWYWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGlmICghY2FuUHJvdmlkZUFscGhhICYmICFjYW5Qcm92aWRlQmV0YSAm
JiAhY2FuUHJvdmlkZUdhbW1hKQpAQCAtMTcyLDYgKzE3OCw5IEBAIEpTVmFsdWUgSlNEZXZpY2VN
b3Rpb25FdmVudDo6aW50ZXJ2YWwoRXgKIAogSlNWYWx1ZSBKU0RldmljZU1vdGlvbkV2ZW50Ojpp
bml0RGV2aWNlTW90aW9uRXZlbnQoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGNvbnN0IFN0cmluZyB0eXBlID0gc3RhdGUuYXJndW1lbnQoMCkudG9TdHJpbmcoJnN0YXRl
KS0+dmFsdWUoJnN0YXRlKTsKICAgICBib29sIGJ1YmJsZXMgPSBzdGF0ZS5hcmd1bWVudCgxKS50
b0Jvb2xlYW4oJnN0YXRlKTsKICAgICBib29sIGNhbmNlbGFibGUgPSBzdGF0ZS5hcmd1bWVudCgy
KS50b0Jvb2xlYW4oJnN0YXRlKTsKQEAgLTE3OSwxNSArMTg4LDE1IEBAIEpTVmFsdWUgSlNEZXZp
Y2VNb3Rpb25FdmVudDo6aW5pdERldmljZU0KICAgICAvLyBJZiBhbnkgb2YgdGhlIHBhcmFtZXRl
cnMgYXJlIG51bGwgb3IgdW5kZWZpbmVkLCBtYXJrIHRoZW0gYXMgbm90IHByb3ZpZGVkLgogICAg
IC8vIE90aGVyd2lzZSwgdXNlIHRoZSBzdGFuZGFyZCBKYXZhU2NyaXB0IGNvbnZlcnNpb24uCiAg
ICAgUmVmUHRyPERldmljZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uID0g
cmVhZEFjY2VsZXJhdGlvbkFyZ3VtZW50KHN0YXRlLmFyZ3VtZW50KDMpLCBzdGF0ZSk7Ci0gICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgUmVmUHRyPERldmlj
ZU1vdGlvbkRhdGE6OkFjY2VsZXJhdGlvbj4gYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eSA9
IHJlYWRBY2NlbGVyYXRpb25Bcmd1bWVudChzdGF0ZS5hcmd1bWVudCg0KSwgc3RhdGUpOwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFJlZlB0cjxEZXZp
Y2VNb3Rpb25EYXRhOjpSb3RhdGlvblJhdGU+IHJvdGF0aW9uUmF0ZSA9IHJlYWRSb3RhdGlvblJh
dGVBcmd1bWVudChzdGF0ZS5hcmd1bWVudCg1KSwgc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGJvb2wgaW50ZXJ2YWxQcm92aWRlZCA9ICFz
dGF0ZS5hcmd1bWVudCg2KS5pc1VuZGVmaW5lZE9yTnVsbCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw2ICs3OCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNEaWN0aW9uYXJ5OjpH
ZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5KGNvbnN0IGNoYXIq
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSYgZmluYWxSZXN1bHQpIGNvbnN0CiB7CisgICAgVk0mIHZt
ID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKG1fZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBib29sIHBy
b3BlcnR5Rm91bmQgPSBtX2luaXRpYWxpemVyT2JqZWN0LmdldCgpLT5nZXRQcm9wZXJ0eVNsb3Qo
bV9leGVjLCBpZGVudGlmaWVyLCBbJl0gKGJvb2wgcHJvcGVydHlGb3VuZCwgUHJvcGVydHlTbG90
JiBzbG90KSAtPiBib29sIHsKQEAgLTg2LDcgKzg4LDcgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9w
ZXJ0eVJlc3VsdCBKU0RpY3RpbwogICAgICAgICBmaW5hbFJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUo
bV9leGVjLCBpZGVudGlmaWVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAg
aWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblRocm93bjsKICAgICByZXR1cm4gcHJv
cGVydHlGb3VuZCA/IFByb3BlcnR5Rm91bmQgOiBOb1Byb3BlcnR5Rm91bmQ7CiB9CkBAIC0xNTEs
MTcgKzE1MywyMCBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0CiB2
b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSwgVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0g
dG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgewog
ICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
aXRlbVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAgfQpAQCAtMjIxLDYg
KzIyNiw5IEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXQKIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoZXhlYyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKICAgICByZXN1bHQuY2xlYXIoKTsKIAogICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQpAQCAtMjI4LDEyICsyMzYsMTIgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNv
bnZlcnRWYWx1ZShFeGVjU3RhdAogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKCpleGVjLCB2YWx1ZSwgbGVuZ3RoKTsKLSAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IHJlc3VsdC5hZGQoaXRlbVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7CiAgICAg
fQpAQCAtMjk3LDE3ICszMDUsMjAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShK
U0M6OkV4ZQogdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiYgcmVzdWx0KQogewog
ICAgIEFTU0VSVChleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0b0pTU2VxdWVuY2UoKmV4ZWMsIHZhbHVlLCBsZW5ndGgp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
IDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTVmFsdWUgaXRlbVZhbHVlID0gb2JqZWN0
LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICBhdXRvIHN0cmVhbSA9IEpTTWVkaWFTdHJlYW06OnRvV3JhcHBlZChpdGVtVmFs
dWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgJKHJl
dmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDkgQEAgaW5saW5lIGJvb2wgSlNEaWN0
aW9uYXJ5OjpnZXQoY29uc3QgY2hhcgogdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFJl
c3VsdD4KIEpTRGljdGlvbmFyeTo6R2V0UHJvcGVydHlSZXN1bHQgSlNEaWN0aW9uYXJ5Ojp0cnlH
ZXRQcm9wZXJ0eUFuZFJlc3VsdChjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFQqIGNvbnRleHQs
IHZvaWQgKCpzZXR0ZXIpKFQqIGNvbnRleHQsIGNvbnN0IFJlc3VsdCYpKSBjb25zdAogeworICAg
IEpTQzo6Vk0mIHZtID0gbV9leGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIEpTQzo6SlNWYWx1ZSB2YWx1ZTsKICAgICBHZXRQcm9wZXJ0
eVJlc3VsdCBnZXRQcm9wZXJ0eVJlc3VsdCA9IHRyeUdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwg
dmFsdWUpOwogICAgIHN3aXRjaCAoZ2V0UHJvcGVydHlSZXN1bHQpIHsKQEAgLTIxMiw3ICsyMTUs
NyBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvCiAgICAgICAgIFJl
c3VsdCByZXN1bHQ7CiAgICAgICAgIGNvbnZlcnRWYWx1ZShtX2V4ZWMsIHZhbHVlLCByZXN1bHQp
OwogCi0gICAgICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvblRo
cm93bjsKIAogICAgICAgICBzZXR0ZXIoY29udGV4dCwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDE2ICsxNTMsMTYgQEAgSlNWYWx1ZSBKU0RvY3VtZW50
OjpnZXRDU1NDYW52YXNDb250ZXh0KAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS5hcmd1bWVudENv
dW50KCkgPCA0KSkKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogICAgIGF1dG8gY29udGV4
dElkID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGF1
dG8gbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBhdXRvIHdpZHRoID0gY29udmVydDxpbnQzMl90PihzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMiksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgYXV0byBoZWlnaHQgPSBjb252ZXJ0PGludDMy
X3Q+KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgzKSwgTm9ybWFsQ29udmVyc2lvbik7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAog
ICAgIGF1dG8qIGNvbnRleHQgPSB3cmFwcGVkKCkuZ2V0Q1NTQ2FudmFzQ29udGV4dChXVEZNb3Zl
KGNvbnRleHRJZCksIFdURk1vdmUobmFtZSksIFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdo
dCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVu
ZXIuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSwxMiBAQCB2b2lk
IEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgaWYgKCFzY3JpcHRFeGVj
dXRpb25Db250ZXh0IHx8IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzSlNFeGVjdXRpb25Gb3Ji
aWRkZW4oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+dm0oKSk7CisgICAgVk0mIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIC8vIFNlZSBodHRwczovL2RvbS5zcGVjLndo
YXR3Zy5vcmcvI2Rpc3BhdGNoaW5nLWV2ZW50cyBzcGVjIG9uIGNhbGxpbmcgaGFuZGxlRXZlbnQu
CisgICAgLy8gIklmIHRoaXMgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgcmVwb3J0IHRoZSBleGNlcHRp
b24uIiBJdCBzaG91bGQgbm90IHByb3BhZ2F0ZSB0aGUKKyAgICAvLyBleGNlcHRpb24uCiAKICAg
ICBKU09iamVjdCoganNGdW5jdGlvbiA9IHRoaXMtPmpzRnVuY3Rpb24oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CiAgICAgaWYgKCFqc0Z1bmN0aW9uKQpAQCAtMTA5LDYgKzExNCwxNCBAQCB2b2lk
IEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgLy8gSWYganNGdW5jdGlv
biBpcyBub3QgYWN0dWFsbHkgYSBmdW5jdGlvbiwgc2VlIGlmIGl0IGltcGxlbWVudHMgdGhlIEV2
ZW50TGlzdGVuZXIgaW50ZXJmYWNlIGFuZCB1c2UgdGhhdAogICAgIGlmIChjYWxsVHlwZSA9PSBD
YWxsVHlwZTo6Tm9uZSkgewogICAgICAgICBoYW5kbGVFdmVudEZ1bmN0aW9uID0ganNGdW5jdGlv
bi0+Z2V0KGV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImhhbmRsZUV2ZW50Iikp
OworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAg
ICBFeGNlcHRpb24qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKworICAgICAgICAgICAgZXZlbnQtPnRhcmdldCgpLT51
bmNhdWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICByZXBvcnRFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgICAgICBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGhhbmRsZUV2ZW50RnVuY3Rpb24sIGNhbGxE
YXRhKTsKICAgICB9CiAKQEAgLTEyMSw3ICsxMzQsNiBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgIEV2ZW50KiBzYXZlZEV2ZW50ID0gZ2xvYmFsT2Jq
ZWN0LT5jdXJyZW50RXZlbnQoKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRDdXJyZW50RXZl
bnQoZXZlbnQpOwogCi0gICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAg
ICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHZtLmVudHJ5U2NvcGUgPyB2bS5lbnRyeVNj
b3BlLT5nbG9iYWxPYmplY3QoKSA6IGdsb2JhbE9iamVjdCk7CiAKICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6aW5z
dHJ1bWVudEZ1bmN0aW9uQ2FsbChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsVHlwZSwgY2Fs
bERhdGEpOwpAQCAtMTM4LDcgKzE1MCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudChTY3JpcHQKIAogICAgICAgICBpZiAoaXM8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KSkgewogICAgICAgICAgICAgYXV0byBzY3JpcHRDb250cm9sbGVyID0g
ZG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zY3Jp
cHQoKTsKLSAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IChleGVj
LT5oYWRFeGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oZXhlYy0+
ZXhjZXB0aW9uKCkpKTsKKyAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlv
biA9IChzY29wZS5leGNlcHRpb24oKSAmJiBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24o
c2NvcGUuZXhjZXB0aW9uKCkpKTsKICAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhj
ZXB0aW9uIHx8IHNjcmlwdENvbnRyb2xsZXItPmlzVGVybWluYXRpbmdFeGVjdXRpb24oKSkKICAg
ICAgICAgICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5mb3JiaWRFeGVjdXRpb24oKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlQ3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVDdXN0b20uY3Bw
CShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlMKIAogICAgIHVuc2lnbmVkIGJsb2JQYXJ0c0xlbmd0
aCA9IDA7CiAgICAgSlNPYmplY3QqIGJsb2JQYXJ0cyA9IHRvSlNTZXF1ZW5jZShleGVjLCBhcmcs
IGJsb2JQYXJ0c0xlbmd0aCk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBBU1NFUlQoYmxvYlBhcnRzKTsKIApAQCAtNjksNyAr
NjksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTCiAgICAgICAg
IHJldHVybiB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCAxLCAiZmlsZW5hbWUi
LCAiRmlsZSIsIG51bGxwdHIsICJET01TdHJpbmciKTsKIAogICAgIFN0cmluZyBmaWxlbmFtZSA9
IGFyZy50b1dURlN0cmluZygmZXhlYykucmVwbGFjZSgnLycsICc6Jyk7Ci0gICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIFN0cmlu
ZyBub3JtYWxpemVkVHlwZTsKQEAgLTg3LDcgKzg3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCB0aGUgdHlwZSBw
cm9wZXJ0eS4KICAgICAgICAgU3RyaW5nIHR5cGU7CiAgICAgICAgIGRpY3Rpb25hcnkuZ2V0KCJ0
eXBlIiwgdHlwZSk7Ci0gICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICBub3JtYWxpemVkVHlwZSA9IEJs
b2I6Om5vcm1hbGl6ZWRDb250ZW50VHlwZSh0eXBlKTsKQEAgLTk1LDcgKzk1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAvLyBPbmx5IHRyeSB0
byBwYXJzZSB0aGUgbGFzdE1vZGlmaWVkIGRhdGUgaWYgdGhlcmUgd2FzIG5vdCBhbiBpbnZhbGlk
IHR5cGUgYXJndW1lbnQuCiAgICAgICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8fCAgIW5vcm1hbGl6
ZWRUeXBlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGljdGlvbmFyeS5nZXQoImxhc3RNb2Rp
ZmllZCIsIGxhc3RNb2RpZmllZCk7Ci0gICAgICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTEwNyw3ICsxMDcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnN0cnVjdEpTCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvYlBhcnRzTGVu
Z3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYmxvYlBhcnRzLT5nZXQoJmV4ZWMs
IGkpOwotICAgICAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKEFycmF5QnVmZmVyKiBhcnJheUJ1ZmZl
ciA9IHRvQXJyYXlCdWZmZXIoaXRlbSkpCkBAIC0xMTgsNyArMTE4LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAgICAgICAgICAgYmxvYkJ1aWxkZXIuYXBw
ZW5kKGJsb2IpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmcgPSBp
dGVtLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICAgICAgICAgIGlmIChleGVjLmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5kKHN0cmluZywgQVNDSUlMaXRlcmFsKCJ0cmFuc3BhcmVu
dCIpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw2ICs3MSw5IEBAIHN0YXRpYyB2b2lkIHNldE1heGltdW1BZ2UoUG9zaXRpb25PcHRp
b24KIAogc3RhdGljIFJlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IGNyZWF0ZVBvc2l0aW9uT3B0aW9u
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICAv
LyBDcmVhdGUgZGVmYXVsdCBvcHRpb25zLgogICAgIGF1dG8gb3B0aW9ucyA9IFBvc2l0aW9uT3B0
aW9uczo6Y3JlYXRlKCk7CiAKQEAgLTgyLDcgKzg1LDcgQEAgc3RhdGljIFJlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IGNyZWF0ZVBvcwogCiAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRlc3QsIHRoaXMg
d2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1
ZS50b09iamVjdChleGVjKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHNjb3BlLCAhc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgLy8gQ3Jl
YXRlIHRoZSBkaWN0aW9uYXJ5IHdyYXBwZXIgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgb2JqZWN0Lgog
ICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5KGV4ZWMsIG9iamVjdCk7CkBAIC05OSwxOSArMTAy
LDIyIEBAIHN0YXRpYyBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3MKIAogSlNWYWx1
ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0ZSkKIHsK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKwogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywgKG9wdGlv
bmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9ucwogCiAg
ICAgYXV0byBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQ
b3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1bWVudCgw
KSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIEFTU0VS
VChwb3NpdGlvbkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25FcnJvckNhbGxiYWNrID0g
Y3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+KCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93VW5kZWZp
bmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgIGF1dG8gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9zaXRpb25P
cHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsKIApAQCAt
MTIxLDE5ICsxMjcsMjIgQEAgSlNWYWx1ZSBKU0dlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRp
bwogCiBKU1ZhbHVlIEpTR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oRXhlY1N0YXRlJiBzdGF0
ZSkKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIC8vIEFyZ3VtZW50czogUG9zaXRpb25DYWxsYmFjaywg
KG9wdGlvbmFsKVBvc2l0aW9uRXJyb3JDYWxsYmFjaywgKG9wdGlvbmFsKVBvc2l0aW9uT3B0aW9u
cwogCiAgICAgYXV0byBwb3NpdGlvbkNhbGxiYWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJh
Y2s8SlNQb3NpdGlvbkNhbGxiYWNrPigmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBzdGF0ZS5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IEFTU0VSVChwb3NpdGlvbkNhbGxiYWNrKTsKIAogICAgIGF1dG8gcG9zaXRpb25FcnJvckNhbGxi
YWNrID0gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2s8SlNQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHN0YXRlLmFyZ3VtZW50KDEpLCBDYWxsYmFja0FsbG93
VW5kZWZpbmVkIHwgQ2FsbGJhY2tBbGxvd051bGwpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgIGF1dG8gcG9zaXRpb25PcHRpb25zID0gY3JlYXRlUG9z
aXRpb25PcHRpb25zKCZzdGF0ZSwgc3RhdGUuYXJndW1lbnQoMikpOwotICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBBU1NFUlQocG9zaXRpb25PcHRpb25zKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
QWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw5IEBAIHN0YXRpYyBKU1ZhbHVlIG5hbWVkSXRlbXMoRXhlY1N0YXRl
JiBzdGEKIC8vIEhUTUxBbGxDb2xsZWN0aW9ucyBhcmUgc3RyYW5nZSBvYmplY3RzLCB0aGV5IHN1
cHBvcnQgYm90aCBnZXQgYW5kIGNhbGwuCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsSFRNTEFsbENvbGxlY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogeworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKQEAgLTY1LDcgKzY4LDcgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPT0gMSkgewogICAgICAgICAvLyBTdXBwb3J0IGZvciBkb2N1bWVudC5hbGwoPGlu
ZGV4PikgZXRjLgogICAgICAgICBTdHJpbmcgc3RyaW5nID0gZXhlYy0+YXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICBpZiAoT3B0
aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleCgqc3RyaW5nLmltcGwoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlMoZXhlYywganNDb2xsZWN0aW9uLT5n
bG9iYWxPYmplY3QoKSwgY29sbGVjdGlvbi5pdGVtKGluZGV4LnZhbHVlKCkpKSk7CkBAIC03Niw3
ICs3OSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAg
IC8vIFRoZSBzZWNvbmQgYXJnLCBpZiBzZXQsIGlzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3ZSB3
YW50CiAgICAgU3RyaW5nIHN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMp
LT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFy
c2VJbmRleCgqZXhlYy0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZXhlYykuaW1wbCgpKSkgewog
ICAgICAgICBpZiAoYXV0byogaXRlbSA9IGNvbGxlY3Rpb24ubmFtZWRJdGVtV2l0aEluZGV4KHN0
cmluZywgaW5kZXgudmFsdWUoKSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjaWYgRU5BQkxFKFdFQkdMKQogc3RhdGljIHZvaWQgZ2V0M0RDb250ZXh0QXR0cmli
dXRlcyhFeGVjU3RhdGUmIHN0YXRlLCBSZWZQdHI8Q2FudmFzQ29udGV4dEF0dHJpYnV0ZXM+JiBh
dHRycykKIHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgaW5pdGlhbGl6ZXJWYWx1ZSA9IHN0
YXRlLmFyZ3VtZW50KDEpOwogICAgIGlmIChpbml0aWFsaXplclZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBKU09iamVjdCogaW5pdGlhbGl6ZXJP
YmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KCZzdGF0ZSk7Ci0gICAgQVNTRVJUKCFz
dGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4
Y2VwdGlvbigpKTsKICAgICBKU0RpY3Rpb25hcnkgZGljdGlvbmFyeSgmc3RhdGUsIGluaXRpYWxp
emVyT2JqZWN0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBncmFw
aGljc0F0dHJzOwpAQCAtODMsNyArODYsNyBAQCBKU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6
OmdldENvbnRleHQoCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChIVE1MQ2FudmFzRWxlbWVu
dDo6aXMzZFR5cGUoY29udGV4dElkKSkgewogICAgICAgICBnZXQzRENvbnRleHRBdHRyaWJ1dGVz
KHN0YXRlLCBhdHRycyk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29uc3RydWN0SlMKICAgICBpZiAoIWVsZW1lbnRJbnRlcmZhY2UtPmlzVXBncmFkaW5nRWxl
bWVudCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSA9IGdldERPTVN0cnVj
dHVyZTxKU0hUTUxFbGVtZW50Pih2bSwgKmdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8qIG5l
d0VsZW1lbnRTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVj
dHVyZSgmZXhlYywgbmV3VGFyZ2V0VmFsdWUsIGJhc2VTdHJ1Y3R1cmUpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoZXhlYy5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgICAgIFJlZjxIVE1MRWxlbWVudD4gZWxlbWVudCA9IEhUTUxFbGVt
ZW50OjpjcmVhdGUoZWxlbWVudEludGVyZmFjZS0+bmFtZSgpLCBkb2N1bWVudCk7CkBAIC05OCwx
MiArOTgsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKUwogICAg
IEFTU0VSVChlbGVtZW50V3JhcHBlclZhbHVlLmlzT2JqZWN0KCkpOwogCiAgICAgSlNWYWx1ZSBu
ZXdQcm90b3R5cGUgPSBuZXdUYXJnZXQtPmdldCgmZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgSlNPYmplY3QqIGVsZW1lbnRXcmFwcGVyT2JqZWN0ID0gYXNPYmpl
Y3QoZWxlbWVudFdyYXBwZXJWYWx1ZSk7CiAgICAgSlNPYmplY3Q6OnNldFByb3RvdHlwZShlbGVt
ZW50V3JhcHBlck9iamVjdCwgJmV4ZWMsIG5ld1Byb3RvdHlwZSwgdHJ1ZSAvKiBzaG91bGRUaHJv
d0lmQ2FudFNldCAqLyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIAogICAgIGVsZW1lbnRJbnRlcmZhY2UtPmRpZFVwZ3JhZGVMYXN0
RWxlbWVudEluQ29uc3RydWN0aW9uU3RhY2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjMsMTggKzYzLDE4IEBAIEpTVmFsdWUgSlNIaXN0b3J5OjpwdXNoU3RhdGUoRXhlY1N0
YXRlJiAKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgYXV0byBoaXN0b3J5U3Rh
dGUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCAwLCAwKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKICAgICAvLyBGSVhNRTogdGl0bGUgc2hvdWxkIG5vdCBiZSBudWxsYWJsZS4KICAg
ICBTdHJpbmcgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKCZz
dGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNl
cHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0cmluZyB1cmw7CiAgICAgaWYgKGFyZ0NvdW50
ID4gMikgewogICAgICAgICB1cmwgPSB2YWx1ZVRvVVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikpOwotICAgICAgICBpZiAo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKQEAgLTk3
LDE4ICs5NywxOCBAQCBKU1ZhbHVlIEpTSGlzdG9yeTo6cmVwbGFjZVN0YXRlKEV4ZWNTdGF0CiAg
ICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIGF1dG8gaGlzdG9yeVN0YXRlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVu
dCgwKSwgMCwgMCk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CiAgICAgLy8gRklYTUU6IHRpdGxlIHNob3VsZCBub3QgYmUgbnVsbGFibGUuCiAgICAgU3RyaW5n
IHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygmc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICBTdHJpbmcgdXJsOwogICAgIGlmIChhcmdDb3VudCA+IDIpIHsK
ICAgICAgICAgdXJsID0gdmFsdWVUb1VTVlN0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjaygm
c3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkRhdGFiYXNlQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJEYXRhYmFz
ZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgSlNWYWx1ZSBKU0lE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7
CiAKICAgICBTdHJpbmcgbmFtZSA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSkt
PnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgSlNWYWx1ZSBvcHRpb25zVmFsdWUgPSBzdGF0ZS5hcmd1bWVudCgxKTsKQEAgLTY2
LDE3ICs2NiwxNyBAQCBKU1ZhbHVlIEpTSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlCiAg
ICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CiAgICAgaWYgKCFvcHRpb25zVmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkgewogICAgICAgICBKU1ZhbHVlIGtleVBhdGhWYWx1ZSA9IG9wdGlv
bnNWYWx1ZS5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImtleVBh
dGgiKSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogCiAgICAgICAgIGlmICgha2V5UGF0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
ICAgICAgICAgICAgIGtleVBhdGggPSBpZGJLZXlQYXRoRnJvbVZhbHVlKHN0YXRlLCBrZXlQYXRo
VmFsdWUpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG9JbmNyZW1lbnQgPSBv
cHRpb25zVmFsdWUuZ2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJh
dXRvSW5jcmVtZW50IikpLnRvQm9vbGVhbigmc3RhdGUpOwotICAgICAgICBpZiAoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIuY3BwCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExp
c3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsOSBAQCBKU09iamVjdCogSlNM
YXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwpAQCAtMTEyLDkgKzExNSw5
IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXoKICAgICAgICAgZXhl
YywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBhcmdzLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKGV4ZWMsIG1fZnVuY3Rpb25OYW1lKSwKICAgICAgICAgbV9zb3VyY2VVUkwsIG1fc291cmNl
UG9zaXRpb24sIG92ZXJyaWRlTGluZU51bWJlcik7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAg
IHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oZXhlYyk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIApAQCAtMTIzLDE0ICsxMjYsMTMgQEAgSlNPYmplY3QqIEpTTGF6eUV2
ZW50TGlzdGVuZXI6OmluaXRpYWxpegogICAgIGlmIChtX29yaWdpbmFsTm9kZSkgewogICAgICAg
ICBpZiAoIXdyYXBwZXIoKSkgewogICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgJ25vZGUnIGhh
cyBhIEphdmFTY3JpcHQgd3JhcHBlciB0byBtYXJrIHRoZSBldmVudCBsaXN0ZW5lciB3ZSdyZSBj
cmVhdGluZy4KLSAgICAgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0
aCB0aGUgbm9kZQotICAgICAgICAgICAgc2V0V3JhcHBlcihleGVjLT52bSgpLCBhc09iamVjdCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgKm1fb3JpZ2luYWxOb2RlKSkpOworICAgICAgICAgICAg
c2V0V3JhcHBlcih2bSwgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsICptX29yaWdp
bmFsTm9kZSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGUgZXZlbnQncyBob21l
IGVsZW1lbnQgdG8gdGhlIHNjb3BlCiAgICAgICAgIC8vIChhbmQgdGhlIGRvY3VtZW50LCBhbmQg
dGhlIGZvcm0gLSBzZWUgSlNIVE1MRWxlbWVudDo6ZXZlbnRIYW5kbGVyU2NvcGUpCi0gICAgICAg
IGxpc3RlbmVyQXNGdW5jdGlvbi0+c2V0U2NvcGUoZXhlYy0+dm0oKSwganNDYXN0PEpTTm9kZSo+
KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBsaXN0ZW5lckFzRnVuY3Rp
b24tPnNjb3BlKCkpKTsKKyAgICAgICAgbGlzdGVuZXJBc0Z1bmN0aW9uLT5zZXRTY29wZSh2bSwg
anNDYXN0PEpTTm9kZSo+KHdyYXBwZXIoKSktPnB1c2hFdmVudEhhbmRsZXJTY29wZShleGVjLCBs
aXN0ZW5lckFzRnVuY3Rpb24tPnNjb3BlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGpzRnVuY3Rp
b247CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVj
U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5U
aHJlYWRFeGVjU3RhdGUuaAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywx
MSArMTA3LDE0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgbGlua0FuZEV2
YWx1YXRlTW9kdWxlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IG1vZHVsZUtleSwgSlNDOjpKU1ZhbHVlIGluaXRpYXRvciwgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+JiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwor
ICAgIAogICAgICAgICBKU01haW5UaHJlYWRFeGVjU3RhdGUgY3VycmVudFN0YXRlKGV4ZWMpOwog
ICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmxpbmtBbmRFdmFsdWF0ZU1v
ZHVsZShleGVjLCBtb2R1bGVLZXksIGluaXRpYXRvcik7Ci0gICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBleGVjLT52bSgp
LmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJu
ZWRFeGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKQEAgLTEzMSw4ICsxMzQsMTAgQEAg
cHJpdmF0ZToKIAogICAgIH5KU01haW5UaHJlYWRFeGVjU3RhdGUoKQogICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzX21haW5UaHJlYWRTdGF0ZS0+dm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgICAgICBBU1NFUlQoIXNfbWFpblRocmVhZFN0YXRlLT5oYWRFeGNlcHRpb24oKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24oKSk7CiAKICAg
ICAgICAgYm9vbCBkaWRFeGl0SmF2YVNjcmlwdCA9IHNfbWFpblRocmVhZFN0YXRlICYmICFtX3By
ZXZpb3VzU3RhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2Fn
ZUV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA0LDYgKzEwNCw5IEBAIEpTVmFsdWUgSlNNZXNzYWdlRXZlbnQ6OmRhdGEoRXhlY1N0
YXRlJiAKIAogc3RhdGljIEpTQzo6SlNWYWx1ZSBoYW5kbGVJbml0TWVzc2FnZUV2ZW50KEpTTWVz
c2FnZUV2ZW50KiBqc0V2ZW50LCBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICBjb25zdCBTdHJpbmcmIHR5cGVBcmcgPSBzdGF0ZS5hcmd1bWVudCgwKS50b1N0cmlu
Zygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwogICAgIGJvb2wgY2FuQnViYmxlQXJnID0gc3RhdGUu
YXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7CiAgICAgYm9vbCBjYW5jZWxhYmxlQXJnID0g
c3RhdGUuYXJndW1lbnQoMikudG9Cb29sZWFuKCZzdGF0ZSk7CkBAIC0xMTYsMTYgKzExOSwxNiBA
QCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGhhbmRsZUluaXRNZXNzYWdlRXZlCiAgICAgICAgIG1lc3Nh
Z2VQb3J0cyA9IHN0ZDo6bWFrZV91bmlxdWU8TWVzc2FnZVBvcnRBcnJheT4oKTsKICAgICAgICAg
YXJyYXlCdWZmZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxBcnJheUJ1ZmZlckFycmF5PigpOwogICAg
ICAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNyksICptZXNz
YWdlUG9ydHMsICphcnJheUJ1ZmZlcnMpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUgZGF0YUFyZyhzdGF0ZS52bSgpLCBzdGF0ZS5hcmd1bWVudCgzKSk7Ci0gICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGRhdGFBcmcodm0s
IHN0YXRlLmFyZ3VtZW50KDMpKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIE1lc3NhZ2VFdmVudCYgZXZl
bnQgPSBqc0V2ZW50LT53cmFwcGVkKCk7CiAgICAgZXZlbnQuaW5pdE1lc3NhZ2VFdmVudCh0eXBl
QXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIG9yaWdpbkFyZywgbGFz
dEV2ZW50SWRBcmcsIHNvdXJjZUFyZywgV1RGTW92ZShtZXNzYWdlUG9ydHMpKTsKLSAgICBqc0V2
ZW50LT5tX2RhdGEuc2V0KHN0YXRlLnZtKCksIGpzRXZlbnQsIGRhdGFBcmcuanNWYWx1ZSgpKTsK
KyAgICBqc0V2ZW50LT5tX2RhdGEuc2V0KHZtLCBqc0V2ZW50LCBkYXRhQXJnLmpzVmFsdWUoKSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTIgKzczLDEyIEBAIHZvaWQgZmlsbE1lc3NhZ2VQb3J0
QXJyYXkoSlNDOjpFeGVjU3RhdGUKICAgICAvLyBWYWxpZGF0aW9uIG9mIHNlcXVlbmNlIHR5cGVz
LCBwZXIgV2ViSURMIHNwZWMgNC4xLjEzLgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAg
SlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZShzdGF0ZSwgdmFsdWUsIGxlbmd0aCk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwgaSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgLy8gVmFsaWRhdGlvbiBvZiBub24tbnVsbCBvYmplY3RzLCBwZXIgSFRNTDUgc3BlYyAxMC4z
LjMuCiAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5oCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBBcnJheUJ1ZmZlckFycmF5IGFycmF5QnVmZmVyQXJyYXk7CiAgICAgICAg
IGZpbGxNZXNzYWdlUG9ydEFycmF5KHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgxKSwgcG9ydEFycmF5
LCBhcnJheUJ1ZmZlckFycmF5KTsKICAgICAgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSwgJnBv
cnRBcnJheSwgJmFycmF5QnVmZmVyQXJyYXkpOwotICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNb2NrQ29udGVudEZp
bHRlclNldHRpbmdzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3NDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01vY2tDb250ZW50RmlsdGVy
U2V0dGluZ3NDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQg
SlNNb2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXREZWMKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29udmVy
dDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoc3RhdGUu
aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRGVjaXNpb25Qb2ludCBkZWNpc2lvblBvaW50IHsgc3RhdGlj
X2Nhc3Q8RGVjaXNpb25Qb2ludD4obmF0aXZlVmFsdWUpIH07CkBAIC05OCw3ICs5OCw3IEBAIHN0
YXRpYyBpbmxpbmUgRGVjaXNpb24gdG9EZWNpc2lvbihFeGVjU3QKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB1aW50OF90IG5hdGl2ZVZhbHVlIHsgY29u
dmVydDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSkgfTsKLSAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIERlY2lzaW9uOjpBbGxvdzsKIAogICAgIERlY2lzaW9uIGRlY2lzaW9u
IHsgc3RhdGljX2Nhc3Q8RGVjaXNpb24+KG5hdGl2ZVZhbHVlKSB9OwpAQCAtMTE5LDggKzExOSwx
MSBAQCBKU1ZhbHVlIEpTTW9ja0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6ZGVjCiAKIHZvaWQgSlNN
b2NrQ29udGVudEZpbHRlclNldHRpbmdzOjpzZXREZWNpc2lvbihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgRGVjaXNpb24gZGVjaXNpb24geyB0
b0RlY2lzaW9uKHN0YXRlLCB2YWx1ZSkgfTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgd3JhcHBlZCgpLnNldERlY2lzaW9uKGRlY2lzaW9uKTsKQEAgLTEzMyw4ICsxMzYsMTEg
QEAgSlNWYWx1ZSBKU01vY2tDb250ZW50RmlsdGVyU2V0dGluZ3M6OnVuYgogCiB2b2lkIEpTTW9j
a0NvbnRlbnRGaWx0ZXJTZXR0aW5nczo6c2V0VW5ibG9ja1JlcXVlc3REZWNpc2lvbihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgRGVjaXNpb24g
dW5ibG9ja1JlcXVlc3REZWNpc2lvbiB7IHRvRGVjaXNpb24oc3RhdGUsIHZhbHVlKSB9OwotICAg
IGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICB3cmFwcGVkKCkuc2V0VW5ibG9ja1JlcXVl
c3REZWNpc2lvbih1bmJsb2NrUmVxdWVzdERlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksMTEgKzQ5LDEyIEBAIHVpbnQxNl90IEpTTm9kZUZpbHRl
cjo6YWNjZXB0Tm9kZShOb2RlKiAKICAgICBFeGVjU3RhdGUqIHN0YXRlID0gbV9kYXRhLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7
CiAgICAgYXJncy5hcHBlbmQodG9KUyhzdGF0ZSwgbV9kYXRhLT5nbG9iYWxPYmplY3QoKSwgbm9k
ZSkpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpF
Q1Q7CiAKICAgICBOYWtlZFB0cjxFeGNlcHRpb24+IHJldHVybmVkRXhjZXB0aW9uOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBtX2RhdGEtPmludm9rZUNhbGxiYWNrKGFyZ3MsIEpTQ2FsbGJhY2tEYXRh
OjpDYWxsYmFja1R5cGU6OkZ1bmN0aW9uT3JPYmplY3QsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
c3RhdGUsICJhY2NlcHROb2RlIiksIHJldHVybmVkRXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpIHx8IHJldHVybmVkRXhjZXB0aW9uKTsKICAgICBpZiAocmV0dXJuZWRF
eGNlcHRpb24pIHsKICAgICAgICAgLy8gUmV0aHJvdyBleGNlcHRpb24uCiAgICAgICAgIHRocm93
RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgcmV0dXJuZWRFeGNlcHRpb24pOwpAQCAtNjIsNyArNjMs
NyBAQCB1aW50MTZfdCBKU05vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogCiAgICAgfQogCiAg
ICAgdWludDE2X3QgcmVzdWx0ID0gY29udmVydDx1aW50MTZfdD4oKnN0YXRlLCB2YWx1ZSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6
RklMVEVSX1JFSkVDVDsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlT3JTdHJpbmcuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVPclN0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkpTTm9kZS5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVGhy
b3dTY29wZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0zNSw2ICszNiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJl
ZjxOb2RlPiwgU3RyaW5nPj4gdG9Ob2RlT3JTdHJpbmdWZWN0b3IoRXhlY1N0YXRlJiBzdGF0ZSkK
IHsKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIHNpemVfdCBhcmd1bWVudENvdW50ID0gc3RhdGUuYXJndW1l
bnRDb3VudCgpOwogCiAgICAgVmVjdG9yPHN0ZDo6ZXhwZXJpbWVudGFsOjp2YXJpYW50PFJlZjxO
b2RlPiwgU3RyaW5nPj4gcmVzdWx0OwpAQCAtNDYsNyArNTAsNyBAQCBWZWN0b3I8c3RkOjpleHBl
cmltZW50YWw6OnZhcmlhbnQ8UmVmPE5vCiAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKG5vZGUtPndyYXBwZWQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKHN0cmluZyk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0
aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTMgKzQ0LDE2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogSlNWYWx1ZSBKU1NRTFRyYW5zYWN0aW9uOjpleGVjdXRlU3FsKEV4ZWNT
dGF0ZSYgc3RhdGUpCiB7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAoIXN0YXRlLmFyZ3VtZW50Q291
bnQoKSkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHNxbFN0YXRl
bWVudCA9IHN0YXRlLmFyZ3VtZW50KDApLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgLy8gTm93
IGFzc2VtYmxlIHRoZSBsaXN0IG9mIFNRTCBhcmd1bWVudHMKQEAgLTYzLDE1ICs2NiwxNSBAQCBK
U1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgIH0KIAogICAg
ICAgICBKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBzdGF0ZS5wcm9w
ZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbmd0aFZhbHVl
LnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIGkpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCkBAIC04MSw3ICs4NCw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0
ZVNxbChFeGUKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvbnZlcnQg
dGhlIGFyZ3VtZW50IHRvIGEgc3RyaW5nIGFuZCBhcHBlbmQgaXQKICAgICAgICAgICAgICAgICBz
cWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSkpOwot
ICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdMZW5ndGhD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIEpTVmFsdWUgSlNTVkdM
ZW5ndGg6OmNvbnZlcnRUb1NwZWNpZmllZFUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwog
CiAgICAgdW5zaWduZWQgc2hvcnQgdW5pdFR5cGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KS50b1VJbnQzMigmc3RhdGUpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OSwxNiArNzksMTkgQEAgYm9vbCBKU1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleChKUwogCiB2b2lkIEpTU3RvcmFnZTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIEpTU3RvcmFn
ZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1N0b3JhZ2UqPihvYmplY3QpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5sZW5ndGgoZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpIHsKICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhl
eGVjLCB0aGlzT2JqZWN0LT53cmFwcGVkKCkua2V5KGksIGVjKSkpOwogICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKQEAgLTk3LDYgKzEwMCw5IEBAIHZvaWQgSlNTdG9yYWdlOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2IKIAogYm9vbCBKU1N0b3JhZ2U6OnB1dERlbGVnYXRlKEV4
ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
UHV0UHJvcGVydHlTbG90JiwgYm9vbCYgcHV0UmVzdWx0KQogeworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAg
Ly8gT25seSBwZXJmb3JtIHRoZSBjdXN0b20gcHV0IGlmIHRoZSBvYmplY3QgZG9lc24ndCBoYXZl
IGEgbmF0aXZlIHByb3BlcnR5IGJ5IHRoaXMgbmFtZS4KICAgICAvLyBTaW5jZSBoYXNQcm9wZXJ0
eSgpIHdvdWxkIGVuZCB1cCBjYWxsaW5nIGNhbkdldEl0ZW1zRm9yTmFtZSgpIGFuZCBiZSBmb29s
ZWQsIHdlIG5lZWQgdG8gY2hlY2sKICAgICAvLyB0aGUgbmF0aXZlIHByb3BlcnR5IHNsb3RzIG1h
bnVhbGx5LgpAQCAtMTEwLDcgKzExNiw3IEBAIGJvb2wgSlNTdG9yYWdlOjpwdXREZWxlZ2F0ZShF
eGVjU3RhdGUqIGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsK
ICAgICAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBwdXREZWxlZ2F0
ZSgpIHNob3VsZCBoYW5kbGUgdGhlIHB1dCBvcGVyYXRpb24gKHdoaWNoCiAgICAgICAgIC8vIGlm
IHRydWUsIHRlbGxzIHRoZSBjYWxsZXIgbm90IHRvIGV4ZWN1dGUgdGhlIGdlbmVyaWMgcHV0KS4g
SXQgZG9lcyBub3QgaW5kaWNhdGUgd2hldGhlcgogICAgICAgICAvLyBwdXREZWxlZ2F0ZSgpIGRp
ZCBzdWNjZXNzZnVsbHkgY29tcGxldGUgdGhlIG9wZXJhdGlvbiBvciBub3QgKHdoaWNoIGl0IGRp
ZG4ndCBpbiB0aGlzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RleHRUcmFj
a0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNU
ZXh0VHJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1RleHRUcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDgg
KzQ0LDExIEBAIHZvaWQgSlNUZXh0VHJhY2s6OnZpc2l0QWRkaXRpb25hbENoaWxkcmUKIHZvaWQg
SlNUZXh0VHJhY2s6OnNldExhbmd1YWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
CiB7CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybjsKICAgICB3cmFwcGVkKCkuc2V0TGFuZ3VhZ2Uoc3RyaW5nKTsKICNl
bHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVmlkZW9UcmFj
a0N1c3RvbS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVmlkZW9UcmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEx
IEBAIHZvaWQgSlNWaWRlb1RyYWNrOjp2aXNpdEFkZGl0aW9uYWxDaGlsZHIKIHZvaWQgSlNWaWRl
b1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAjaWYg
RU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGF1dG8mIHN0cmluZyA9IHZh
bHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybjsKICAgICB3cmFwcGVkKCkuc2V0S2luZChzdHJpbmcpOwogI2Vsc2UKQEAgLTU2LDgg
KzU5LDExIEBAIHZvaWQgSlNWaWRlb1RyYWNrOjpzZXRLaW5kKEV4ZWNTdGF0ZSYgc3QKIHZvaWQg
SlNWaWRlb1RyYWNrOjpzZXRMYW5ndWFnZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQogewogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBhdXRvJiBz
dHJpbmcgPSB2YWx1ZS50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAgIGlmIChz
dGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm47CiAgICAgd3JhcHBlZCgpLnNldExhbmd1YWdlKHN0cmluZyk7CiAj
ZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBKU1ZhbHVlIEpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW5kCiAKICAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0ID0gd3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy51bmNoZWNr
ZWRBcmd1bWVudCgwKS50b0ludDMyKCZleGVjKTsKLSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGV4ZWMudW5jaGVja2VkQXJndW1l
bnQoMSkudG9JbnQzMigmZXhlYyk7Ci0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEluZGV4ZWRQYXJhbWV0
ZXIocG5hbWUsIGluZGV4KTsKICAgICByZXR1cm4gdG9KUygmZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGluZm8pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiAy
MDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMTAgKzE5OSwxMCBAQCBz
dGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IG9iai0+
d3JhcHBlZCgpOwogICAgIHVuc2lnbmVkIHRhcmdldCA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDApLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgdW5zaWduZWQgcG5hbWUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50
b0ludDMyKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgIFdlYkdMR2V0SW5mbyBpbmZvOwogICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewpAQCAt
MzM1LDcgKzMzNSw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXQK
ICAgICAKICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gd3JhcHBlZCgp
OwogICAgIGNvbnN0IFN0cmluZyBuYW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoJnN0YXRlKS0+dmFsdWUoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQu
Z2V0RXh0ZW5zaW9uKG5hbWUpOwogICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCksIGV4dGVuc2lvbik7CkBAIC0zNTcsMTMgKzM1NywxMyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBwZWQoKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIGF0
dGFjaG1lbnQgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKCZzdGF0ZSk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIHVuc2lnbmVkIHBu
YW1lID0gc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMigmc3RhdGUpOwotICAgIGlm
IChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICBXZWJHTEdldEluZm8gaW5m
byA9IGNvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0
YWNobWVudCwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTM4NCw3ICszODQsNyBAQCBK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IHdyYXBw
ZWQoKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRv
SW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMp
OwogICAgIGlmIChlYykgewpAQCAtNDA4LDcgKzQwOCw3IEBAIEpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXQKICAgICBpZiAoIXByb2dyYW0gJiYgIXN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBy
b2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTQz
Nyw3ICs0MzcsNyBAQCBKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0CiAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKICAgICBXZWJHTFNo
YWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICB1bnNpZ25lZCBwbmFtZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW50MzIoJnN0YXRlKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRl
cihzaGFkZXIsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC00OTYsNiArNDk2LDkgQEAg
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldAogdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC01MDgsNyArNTExLDcgQEAgYm9vbCB0b1ZlY3Rv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQwogICAgIAogICAgIGZvciAoaW50MzJfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5n
ZXQoJnN0YXRlLCBpKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKCZzdGF0
ZSkpOwogICAgIH0KQEAgLTU1NiwxMSArNTU5LDExIEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0
YUZ1bmN0aW9uZihEYXRhRnUKICAgICB9IGVsc2UKICAgICAgICAgaW5kZXggPSBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKCZzdGF0ZSk7CiAgICAgCi0gICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+
IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7
Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNzA3LDcgKzcxMCw3IEBAIHN0YXRpYyBKU0M6OkpTVmFs
dWUgZGF0YUZ1bmN0aW9uTWF0cml4KEQKICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwogICAgIAogICAgIGJvb2wgdHJhbnNwb3NlID0gc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSkudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIAogICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJy
YXkgPSB0b0Zsb2F0MzJBcnJheShzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgyKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRTdWJ0bGVD
cnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDExICs2MywxNCBAQCBlbnVtIGNsYXNzIENyeXB0b0tleUZvcm1hdCB7CiAKIHN0YXRpYyBS
ZWZQdHI8Q3J5cHRvQWxnb3JpdGhtPiBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQogeworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBhbGdvcml0aG1JZGVudGlmaWVyOwotICAgIGlmICghSlNDcnlwdG9B
bGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKCZzdGF0ZSwgdmFsdWUs
IGFsZ29yaXRobUlkZW50aWZpZXIpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRp
b24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5Ojpn
ZXRBbGdvcml0aG1JZGVudGlmaWVyKCZzdGF0ZSwgdmFsdWUsIGFsZ29yaXRobUlkZW50aWZpZXIp
OworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsIHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3Mp
OworICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQogCiAg
ICAgYXV0byByZXN1bHQgPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3Jl
YXRlKGFsZ29yaXRobUlkZW50aWZpZXIpOwogICAgIGlmICghcmVzdWx0KQpAQCAtODEsNyArODQs
NyBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlGb3JtYXRGcm9tSlNWYWx1ZShFCiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGtleUZvcm1hdFN0
cmluZyA9IHZhbHVlLnRvU3RyaW5nKCZzdGF0ZSktPnZhbHVlKCZzdGF0ZSk7Ci0gICAgaWYgKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoa2V5Rm9ybWF0U3RyaW5nID09ICJyYXci
KQogICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzsKQEAgLTExNCw3ICsxMTcs
NyBAQCBzdGF0aWMgYm9vbCBjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShFCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBKU1ZhbHVl
IGVsZW1lbnQgPSBhcnJheS0+Z2V0SW5kZXgoJnN0YXRlLCBpKTsKICAgICAgICAgU3RyaW5nIHVz
YWdlU3RyaW5nID0gZWxlbWVudC50b1N0cmluZygmc3RhdGUpLT52YWx1ZSgmc3RhdGUpOwotICAg
ICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICh1
c2FnZVN0cmluZyA9PSAiZW5jcnlwdCIpCiAgICAgICAgICAgICByZXN1bHQgfD0gQ3J5cHRvS2V5
VXNhZ2VFbmNyeXB0OwpAQCAtMTQ1LDE2ICsxNDgsMTQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRs
ZUNyeXB0bzo6ZW5jcnlwdChFeAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBh
dXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNT
RVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkg
fHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0
aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yRW5jcnlwdCgmc3RhdGUsIGFsZ29yaXRo
bS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFw
YXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1l
dGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRy
PENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0xNjcsMTAgKzE2OCwxMCBAQCBKU1ZhbHVl
IEpTV2ViS2l0U3VidGxlQ3J5cHRvOjplbmNyeXB0KEV4CiAgICAgfQogCiAgICAgQ3J5cHRvT3Bl
cmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVl
KCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFT
U0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3Bl
cmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiks
IGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAg
IAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtMjAxLDE2ICsyMDIsMTQg
QEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6ZGVjcnlwdChFeAogICAgICAgICByZXR1
cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZy
b21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFh
bGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBB
U1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRo
bSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9y
RGVjcnlwdCgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFt
ZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9LZXk6OnRv
V3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkpCkBAIC0y
MjMsMTAgKzIyMiwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpkZWNyeXB0KEV4
CiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRv
T3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
MiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAg
YXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJy
ZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwog
ICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNy
ZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtMjU2LDE2
ICsyNTUsMTQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6c2lnbihFeGVjUwogICAg
ICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFs
Z29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigp
KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAo
IWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJh
bWV0ZXJzRm9yU2lnbigmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHBhcmFtZXRlcnMpOworICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0tleT4ga2V5ID0gSlNDcnlwdG9L
ZXk6OnRvV3JhcHBlZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSk7CiAgICAgaWYgKCFrZXkp
CkBAIC0yNzgsMTAgKzI3NSwxMCBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpzaWdu
KEV4ZWNTCiAgICAgfQogCiAgICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICgh
Y3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoMiksIGRhdGEpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7
CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5l
eGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNl
RGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
KCkpOwogICAgIFJlZlB0cjxEZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBw
ZXI6OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAt
MzExLDE2ICszMDgsMTQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6dmVyaWZ5KEV4
ZQogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNy
ZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgw
KSk7Ci0gICAgaWYgKCFhbGdvcml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAg
ICBpZiAoIWFsZ29yaXRobSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQog
CiAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVh
dGVQYXJhbWV0ZXJzRm9yVmVyaWZ5KCZzdGF0ZSwgYWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMpIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBK
U0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBp
ZiAoIWtleSkKQEAgLTMzMywxNiArMzI4LDE2IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlw
dG86OnZlcmlmeShFeGUKICAgICB9CiAKICAgICBDcnlwdG9PcGVyYXRpb25EYXRhIHNpZ25hdHVy
ZTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBzaWduYXR1cmUpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvT3BlcmF0aW9uRGF0
YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMiksIHNpZ25hdHVy
ZSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICgh
c3VjY2VzcykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgQ3J5
cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21K
U1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMyksIGRhdGEpKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgc3VjY2VzcyA9IGNyeXB0b09w
ZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMp
LCBkYXRhKTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAg
aWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6
OmNyZWF0ZSgmc3RhdGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFw
cGVyPiB3cmFwcGVyID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmpl
Y3QoKSwgcHJvbWlzZURlZmVycmVkKTsKQEAgLTM3MiwyMiArMzY3LDIwIEBAIEpTVmFsdWUgSlNX
ZWJLaXRTdWJ0bGVDcnlwdG86OmRpZ2VzdChFeGUKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkp
OwogCiAgICAgYXV0byBhbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghYWxnb3JpdGhtKSB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4
Y2VwdGlvbigpIHx8IGFsZ29yaXRobSk7CisgICAgaWYgKCFhbGdvcml0aG0pCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1ldGVyc0ZvckRpZ2VzdCgmc3RhdGUs
IGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24o
KSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgIGlm
ICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAg
ICAgQ3J5cHRvT3BlcmF0aW9uRGF0YSBkYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0
YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIGRhdGEpKSB7
Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNz
ID0gY3J5cHRvT3BlcmF0aW9uRGF0YUZyb21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMSksIGRhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNj
ZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KIAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21p
c2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwogICAgIFJlZlB0cjxE
ZWZlcnJlZFdyYXBwZXI+IHdyYXBwZXIgPSBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZSgmc3RhdGUs
IGdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpOwpAQCAtNDE3LDMwICs0MTAsMjggQEAg
SlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6Z2VuZXJhdGVLZQogICAgICAgICByZXR1cm4g
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoJnN0YXRlKSk7CiAKICAgICBhdXRvIGFsZ29yaXRobSA9IGNyZWF0ZUFsZ29yaXRobUZyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFhbGdv
cml0aG0pIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgYWxnb3JpdGhtKTsKKyAgICBpZiAoIWFsZ29yaXRobSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9yR2Vu
ZXJhdGVLZXkoJnN0YXRlLCBhbGdvcml0aG0tPmlkZW50aWZpZXIoKSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMCkpOwotICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBwYXJh
bWV0ZXJzKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KIAogICAgIGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3Rh
dGUuYXJndW1lbnRDb3VudCgpID49IDIpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRv
S2V5VXNhZ2Uga2V5VXNhZ2VzID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49
IDMpIHsKLSAgICAgICAgaWYgKCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3Rh
dGUuYXJndW1lbnQoMiksIGtleVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5o
YWRFeGNlcHRpb24oKSk7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zy
b21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgyKSwga2V5VXNhZ2VzKTsKKyAgICAgICAg
QVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nl
c3MpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0K
IAogICAgIEpTUHJvbWlzZURlZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZl
cnJlZDo6Y3JlYXRlKCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtNDg0LDcgKzQ3NSw3IEBA
IHN0YXRpYyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBrZXlTZXJpYWxpemF0aW9uID0gc3RkOjptYWtlX3Vu
aXF1ZTxKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s+KCZzdGF0ZSwgandrU3RyaW5nKTsKLSAg
ICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC00OTcsMTEgKzQ4OCwxMSBAQCBzdGF0aWMgdm9pZCBpbXBvcnRLZXkoRXhlY1N0YXRl
JiBzdGF0ZSwgCiAKICAgICBPcHRpb25hbDxDcnlwdG9BbGdvcml0aG1QYWlyPiByZWNvbmNpbGVk
UmVzdWx0ID0ga2V5U2VyaWFsaXphdGlvbi0+cmVjb25jaWxlQWxnb3JpdGhtKGFsZ29yaXRobS5n
ZXQoKSwgcGFyYW1ldGVycy5nZXQoKSk7CiAgICAgaWYgKCFyZWNvbmNpbGVkUmVzdWx0KSB7Ci0g
ICAgICAgIGlmICghc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmICghc2NvcGUuZXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkFsZ29yaXRobSBzcGVjaWZpZWQgaW4ga2V5IGlzIG5vdCBjb21wYXRpYmxlIHdp
dGggb25lIHBhc3NlZCB0byBpbXBvcnRLZXkgYXMgYXJndW1lbnQiKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFsZ29yaXRobSA9
IHJlY29uY2lsZWRSZXN1bHQtPmFsZ29yaXRobTsKQEAgLTUxMywxNSArNTA0LDE1IEBAIHN0YXRp
YyB2b2lkIGltcG9ydEtleShFeGVjU3RhdGUmIHN0YXRlLCAKICAgICBBU1NFUlQocGFyYW1ldGVy
cyk7CiAKICAgICBrZXlTZXJpYWxpemF0aW9uLT5yZWNvbmNpbGVFeHRyYWN0YWJsZShleHRyYWN0
YWJsZSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGtleVNlcmlhbGl6YXRp
b24tPnJlY29uY2lsZVVzYWdlcyhrZXlVc2FnZXMpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm47CiAKICAgICBhdXRvIGtleURhdGEgPSBrZXlTZXJpYWxpemF0aW9uLT5rZXlEYXRhKCk7Ci0g
ICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpA
QCAtNTM5LDQ1ICs1MzAsNDQgQEAgSlNWYWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6aW1wb3J0
S2V5KAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAKICAgICBDcnlwdG9LZXlGb3JtYXQg
a2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0
YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZS5oYWRF
eGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5cHRvS2V5Rm9ybWF0RnJvbUpTVmFs
dWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpOworICAgIEFTU0VSVChzY29w
ZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIENyeXB0b09wZXJhdGlvbkRhdGEgZGF0
YTsKLSAgICBpZiAoIWNyeXB0b09wZXJhdGlvbkRhdGFGcm9tSlNWYWx1ZSgmc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBkYXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIHN1Y2Nlc3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFs
dWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgxKSwgZGF0YSk7CisgICAgQVNTRVJU
KHNjb3BlLmV4Y2VwdGlvbigpIHx8IHN1Y2Nlc3MpOworICAgIGlmICghc3VjY2VzcykKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogCiAgICAgUmVmUHRyPENyeXB0b0FsZ29y
aXRobT4gYWxnb3JpdGhtOwogICAgIFJlZlB0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBw
YXJhbWV0ZXJzOwogICAgIGlmICghc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMikuaXNOdWxsKCkp
IHsKICAgICAgICAgYWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgaWYgKCFhbGdvcml0aG0pIHsK
LSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgICAgIEFTU0VS
VChzY29wZS5leGNlcHRpb24oKSB8fCBhbGdvcml0aG0pOworICAgICAgICBpZiAoIWFsZ29yaXRo
bSkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICB9CisKICAgICAg
ICAgcGFyYW1ldGVycyA9IEpTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Y3JlYXRlUGFyYW1l
dGVyc0ZvckltcG9ydEtleSgmc3RhdGUsIGFsZ29yaXRobS0+aWRlbnRpZmllcigpLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycykgewotICAgICAg
ICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3Bl
LmV4Y2VwdGlvbigpIHx8IHBhcmFtZXRlcnMpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMpCiAg
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAg
IGJvb2wgZXh0cmFjdGFibGUgPSBmYWxzZTsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgp
ID49IDQpIHsKICAgICAgICAgZXh0cmFjdGFibGUgPSBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCgz
KS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCiAgICAgQ3J5cHRvS2V5VXNhZ2Uga2V5VXNhZ2Vz
ID0gMDsKICAgICBpZiAoc3RhdGUuYXJndW1lbnRDb3VudCgpID49IDUpIHsKLSAgICAgICAgaWYg
KCFjcnlwdG9LZXlVc2FnZXNGcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUuYXJndW1lbnQoNCksIGtl
eVVzYWdlcykpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleVVzYWdlc0Zyb21KU1ZhbHVlKHN0YXRlLCBz
dGF0ZS5hcmd1bWVudCg0KSwga2V5VXNhZ2VzKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2Vw
dGlvbigpIHx8IHN1Y2Nlc3MpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBwcm9taXNlRGVmZXJyZWQgPSBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlKCZzdGF0
ZSwgZ2xvYmFsT2JqZWN0KCkpOwpAQCAtNTkwLDcgKzU4MCw3IEBAIEpTVmFsdWUgSlNXZWJLaXRT
dWJ0bGVDcnlwdG86OmltcG9ydEtleSgKICAgICB9OwogCiAgICAgV2ViQ29yZTo6aW1wb3J0S2V5
KHN0YXRlLCBrZXlGb3JtYXQsIGRhdGEsIFdURk1vdmUoYWxnb3JpdGhtKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2sp
LCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwotICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgIHJldHVybiBwcm9taXNlRGVmZXJyZWQtPnByb21pc2UoKTsK
QEAgLTYxNyw3ICs2MDcsNyBAQCBzdGF0aWMgdm9pZCBleHBvcnRLZXkoRXhlY1N0YXRlJiBzdGF0
ZSwgCiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKV0s6IHsKICAgICAgICAgU3Ry
aW5nIHJlc3VsdCA9IEpTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSzo6c2VyaWFsaXplKCZzdGF0
ZSwga2V5KTsKLSAgICAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBDU3RyaW5nIHV0ZjhTdHJpbmcgPSByZXN1bHQudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdEJ1ZmZlcjsKQEAgLTY0MCwxMCArNjMwLDEwIEBA
IEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSgKICAgICAgICAgcmV0dXJu
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAo
IWNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5
Rm9ybWF0KSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1
dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZvcm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1
bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3Vj
Y2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvS2V5PiBrZXkgPSBKU0NyeXB0b0tleTo6dG9XcmFw
cGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKICAgICBpZiAoIWtleSkKQEAgLTY1OSw3
ICs2NDksNyBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjpleHBvcnRLZXkoCiAgICAg
fTsKIAogICAgIFdlYkNvcmU6OmV4cG9ydEtleShzdGF0ZSwga2V5Rm9ybWF0LCAqa2V5LCBXVEZN
b3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Ci0gICAgaWYg
KHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgcmV0dXJuIHByb21pc2VE
ZWZlcnJlZC0+cHJvbWlzZSgpOwpAQCAtNjc0LDEwICs2NjQsMTAgQEAgSlNWYWx1ZSBKU1dlYktp
dFN1YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJnN0YXRlKSk7CiAK
ICAgICBDcnlwdG9LZXlGb3JtYXQga2V5Rm9ybWF0OwotICAgIGlmICghY3J5cHRvS2V5Rm9ybWF0
RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3JtYXQpKSB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBzdWNjZXNzID0gY3J5
cHRvS2V5Rm9ybWF0RnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDApLCBrZXlGb3Jt
YXQpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJl
ZlB0cjxDcnlwdG9LZXk+IGtleSA9IEpTQ3J5cHRvS2V5Ojp0b1dyYXBwZWQoc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoMSkpOwogICAgIGlmICgha2V5KQpAQCAtNjk0LDE2ICs2ODQsMTQgQEAgSlNW
YWx1ZSBKU1dlYktpdFN1YnRsZUNyeXB0bzo6d3JhcEtleShFeAogICAgIH0KIAogICAgIGF1dG8g
YWxnb3JpdGhtID0gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIWFsZ29yaXRobSkgewotICAgICAgICBBU1NFUlQo
c3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCBh
bGdvcml0aG0pOworICAgIGlmICghYWxnb3JpdGhtKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9CiAKICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURp
Y3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JFbmNyeXB0KCZzdGF0ZSwgYWxnb3JpdGhtLT5p
ZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NF
UlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgcGFyYW1ldGVycyk7CisgICAgaWYgKCFwYXJhbWV0ZXJz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBKU1Byb21pc2VE
ZWZlcnJlZCogcHJvbWlzZURlZmVycmVkID0gSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZSgmc3Rh
dGUsIGdsb2JhbE9iamVjdCgpKTsKICAgICBSZWZQdHI8RGVmZXJyZWRXcmFwcGVyPiB3cmFwcGVy
ID0gRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcHJvbWlz
ZURlZmVycmVkKTsKQEAgLTc0NiwxNiArNzM0LDE2IEBAIEpTVmFsdWUgSlNXZWJLaXRTdWJ0bGVD
cnlwdG86OnVud3JhcEtleSgKICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0ZSkpOwogCiAgICAgQ3J5
cHRvS2V5Rm9ybWF0IGtleUZvcm1hdDsKLSAgICBpZiAoIWNyeXB0b0tleUZvcm1hdEZyb21KU1Zh
bHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KSkgewotICAgICAgICBBU1NF
UlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGF1dG8gc3VjY2VzcyA9IGNyeXB0b0tleUZv
cm1hdEZyb21KU1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCgwKSwga2V5Rm9ybWF0KTsKKyAg
ICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNz
KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAKICAgICBDcnlwdG9PcGVy
YXRpb25EYXRhIHdyYXBwZWRLZXlEYXRhOwotICAgIGlmICghY3J5cHRvT3BlcmF0aW9uRGF0YUZy
b21KU1ZhbHVlKCZzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoMSksIHdyYXBwZWRLZXlE
YXRhKSkgewotICAgICAgICBBU1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgIHN1Y2Nl
c3MgPSBjcnlwdG9PcGVyYXRpb25EYXRhRnJvbUpTVmFsdWUoJnN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudCgxKSwgd3JhcHBlZEtleURhdGEpOworICAgIEFTU0VSVChzY29wZS5leGNlcHRp
b24oKSB8fCBzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KIAogICAgIFJlZlB0cjxDcnlwdG9LZXk+IHVud3JhcHBpbmdLZXkg
PSBKU0NyeXB0b0tleTo6dG9XcmFwcGVkKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKICAg
ICBpZiAoIXVud3JhcHBpbmdLZXkpCkBAIC03NjgsNDQgKzc1Niw0MSBAQCBKU1ZhbHVlIEpTV2Vi
S2l0U3VidGxlQ3J5cHRvOjp1bndyYXBLZXkoCiAgICAgfQogCiAgICAgYXV0byB1bndyYXBBbGdv
cml0aG0gPSBjcmVhdGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoMykpOwotICAgIGlmICghdW53cmFwQWxnb3JpdGhtKSB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZS5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8
IHVud3JhcEFsZ29yaXRobSk7CisgICAgaWYgKCF1bndyYXBBbGdvcml0aG0pCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KICAgICBhdXRvIHVud3JhcEFsZ29yaXRobVBhcmFt
ZXRlcnMgPSBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmNyZWF0ZVBhcmFtZXRlcnNGb3JE
ZWNyeXB0KCZzdGF0ZSwgdW53cmFwQWxnb3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KDMpKTsKLSAgICBpZiAoIXVud3JhcEFsZ29yaXRobVBhcmFtZXRlcnMpIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgdW53cmFwQWxnb3JpdGhtUGFyYW1ldGVycyk7CisgICAgaWYgKCF1bndy
YXBBbGdvcml0aG1QYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICB9CiAKICAgICBSZWZQdHI8Q3J5cHRvQWxnb3JpdGhtPiB1bndyYXBwZWRLZXlBbGdvcml0aG07
CiAgICAgUmVmUHRyPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+IHVud3JhcHBlZEtleUFsZ29y
aXRobVBhcmFtZXRlcnM7CiAgICAgaWYgKCFzdGF0ZS51bmNoZWNrZWRBcmd1bWVudCg0KS5pc051
bGwoKSkgewogICAgICAgICB1bndyYXBwZWRLZXlBbGdvcml0aG0gPSBjcmVhdGVBbGdvcml0aG1G
cm9tSlNWYWx1ZShzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoNCkpOwotICAgICAgICBp
ZiAoIXVud3JhcHBlZEtleUFsZ29yaXRobSkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpIHx8IHVud3Jh
cHBlZEtleUFsZ29yaXRobSk7CisgICAgICAgIGlmICghdW53cmFwcGVkS2V5QWxnb3JpdGhtKQog
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KKwogICAgICAgICB1
bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzID0gSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9u
YXJ5OjpjcmVhdGVQYXJhbWV0ZXJzRm9ySW1wb3J0S2V5KCZzdGF0ZSwgdW53cmFwcGVkS2V5QWxn
b3JpdGhtLT5pZGVudGlmaWVyKCksIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDQpKTsKLSAgICAg
ICAgaWYgKCF1bndyYXBwZWRLZXlBbGdvcml0aG1QYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoc3RhdGUuaGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0
aW9uKCkgfHwgdW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycyk7CisgICAgICAgIGlmICgh
dW53cmFwcGVkS2V5QWxnb3JpdGhtUGFyYW1ldGVycykKICAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBleHRyYWN0YWJsZSA9IGZh
bHNlOwogICAgIGlmIChzdGF0ZS5hcmd1bWVudENvdW50KCkgPj0gNikgewogICAgICAgICBleHRy
YWN0YWJsZSA9IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KDUpLnRvQm9vbGVhbigmc3RhdGUpOwot
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKICAgICBDcnlwdG9LZXlVc2FnZSBrZXlVc2FnZXMgPSAwOwogICAgIGlmIChzdGF0ZS5h
cmd1bWVudENvdW50KCkgPj0gNykgewotICAgICAgICBpZiAoIWNyeXB0b0tleVVzYWdlc0Zyb21K
U1ZhbHVlKHN0YXRlLCBzdGF0ZS5hcmd1bWVudCg2KSwga2V5VXNhZ2VzKSkgewotICAgICAgICAg
ICAgQVNTRVJUKHN0YXRlLmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgYXV0byBzdWNjZXNzID0g
Y3J5cHRvS2V5VXNhZ2VzRnJvbUpTVmFsdWUoc3RhdGUsIHN0YXRlLmFyZ3VtZW50KDYpLCBrZXlV
c2FnZXMpOworICAgICAgICBBU1NFUlQoc2NvcGUuZXhjZXB0aW9uKCkgfHwgc3VjY2Vzcyk7Cisg
ICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICB9CiAgICAgfQogCiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIHByb21pc2VEZWZlcnJl
ZCA9IEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKSk7CkBA
IC04MTksMTEgKzgwNCwxNSBAQCBKU1ZhbHVlIEpTV2ViS2l0U3VidGxlQ3J5cHRvOjp1bndyYXBL
ZXkoCiAgICAgICAgIGF1dG8gaW1wb3J0RmFpbHVyZUNhbGxiYWNrID0gW3dyYXBwZXJdKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICB3cmFwcGVyLT5yZWplY3QobnVsbHB0cik7CiAgICAgICAgIH07
CisKKyAgICAgICAgVk0mIHZtID0gZG9tR2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICAgICAgRXhlY1N0YXRlJiBz
dGF0ZSA9ICpkb21HbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgV2ViQ29yZTo6
aW1wb3J0S2V5KHN0YXRlLCBrZXlGb3JtYXQsIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIHVud3JhcHBlZEtleUFsZ29y
aXRobVBhcmFtZXRlcnMsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIFdURk1vdmUoaW1wb3J0U3Vj
Y2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShpbXBvcnRGYWlsdXJlQ2FsbGJhY2spKTsKLSAgICAgICAg
aWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgZXhjZXB0aW9uIGRl
dGFpbHMgdG8gY29uc29sZSwgYW5kIHBvc3NpYmx5IHRvIGNhbGxpbmcgc2NyaXB0IG9uY2UgdGhl
cmUgaXMgYSBzdGFuZGFyZGl6ZWQgd2F5IHRvIHBhc3MgZXJyb3JzIHRvIFdlYkNyeXB0byBwcm9t
aXNlIHJlamVjdCBmdW5jdGlvbnMuCi0gICAgICAgICAgICBzdGF0ZS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHdyYXBw
ZXItPnJlamVjdChudWxscHRyKTsKICAgICAgICAgfQogICAgIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMDU1NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zdHJ1Y3RKUwogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZleGVjLCBzY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmV4ZWMpKTsKIAogICAgIFN0cmluZyBzY3JpcHRV
UkwgPSBleGVjLnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKCZleGVjKTsKLSAgICBp
ZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CiAKICAgICAv
LyBTZWUgc2VjdGlvbiA0LjguMiBzdGVwIDE0IG9mIFdlYldvcmtlcnMgZm9yIHdoeSB0aGlzIGlz
IHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xvYmFsU2Nv
cGVDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMyArNjEsMTYgQEAgdm9pZCBKU1dv
cmtlckdsb2JhbFNjb3BlOjp2aXNpdEFkZGl0aW9uYQogCiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFs
U2NvcGU6OmltcG9ydFNjcmlwdHMoRXhlY1N0YXRlJiBzdGF0ZSkKIHsKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwog
ICAgIGlmICghc3RhdGUuYXJndW1lbnRDb3VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHVybHM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgIHVybHMuYXBwZW5k
KHZhbHVlVG9VU1ZTdHJpbmcoJnN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSkpOwot
ICAgICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC04Niw3ICs4OSw3IEBAIEpTVmFsdWUg
SlNXb3JrZXJHbG9iYWxTY29wZTo6c2V0VGltZW91dCgKICAgICAgICAgcmV0dXJuIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZzdGF0
ZSkpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNjaGVkdWxlZEFjdGlvbj4gYWN0aW9uID0gU2No
ZWR1bGVkQWN0aW9uOjpjcmVhdGUoJnN0YXRlLCBnbG9iYWxPYmplY3QoKS0+d29ybGQoKSwgd3Jh
cHBlZCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpKTsKLSAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgaWYgKCFhY3Rpb24pCiAgICAgICAgIHJldHVybiBqc051
bWJlcigwKTsKQEAgLTEwMyw3ICsxMDYsNyBAQCBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6
OnNldEludGVydmFsCiAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcigmc3RhdGUpKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTY2hlZHVsZWRBY3Rpb24+IGFjdGlvbiA9IFNjaGVkdWxlZEFjdGlvbjo6Y3JlYXRl
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0KCktPndvcmxkKCksIHdyYXBwZWQoKS5jb250ZW50U2VjdXJp
dHlQb2xpY3koKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIGlmICghYWN0aW9uKQogICAgICAgICByZXR1cm4ganNOdW1iZXIoMCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgSlNDOjpKU1ZhbHVlIFJlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRybwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAog
ICAgIGF1dG8gZnVuY3Rpb24gPSBvYmplY3QuZ2V0KCZzdGF0ZSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU0M6OmpzVW5kZWZpbmVkKCk7CiAKICAgICBpZiAoIWZ1bmN0aW9uLmlzRnVuY3Rpb24o
KSkgewpAQCAtNzAsMTkgKzcwLDIyIEBAIEpTQzo6SlNWYWx1ZSBSZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm8KIAogYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjppc0NvbnRy
b2xsZWRSZWFkYWJsZVN0cmVhbUxvY2tlZCgpIGNvbnN0CiB7Ci0gICAgYXV0byYgc3RhdGUgPSAq
Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2Nr
KCZzdGF0ZSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsK
KyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CisgICAgYXV0byYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBh
dXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oc3RhdGUudm0o
KS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1D
bGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAgICAgYXV0byByZWFkYWJsZVN0cmVhbSA9IG1f
anNDb250cm9sbGVyLT5nZXQoJnN0YXRlLCBjbGllbnREYXRhLmJ1aWx0aW5OYW1lcygpLmNvbnRy
b2xsZWRSZWFkYWJsZVN0cmVhbVByaXZhdGVOYW1lKCkpOwotICAgIEFTU0VSVCghc3RhdGUuaGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2NvcGUsICFzY29wZS5leGNlcHRpb24o
KSk7CiAKLSAgICBhdXRvIGlzTG9ja2VkID0gZ2xvYmFsT2JqZWN0KCktPmJ1aWx0aW5JbnRlcm5h
bEZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzKCkubV9pc1JlYWRhYmxlU3RyZWFt
TG9ja2VkRnVuY3Rpb24uZ2V0KCk7CisgICAgYXV0byBpc0xvY2tlZCA9IGdsb2JhbE9iamVjdC0+
YnVpbHRpbkludGVybmFsRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHMoKS5tX2lz
UmVhZGFibGVTdHJlYW1Mb2NrZWRGdW5jdGlvbi5nZXQoKTsKIAogICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgYXJndW1lbnRzOwogICAgIGFyZ3VtZW50cy5hcHBlbmQocmVhZGFibGVTdHJl
YW0pOwogICAgIGF1dG8gcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHN0YXRlLCBpc0xvY2tlZCwgSlND
Ojpqc1VuZGVmaW5lZCgpLCBhcmd1bWVudHMpOwotICAgIEFTU0VSVCghc3RhdGUuaGFkRXhjZXB0
aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgcmV0dXJuIHJl
c3VsdC5pc1RydWUoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHJldmlzaW9u
IDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsMTEgQEAgaW5saW5l
IEpTRE9NR2xvYmFsT2JqZWN0KiBSZWFkYWJsZVN0cmVhbQogCiBpbmxpbmUgYm9vbCBSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1ZXVlKFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
PiYmIGJ1ZmZlcikKIHsKLSAgICBKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUgPSAqZ2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIoJnN0YXRlKTsK
KyAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHRoaXMtPmdsb2JhbE9iamVjdCgpOworICAgIEpTQzo6
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tl
cih2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSA9ICpnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAg
IGlmICghYnVmZmVyKSB7CiAgICAgICAgIGVycm9yKHN0YXRlLCBjcmVhdGVPdXRPZk1lbW9yeUVy
cm9yKCZzdGF0ZSkpOwpAQCAtODQsOCArODcsOCBAQCBpbmxpbmUgYm9vbCBSZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sCiAgICAgYXV0byBsZW5ndGggPSBidWZmZXItPmJ5dGVMZW5ndGgoKTsK
ICAgICBhdXRvIGNodW5rID0gSlNDOjpVaW50OEFycmF5OjpjcmVhdGUoV1RGTW92ZShidWZmZXIp
LCAwLCBsZW5ndGgpOwogICAgIEFTU0VSVChjaHVuayk7Ci0gICAgZW5xdWV1ZShzdGF0ZSwgdG9K
Uygmc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBjaHVuay5nZXQoKSkpOwotICAgIEFTU0VSVCghc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpOworICAgIGVucXVldWUoc3RhdGUsIHRvSlMoJnN0YXRlLCBnbG9i
YWxPYmplY3QsIGNodW5rLmdldCgpKSk7CisgICAgQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAyMDU1NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGQ6
OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPiBTY2hlZHVsZWRBY3Rpb246OmNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIERPTVdyYXBwZXJXb3JsZCYgaXNvbGF0ZWRXb3JsZCwgQ29udGVudFNlY3Vy
aXR5UG9saWN5KiBwb2xpY3kpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBKU1ZhbHVlIHYgPSBleGVj
LT5hcmd1bWVudCgwKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBpZiAoZ2V0Q2FsbERh
dGEodiwgY2FsbERhdGEpID09IENhbGxUeXBlOjpOb25lKSB7CiAgICAgICAgIGlmIChwb2xpY3kg
JiYgIXBvbGljeS0+YWxsb3dFdmFsKGV4ZWMpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSB2LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8U2NoZWR1bGVkQWN0aW9uPihuZXcgU2NoZWR1bGVkQWN0
aW9uKHN0cmluZywgaXNvbGF0ZWRXb3JsZCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1
NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDExIEBAIGJvb2wgU2NyaXB0R2xvYmFsT2Jq
ZWN0OjpzZXQoRXhlY1N0YXRlJiAKIHsKICAgICBhdXRvJiB2bSA9IHNjcmlwdFN0YXRlLnZtKCk7
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqanNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc2NyaXB0U3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKICAgICBnbG9i
YWxPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgbmFtZSks
IHRvSlMoJnNjcmlwdFN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSkpOwotICAgIGlmIChzY3Jp
cHRTdGF0ZS5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlw
dFN0YXRlLCBzY3JpcHRTdGF0ZS5leGNlcHRpb24oKSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgeworICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlwdFN0YXRlLCBz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4OSw3ICszODksOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIHNob3VsZFRlcm1pbmF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9leGVjLT5oYWRFeGNlcHRpb24oKTsKKyAgICAg
ICAgVk0mIHZtID0gbV9leGVjLT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIHJldHVybiBzY29wZS5leGNlcHRpb24oKTsKICAgICB9
CiAKICAgICB2b2lkIHRocm93U3RhY2tPdmVyZmxvdygpCkBAIC0yNDQ4LDYgKzI0NTAsOSBAQCBw
cml2YXRlOgogCiBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2Vy
aWFsaXplKCkKIHsKKyAgICBWTSYgdm0gPSBtX2V4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCiAgICAgVmVjdG9yPHVpbnQzMl90LCAxNj4gaW5k
ZXhTdGFjazsKICAgICBWZWN0b3I8SWRlbnRpZmllciwgMTY+IHByb3BlcnR5TmFtZVN0YWNrOwog
ICAgIFZlY3RvcjxKU09iamVjdCosIDMyPiBvdXRwdXRPYmplY3RTdGFjazsKQEAgLTI0NjgsNyAr
MjQ3Myw3IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAg
ICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSlNBcnJh
eSogb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KG1fZXhlYywgMCwgbV9nbG9iYWxPYmpl
Y3QsIGxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChv
dXRBcnJheSk7CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQob3V0QXJyYXkp
OwpAQCAtMjU0Niw3ICsyNTUxLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJp
YWxpemVyOgogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGlt
dW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKICAgICAgICAgICAgIEpTTWFwKiBtYXAg
PSBKU01hcDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFw
U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
bWFwKTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChtYXApOwpAQCAtMjU3
Nyw3ICsyNTgyLDcgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgog
ICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJS
ZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUo
KSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKICAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6
Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJl
KCkpOwotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgICAg
ICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsKICAg
ICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwpAQCAtMjcxMCwxMyArMjcx
NSwxNiBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkCiBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0Nv
bnRleHRSZWYgb3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQogewogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMob3JpZ2luQ29udGV4dCk7
Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdmFsdWUgPSB0b0pTKGV4ZWMsIGFwaVZh
bHVlKTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUg
PSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCB2YWx1ZSwgbnVsbHB0ciwgbnVs
bHB0cik7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAg
ICAgKmV4Y2VwdGlvbiA9IHRvUmVmKGV4ZWMsIGV4ZWMtPmV4Y2VwdGlvbigpLT52YWx1ZSgpKTsK
LSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICpleGNlcHRpb24g
PSB0b1JlZihleGVjLCBzY29wZS5leGNlcHRpb24oKS0+dmFsdWUoKSk7CisgICAgICAgIHNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBB
U1NFUlQoc2VyaWFsaXplZFZhbHVlKTsKQEAgLTI3NDUsMTIgKzI3NTMsMTUgQEAgSlNWYWx1ZSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogSlNWYWx1ZVJlZiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiBkZXN0aW5hdGlvbkNvbnRleHQsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGRlc3Rp
bmF0aW9uQ29udGV4dCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2tlcihleGVjKTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEpTVmFsdWUgdmFsdWUgPSBk
ZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG51bGxwdHIpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpIHsKICAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgICpleGNl
cHRpb24gPSB0b1JlZihleGVjLCBleGVjLT5leGNlcHRpb24oKS0+dmFsdWUoKSk7Ci0gICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAqZXhjZXB0aW9uID0gdG9SZWYo
ZXhlYywgc2NvcGUuZXhjZXB0aW9uKCktPnZhbHVlKCkpOworICAgICAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgQVNTRVJUKHZh
bHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtl
clNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI3LDcgKzEyNyw2IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUo
Y28KICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX3dvcmtlckdsb2JhbFNjb3BlV3JhcHBlci0+Z2xv
YmFsRXhlYygpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAg
IEpTQzo6ZXZhbHVhdGUoZXhlYywgc291cmNlQ29kZS5qc1NvdXJjZUNvZGUoKSwgbV93b3JrZXJH
bG9iYWxTY29wZVdyYXBwZXItPmdsb2JhbFRoaXMoKSwgcmV0dXJuZWRFeGNlcHRpb24pOwogCkBA
IC0xNDIsMTEgKzE0MSw4IEBAIHZvaWQgV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGUo
Y28KICAgICAgICAgaW50IGNvbHVtbk51bWJlciA9IDA7CiAgICAgICAgIFN0cmluZyBzb3VyY2VV
UkwgPSBzb3VyY2VDb2RlLnVybCgpLnN0cmluZygpOwogICAgICAgICBEZXByZWNhdGVkOjpTY3Jp
cHRWYWx1ZSBlcnJvcjsKLSAgICAgICAgaWYgKG1fd29ya2VyR2xvYmFsU2NvcGUtPnNhbml0aXpl
U2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJj
ZVVSTCwgZXJyb3IsIHNvdXJjZUNvZGUuY2FjaGVkU2NyaXB0KCkpKSB7Ci0gICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdl
LmltcGwoKSkpOwotICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSB2bS5leGNlcHRpb24o
KTsKLSAgICAgICAgICAgIHZtLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1fd29ya2VyR2xvYmFsU2NvcGUtPnNhbml0aXplU2NyaXB0RXJyb3IoZXJyb3JNZXNzYWdl
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCwgZXJyb3IsIHNvdXJjZUNvZGUu
Y2FjaGVkU2NyaXB0KCkpKQorICAgICAgICAgICAgcmV0dXJuZWRFeGNlcHRpb24gPSBFeGNlcHRp
b246OmNyZWF0ZSh2bSwgY3JlYXRlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLmltcGwoKSkpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDI0LDcgKzEwMjQsNyBAQCBzdWIgR2VuZXJhdGVEaWN0aW9uYXJ5SW1wbGVtZW50YXRpb25Db250
CiAgICAgICAgIG15ICRuZWVkRXhjZXB0aW9uQ2hlY2sgPSAwOwogICAgICAgICBmb3JlYWNoIG15
ICRtZW1iZXIgKEB7JGRpY3Rpb25hcnktPm1lbWJlcnN9KSB7CiAgICAgICAgICAgICBpZiAoJG5l
ZWRFeGNlcHRpb25DaGVjaykgewotICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gIiAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKVxuIjsKKyAgICAgICAgICAgICAgICAkcmVz
dWx0IC49ICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIjsKICAg
ICAgICAgICAgICAgICAkcmVzdWx0IC49ICIgICAgICAgIHJldHVybiBOdWxsb3B0O1xuIjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICMgRklYTUU6IEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50
IHRoaXMgdG8gc2hhcmUgYSBsb3QgbW9yZSBjb2RlIHdpdGggSlNWYWx1ZVRvTmF0aXZlLgpAQCAt
MzEzMyw3ICszMTMzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpO1xuIik7
CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTtcbiIpIGlmICEkYXR0cmlidXRlLT5pc1N0YXRpYzsKICAgICAgICAgICAgIGlmICghJGF0
dHJpYnV0ZS0+aXNTdGF0aWMpIHsKQEAgLTMyMzEsNyArMzIzMSw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBuYXRpdmVWYWx1ZSA9ICRuYXRpdmVWYWx1
ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIGlmIChV
TkxJS0VMWSghbmF0aXZlVmFsdWUpKSB7XG4iKTsKQEAgLTMyNDIsNyArMzI0Miw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byBuYXRpdmVWYWx1ZSA9ICRu
YXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoJG1heVRocm93RXhjZXB0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIGZhbHNlO1xuIik7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CkBAIC0zOTc5LDcgKzM5NzksNyBAQCBzdWIgR2VuZXJhdGVQYXJh
bWV0ZXJzQ2hlY2sKICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRu
YW1lID0gdG9Bcmd1bWVudHM8VmFyaWFkaWNIZWxwZXI8JHdyYXBwZXJUeXBlLCAkd3JhcHBlZFR5
cGU+Pigqc3RhdGUsICRhcmd1bWVudEluZGV4KTtcbiIpOwogCiAgICAgICAgICAgICBpZiAoSXNO
YXRpdmVUeXBlKCR0eXBlKSkgewotICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAgICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewpAQCAtNDAxOSw3ICs0MDE5LDcgQEAgc3ViIEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgJGRlZmluZU9wdGlvbmFsVmFsdWUgPSBwYXJzZTwk
Y2xhc3NOYW1lPigqc3RhdGUsICR7bmFtZX1WYWx1ZSk7XG4iKTsKLSAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpXG4iKTsKKyAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiRpbmRlbnQgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKVxuIik7CiAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIk
aW5kZW50ICAgIGlmIChVTkxJS0VMWSghJG9wdGlvbmFsVmFsdWUpKVxuIik7CiAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIkaW5kZW50ICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVu
dE11c3RCZUVudW1FcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICRhcmd1bWVudEluZGV4LCBcIiRu
YW1lXCIsIFwiJHZpc2libGVJbnRlcmZhY2VOYW1lXCIsICRxdW90ZWRGdW5jdGlvbk5hbWUsIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8JGNsYXNzTmFtZT4oKSk7XG4iKTsKQEAgLTQwNDIsNyAr
NDA0Miw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoISRjaGVja2VkQXJndW1lbnQuaXNVbmRlZmluZWRP
ck51bGwoKSkge1xuIik7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAg
ICAgICAkbmFtZSA9ICRuYXRpdmVWYWx1ZTtcbiIpOwogICAgICAgICAgICAgICAgIGlmICgkbWF5
VGhyb3dFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSlcbiIpOworICAg
ICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXNo
KEAkb3V0cHV0QXJyYXksICIgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICAgICAgaWYgKFVOTElLRUxZKCEkbmFtZSkpXG4iKTsKQEAgLTQw
ODUsNyArNDA4NSw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvICRuYW1lID0gJHtvdXRlcn0ke25hdGl2
ZVZhbHVlfTtcbiIpOwogICAgICAgICAgICAgICAgICR2YWx1ZSA9ICJXVEZNb3ZlKCRuYW1lKSI7
CiAgICAgICAgICAgICAgICAgaWYgKCRtYXlUaHJvd0V4Y2VwdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSlcbiIpOwogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC00NDY2LDcgKzQ0NjYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uQ2FsbCgpCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iIC4gJGluZGVudCAu
ICJzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTtcbiIpIGlmICRyYWlzZXNFeGNlcHRpb247CiAK
ICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifSwgIlNj
cmlwdFN0YXRlIikpIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
ImlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgJGluZGVudCAuICJpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpXG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50IC4g
IiAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAg
IH0KIApAQCAtNTI5MCw3ICs1MjkwLDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3Bl
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogCiAgICAgQXRvbWljU3Ry
aW5nIGV2ZW50VHlwZSA9IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhzdGF0
ZSktPnRvQXRvbWljU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAke2lu
dGVyZmFjZU5hbWV9SW5pdCBldmVudEluaXQ7CkBAIC01Mjk5LDcgKzUyOTksNyBAQCB0ZW1wbGF0
ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgCiAgICAgaWYgKCFpbml0aWFsaXplclZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgLy8gR2l2ZW4gdGhlIGFib3ZlIHRl
c3QsIHRoaXMgd2lsbCBhbHdheXMgeWllbGQgYW4gb2JqZWN0LgogICAgICAgICBKU09iamVjdCog
aW5pdGlhbGl6ZXJPYmplY3QgPSBpbml0aWFsaXplclZhbHVlLnRvT2JqZWN0KHN0YXRlKTsKLSAg
ICAgICAgQVNTRVJUKCFzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpOworICAgICAgICBBU1NFUlQoIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgZGljdGlvbmFy
eSB3cmFwcGVyIGZyb20gdGhlIGluaXRpYWxpemVyIG9iamVjdC4KICAgICAgICAgSlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnkoc3RhdGUsIGluaXRpYWxpemVyT2JqZWN0KTsKQEAgLTU0NDIsNyArNTQ0
Miw3IEBAIEVORAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNvbnN0cnVjdG9yQ2FsbFdpdGgifSwgIlNjcmlwdFN0YXRlIikpIHsKLSAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKVxuIik7CisgICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwg
IiAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpXG4iKTsKICAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0QWN0aXYKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbWVzc2FnZSA9
IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwucG9zdE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0Q3VzdG8KICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5hbm90aGVyRnVuY3Rpb24oV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9y
LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKIAogICAgIEF0b21pY1N0cmluZyBldmVudFR5cGUg
PSBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCiAgICAgVGVzdEV2ZW50Q29uc3RydWN0
b3JJbml0IGV2ZW50SW5pdDsKQEAgLTk0LDcgKzk0LDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIAogICAgIGlmICghaW5pdGlhbGl6ZXJWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKSB7CiAgICAgICAgIC8vIEdpdmVuIHRoZSBhYm92ZSB0ZXN0LCB0aGlzIHdpbGwg
YWx3YXlzIHlpZWxkIGFuIG9iamVjdC4KICAgICAgICAgSlNPYmplY3QqIGluaXRpYWxpemVyT2Jq
ZWN0ID0gaW5pdGlhbGl6ZXJWYWx1ZS50b09iamVjdChzdGF0ZSk7Ci0gICAgICAgIEFTU0VSVCgh
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKTsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIGRpY3Rpb25hcnkgd3JhcHBlciBmcm9t
IHRoZSBpbml0aWFsaXplciBvYmplY3QuCiAgICAgICAgIEpTRGljdGlvbmFyeSBkaWN0aW9uYXJ5
KHN0YXRlLCBpbml0aWFsaXplck9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5j
cHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RFdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsy
MTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEV2ZW50CiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBpbXBsLml0ZW0oV1RGTW92ZShpbmRleCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsOCBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFJlZ3VsYXJBdHRyaWJ1CiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yODUsNyAr
Mjg2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RSZWd1bGFyQXR0cmlidQogICAgIH0K
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZl
VmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRSZWd1bGFyQXR0cmlidXRl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5Niw3ICsyOTcs
OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0FuZFByaXZhCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RHbG9iYWxPYmplY3Qq
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2JhbE9iamVjdCo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMDQsNyArMzA2LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQdWJsaWNBbmRQcml2
YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRQdWJsaWNB
bmRQcml2YXRlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTMxNiw3ICszMTgsOCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFB1YmxpY0Fu
ZFByaXZhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RHbG9iYWxPYmplY3QqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEdsb2Jh
bE9iamVjdCo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC0zMjQsNyArMzI3LDcgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RQdWJsaWNBbmRQcml2YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgaW1wbC5zZXRQdWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzM3LDcgKzM0MCw4IEBAIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGkKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEdsb2JhbE9iamVjdCogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0R2xvYmFsT2JqZWN0Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM0NSw3ICsz
NDksNyBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEVuYWJsZWRBdFJ1bnRpbWVB
dHRyaWJ1dGUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzcy
LDcgKzM3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0R2xvYmEKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZWd1bGFy
T3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTM5Myw3ICszOTcsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQ
YXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlvbihXVEZNb3ZlKHRlc3RQ
YXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00
MTYsNyArNDIwLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYQog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaW1wbC5lbmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVz
dFBhcmFtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMxLDEwICsyMzEsMTAgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIAogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIGF1dG8gc3RyMSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gc3RyMiA9IHN0YXRlLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gQVNDSUlMaXRlcmFsKCJkZWZhdWx0U3RyaW5nIikg
OiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gY2FzdGVk
VGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmIChVTkxJS0VMWSghY29udGV4
dCkpCkBAIC02NjMsOSArNjYzLDEwIEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlQ29uc3RydWN0
b3JJbXBsZW0KIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgVGVzdEludGVyZmFjZTo6c2V0SW1wbGVtZW50c1N0YXRpY0F0dHIoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjc4LDcgKzY3OSw4IEBA
IGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlSW1wbGVtZW50c1N0cjIoRXgKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTY4Niw3ICs2
ODgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIyKEV4CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltcGxlbWVudHNTdHIyKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5OSw3ICs3MDEsOCBA
QCBib29sIHNldEpTVGVzdEludGVyZmFjZUltcGxlbWVudHNTdHIzKEV4CiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03MTYsNyAr
NzE5LDggQEAgYm9vbCBzZXRKU1Rlc3RJbnRlcmZhY2VJbXBsZW1lbnRzTm9kZShFeAogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNl
KiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
NzM5LDkgKzc0MywxMCBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yU3VwcGxl
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmco
c3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnNldFN1cHBsZW1lbnRhbFN0YXRpY0F0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNzU0LDcgKzc1
OSw4IEBAIGJvb2wgc2V0SlNUZXN0SW50ZXJmYWNlU3VwcGxlbWVudGFsU3RyMigKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdEludGVyZmFjZSog
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTc2
Miw3ICs3NjgsNyBAQCBib29sIHNldEpTVGVzdEludGVyZmFjZVN1cHBsZW1lbnRhbFN0cjIoCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBXZWJDb3JlOjpUZXN0U3VwcGxl
bWVudGFsOjpzZXRTdXBwbGVtZW50YWxTdHIyKGltcGwsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc3NSw3ICs3ODEsOCBAQCBib29sIHNldEpTVGVzdEludGVy
ZmFjZVN1cHBsZW1lbnRhbFN0cjMoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdEludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC03OTIsNyArNzk5LDggQEAgYm9vbCBzZXRKU1Rl
c3RJbnRlcmZhY2VTdXBwbGVtZW50YWxOb2RlKAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtODUyLDcgKzg2MCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNvbnRleHQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBz
dHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5h
cmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtOTMwLDcgKzkzOCw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXIKICAgICBpZiAoIWNv
bnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDU1
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SlNC
dWlsdGluQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDggQEAg
Ym9vbCBzZXRKU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvclRlc3RBdAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0SlNCdWlsdGluQ29uc3RydWN0
b3IqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTMgKzkxLDEz
IEBAIHRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCAKICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRvIHN0
cjEgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBhdXRvIHN0cjIgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/
IEFTQ0lJTGl0ZXJhbCgiZGVmYXVsdFN0cmluZyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHIz
ID0gc3RhdGUtPmFyZ3VtZW50KDIpLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgyKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZUZvckpTQ29u
c3RydWN0b3IoKmNhc3RlZFRoaXMtPmRvY3VtZW50KCksIFdURk1vdmUoc3RyMSksIFdURk1vdmUo
c3RyMiksIFdURk1vdmUoc3RyMyksIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3
ICsyMDcsOCBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3ROb2RlKiBj
YXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3ROb2RlKj4oSlNWYWx1ZTo6ZGVjb2RlKHRo
aXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTIxNSw3ICsy
MTYsNyBAQCBib29sIHNldEpTVGVzdE5vZGVOYW1lKEV4ZWNTdGF0ZSogc3RhdGUsCiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRp
dmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROb25kZXRl
cm1pbmlzdGljLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE5vbmRldGVybWluaXN0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjEsNyArMzYxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9u
ZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAg
SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjksNyArMzcwLDcgQEAgYm9vbCBzZXRKU1Rl
c3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljV3JpdGVhYmxlQXR0cihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODAsNyArMzgxLDggQEAgYm9v
bCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2Fz
dGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zODgsNyArMzkwLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJt
aQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRl
cm1pbmlzdGljRXhjZXB0aW9uQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC0zOTksNyArNDAxLDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAg
ICAgSlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MDcsNyArNDEwLDcgQEAgYm9vbCBzZXRK
U1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dU
RlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROb25kZXRlcm1pbmlzdGljR2V0dGVyRXhjZXB0aW9uQXR0
cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTgsNyArNDIx
LDggQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGljTm9uZGV0ZXJtaQogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0Tm9uZGV0ZXJtaW5p
c3RpYyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0Tm9uZGV0ZXJtaW5pc3RpYyo+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC00MjcsNyArNDMxLDcgQEAgYm9vbCBzZXRKU1Rlc3ROb25kZXRlcm1pbmlzdGlj
Tm9uZGV0ZXJtaQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldE5vbmRldGVybWluaXN0aWNTZXR0ZXJFeGNlcHRpb25BdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyNSw5NyArNTI1LDk3IEBAIHRlbXBsYXRlPD4gT3B0aW9uYWw8VGVzdE9iajo6RGljdGlvbmFy
eT4KICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgfQogICAgIGF1dG8gZW51bWVyYXRpb25W
YWx1ZVdpdGhvdXREZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
ImVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gZW51bWVyYXRpb25WYWx1
ZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwg
b2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1l
cmF0aW9uVmFsdWVXaXRoRGVmYXVsdCIpKSwgVGVzdE9iajo6RW51bVR5cGU6OkVudW1WYWx1ZTEp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAg
ICBhdXRvIGVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJpbmdEZWZhdWx0ID0gY29udmVydE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWVXaXRoRW1wdHlTdHJp
bmdEZWZhdWx0IikpLCBUZXN0T2JqOjpFbnVtVHlwZTo6RW1wdHlTdHJpbmcpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHN0cmlu
Z1dpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPFN0cmluZz4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzdHJpbmdXaXRoRGVmYXVs
dCIpKSwgImRlZmF1bHRTdHJpbmciKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzdHJpbmdXaXRob3V0RGVmYXVsdCA9IGNvbnZl
cnRPcHRpb25hbDxTdHJpbmc+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnN0YXRlLCAic3RyaW5nV2l0aG91dERlZmF1bHQiKSkpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xl
YW5XaXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQo
JnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRoRGVmYXVs
dCIpKSwgZmFsc2UpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25h
bDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gc2VxdWVuY2VPZlN0cmlu
Z3MgPSBjb252ZXJ0T3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAic2VxdWVuY2VPZlN0cmluZ3Mi
KSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsK
ICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGUgPSBjb252ZXJ0T3B0aW9uYWw8ZG91YmxlPihzdGF0
ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJl
c3RyaWN0ZWREb3VibGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpObyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0
cmljdGVkRG91YmxlID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9iamVjdC0+Z2V0
KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWREb3Vi
bGUiKSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHJlc3RyaWN0ZWREb3VibGVX
aXRoRGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxkb3VibGU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZERvdWJsZVdp
dGhEZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8sIDApOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVucmVzdHJp
Y3RlZERvdWJsZVdpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGRvdWJsZT4oc3RhdGUsIG9i
amVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3Ry
aWN0ZWREb3VibGVXaXRoRGVmYXVsdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6OlllcywgMCk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAg
IGF1dG8gcmVzdHJpY3RlZEZsb2F0ID0gY29udmVydE9wdGlvbmFsPGZsb2F0PihzdGF0ZSwgb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgInJlc3RyaWN0
ZWRGbG9hdCIpKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byB1bnJlc3RyaWN0ZWRG
bG9hdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdCIpKSwgU2hv
dWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gcmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQg
PSBjb252ZXJ0T3B0aW9uYWw8ZmxvYXQ+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAicmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQiKSks
IFNob3VsZEFsbG93Tm9uRmluaXRlOjpObywgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gdW5yZXN0cmljdGVkRmxvYXRXaXRo
RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxmbG9hdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0
ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJ1bnJlc3RyaWN0ZWRGbG9hdFdpdGhE
ZWZhdWx0IikpLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6WWVzLCAwKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBzbWFsbEludGVn
ZXJDbGFtcGVkID0gY29udmVydE9wdGlvbmFsPGludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZz
dGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJzbWFsbEludGVnZXJDbGFtcGVk
IikpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBO
dWxsb3B0OwogICAgIGF1dG8gc21hbGxJbnRlZ2VyV2l0aERlZmF1bHQgPSBjb252ZXJ0T3B0aW9u
YWw8aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInNtYWxsSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byBzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UgPSBjb252ZXJ0T3B0aW9u
YWw8dWludDhfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UiKSksIEVuZm9y
Y2VSYW5nZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBOdWxs
b3B0OwogICAgIGF1dG8gc21hbGxVbnNpZ25lZEludGVnZXJXaXRoRGVmYXVsdCA9IGNvbnZlcnRP
cHRpb25hbDx1aW50OF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZzdGF0ZSwgInNtYWxsVW5zaWduZWRJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5v
cm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJf
dD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJpbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBpbnRlZ2VyV2l0aERlZmF1
bHQgPSBjb252ZXJ0T3B0aW9uYWw8aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJpbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5v
cm1hbENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkSW50ZWdlciA9IGNvbnZlcnRPcHRpb25h
bDx1aW50MzJfdD4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmc3RhdGUsICJ1bnNpZ25lZEludGVnZXIiKSksIE5vcm1hbENvbnZlcnNpb24pOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRv
IHVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPHVpbnQzMl90Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InVuc2lnbmVkSW50ZWdlcldpdGhEZWZhdWx0IikpLCBOb3JtYWxDb252ZXJzaW9uLCAwKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0
byBsYXJnZUludGVnZXIgPSBjb252ZXJ0T3B0aW9uYWw8aW50NjRfdD4oc3RhdGUsIG9iamVjdC0+
Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3RhdGUsICJsYXJnZUludGVnZXIi
KSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGxhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29u
dmVydE9wdGlvbmFsPGludDY0X3Q+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAibGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1h
bENvbnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICBhdXRvIHVuc2lnbmVkTGFyZ2VJbnRlZ2VyID0gY29udmVydE9wdGlv
bmFsPHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyIikpLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byB1bnNpZ25lZExhcmdlSW50ZWdlcldpdGhEZWZhdWx0ID0gY29udmVydE9wdGlvbmFs
PHVpbnQ2NF90PihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgInVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQiKSksIE5vcm1hbENv
bnZlcnNpb24sIDApOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
TnVsbG9wdDsKICAgICBhdXRvKiBudWxsYWJsZU5vZGUgPSBjb252ZXJ0V3JhcHBlclR5cGU8Tm9k
ZSwgSlNOb2RlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZzdGF0ZSwgIm51bGxhYmxlTm9kZSIpKSwgSXNOdWxsYWJsZTo6WWVzKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBhbnlW
YWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpTVmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgm
c3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYW55VmFsdWUiKSksIGpzVW5k
ZWZpbmVkKCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVs
bG9wdDsKICAgICBhdXRvIGFueVR5cGVkZWZWYWx1ZSA9IGNvbnZlcnRPcHRpb25hbDxKU0M6OkpT
VmFsdWU+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnN0YXRlLCAiYW55VHlwZWRlZlZhbHVlIikpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byBkaWN0aW9u
YXJ5TWVtYmVyID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6RGljdGlvbmFyeVRoYXRTaG91
bGRUb2xlcmF0ZU51bGw+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnN0YXRlLCAiZGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RP
Ymo6OkRpY3Rpb25hcnkgeyBXVEZNb3ZlKGVudW1lcmF0aW9uVmFsdWVXaXRob3V0RGVmYXVsdCks
IFdURk1vdmUoZW51bWVyYXRpb25WYWx1ZVdpdGhEZWZhdWx0KSwgV1RGTW92ZShlbnVtZXJhdGlv
blZhbHVlV2l0aEVtcHR5U3RyaW5nRGVmYXVsdCksIFdURk1vdmUoc3RyaW5nV2l0aERlZmF1bHQp
LCBXVEZNb3ZlKHN0cmluZ1dpdGhvdXREZWZhdWx0KSwgV1RGTW92ZShib29sZWFuV2l0aERlZmF1
bHQpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksIFdURk1vdmUoc2VxdWVuY2VPZlN0
cmluZ3MpLCBXVEZNb3ZlKHJlc3RyaWN0ZWREb3VibGUpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZERv
dWJsZSksIFdURk1vdmUocmVzdHJpY3RlZERvdWJsZVdpdGhEZWZhdWx0KSwgV1RGTW92ZSh1bnJl
c3RyaWN0ZWREb3VibGVXaXRoRGVmYXVsdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0KSwgV1RG
TW92ZSh1bnJlc3RyaWN0ZWRGbG9hdCksIFdURk1vdmUocmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1
bHQpLCBXVEZNb3ZlKHVucmVzdHJpY3RlZEZsb2F0V2l0aERlZmF1bHQpLCBXVEZNb3ZlKHNtYWxs
SW50ZWdlckNsYW1wZWQpLCBXVEZNb3ZlKHNtYWxsSW50ZWdlcldpdGhEZWZhdWx0KSwgV1RGTW92
ZShzbWFsbFVuc2lnbmVkSW50ZWdlckVuZm9yY2VkUmFuZ2UpLCBXVEZNb3ZlKHNtYWxsVW5zaWdu
ZWRJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKGludGVnZXIpLCBXVEZNb3ZlKGludGVnZXJX
aXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRJbnRlZ2VyKSwgV1RGTW92ZSh1bnNpZ25lZElu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUobGFyZ2VJbnRlZ2VyKSwgV1RGTW92ZShsYXJnZUlu
dGVnZXJXaXRoRGVmYXVsdCksIFdURk1vdmUodW5zaWduZWRMYXJnZUludGVnZXIpLCBXVEZNb3Zl
KHVuc2lnbmVkTGFyZ2VJbnRlZ2VyV2l0aERlZmF1bHQpLCBXVEZNb3ZlKG51bGxhYmxlTm9kZSks
IFdURk1vdmUoYW55VmFsdWUpLCBXVEZNb3ZlKGFueVR5cGVkZWZWYWx1ZSksIGRpY3Rpb25hcnlN
ZW1iZXIudmFsdWUoKSB9OwpAQCAtNjMxLDEzICs2MzEsMTMgQEAgdGVtcGxhdGU8PiBPcHRpb25h
bDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAg
ICAgYXV0byByZXF1aXJlZEVudW1lcmF0aW9uVmFsdWUgPSBjb252ZXJ0PFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgInJlcXVpcmVkRW51bWVyYXRpb25WYWx1ZSIpKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBOdWxsb3B0OwogICAgIGF1dG8gYm9vbGVhbldpdGhvdXRE
ZWZhdWx0ID0gY29udmVydE9wdGlvbmFsPGJvb2w+KHN0YXRlLCBvYmplY3QtPmdldCgmc3RhdGUs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnN0YXRlLCAiYm9vbGVhbldpdGhvdXREZWZhdWx0Iikp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAg
ICAgYXV0byogbm9uTnVsbGFibGVOb2RlID0gY29udmVydFdyYXBwZXJUeXBlPE5vZGUsIEpTTm9k
ZT4oc3RhdGUsIG9iamVjdC0+Z2V0KCZzdGF0ZSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmc3Rh
dGUsICJub25OdWxsYWJsZU5vZGUiKSksIElzTnVsbGFibGU6Ok5vKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUuaGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CiAgICAgYXV0byByZXF1aXJlZERp
Y3Rpb25hcnlNZW1iZXIgPSBjb252ZXJ0RGljdGlvbmFyeTxUZXN0T2JqOjpEaWN0aW9uYXJ5Pihz
dGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwg
InJlcXVpcmVkRGljdGlvbmFyeU1lbWJlciIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rp
b25hcnlUaGF0U2hvdWxkTm90VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShyZXF1aXJlZEVudW1lcmF0
aW9uVmFsdWUpLCBXVEZNb3ZlKGJvb2xlYW5XaXRob3V0RGVmYXVsdCksICpub25OdWxsYWJsZU5v
ZGUsIHJlcXVpcmVkRGljdGlvbmFyeU1lbWJlci52YWx1ZSgpIH07CkBAIC02NTUsNyArNjU1LDcg
QEAgdGVtcGxhdGU8PiBPcHRpb25hbDxUZXN0T2JqOjpEaWN0aW9uYXJ5VAogICAgICAgICByZXR1
cm4gTnVsbG9wdDsKICAgICB9CiAgICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9w
dGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJv
b2xlYW5XaXRob3V0RGVmYXVsdCA9IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0
LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRo
b3V0RGVmYXVsdCIpKSk7CiAgICAgcmV0dXJuIFRlc3RPYmo6OkRpY3Rpb25hcnlUaGF0U2hvdWxk
VG9sZXJhdGVOdWxsIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVlKSwgV1RGTW92ZShib29sZWFu
V2l0aG91dERlZmF1bHQpIH07CkBAIC02NzMsNyArNjczLDcgQEAgdGVtcGxhdGU8PiBPcHRpb25h
bDxBbHRlcm5hdGVEaWN0aW9uYXJ5TgogICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICB9CiAg
ICAgYXV0byBlbnVtZXJhdGlvblZhbHVlID0gY29udmVydE9wdGlvbmFsPFRlc3RPYmo6OkVudW1U
eXBlPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZz
dGF0ZSwgImVudW1lcmF0aW9uVmFsdWUiKSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKICAgICBhdXRvIGJvb2xlYW5XaXRob3V0RGVmYXVsdCA9
IGNvbnZlcnRPcHRpb25hbDxib29sPihzdGF0ZSwgb2JqZWN0LT5nZXQoJnN0YXRlLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZzdGF0ZSwgImJvb2xlYW5XaXRob3V0RGVmYXVsdCIpKSk7CiAgICAg
cmV0dXJuIEFsdGVybmF0ZURpY3Rpb25hcnlOYW1lIHsgV1RGTW92ZShlbnVtZXJhdGlvblZhbHVl
KSwgV1RGTW92ZShib29sZWFuV2l0aG91dERlZmF1bHQpIH07CkBAIC0zMDkwLDkgKzMwOTAsMTAg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25zdHJ1Y3RvclN0YXRpY1N0cmluZwogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBUZXN0T2Jq
OjpzZXRTdGF0aWNTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTMxMDMsNyArMzEwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVGVzdFN1Yk9iakVu
YWJsZWRCeVNldHQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTMxMTgsNyArMzEyMCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0
YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTMxMjYsNyArMzEyOSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW51bUF0dHIoRXhlY1N0YXRl
KiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gcGFyc2U8VGVzdE9iajo6RW51bVR5cGU+KCpzdGF0ZSwgdmFs
dWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIGlmIChVTkxJS0VMWSghbmF0aXZlVmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0zMTM5LDcgKzMxNDIsOCBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSog
c3RhCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0z
MTQ3LDcgKzMxNTEsNyBAQCBib29sIHNldEpTVGVzdE9iakJ5dGVBdHRyKEV4ZWNTdGF0ZSogc3Rh
CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0
byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50OF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEJ5dGVBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTMxNTgsNyArMzE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRy
KEV4ZWNTdGF0ZSogc3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTMxNjYsNyArMzE3MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqT2N0ZXRBdHRyKEV4
ZWNTdGF0ZSogc3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQo
KTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDx1aW50OF90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE9jdGV0QXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMTc3LDcgKzMxODIsOCBAQCBib29sIHNldEpTVGVz
dE9ialNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zMTg1LDcgKzMxOTEsNyBAQCBib29sIHNldEpTVGVzdE9i
alNob3J0QXR0cihFeGVjU3RhdGUqIHN0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRU
aGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MTZfdD4o
KnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTaG9ydEF0dHIoV1RGTW92
ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzE5Niw3ICszMjAyLDggQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3Bl
KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIwNCw3ICszMjExLDcgQEAgYm9v
bCBzZXRKU1Rlc3RPYmpDbGFtcGVkU2hvcnRBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252
ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIENsYW1wKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENsYW1wZWRTaG9ydEF0
dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzIxNSw3ICsz
MjIyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzIyMyw3ICszMjMx
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoRQogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDE2X3Q+KCpzdGF0ZSwgdmFsdWUsIEVuZm9yY2VSYW5nZSk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5z
ZXRFbmZvcmNlUmFuZ2VTaG9ydEF0dHIoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwpAQCAtMzIzNCw3ICszMjQyLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNo
b3J0QXR0cihFeGVjUwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7
CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtMzI0Miw3ICszMjUxLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0
QXR0cihFeGVjUwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PHVpbnQxNl90Pigqc3RhdGUsIHZhbHVl
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFVuc2lnbmVkU2hvcnRBdHRyKFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNTMsNyArMzI2Miw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyNjEsNyArMzI3MSw3IEBAIGJvb2wgc2V0
SlNUZXN0T2JqTG9uZ0F0dHIoRXhlY1N0YXRlKiBzdGEKICAgICB9CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxp
bnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldExvbmdBdHRy
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyNzIsNyArMzI4
Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBW
TSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVk
VGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTMyODAsNyArMzI5MSw3
IEBAIGJvb2wgc2V0SlNUZXN0T2JqTG9uZ0xvbmdBdHRyKEV4ZWNTdGF0ZSoKICAgICB9CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVl
ID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBs
LnNldExvbmdMb25nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0zMjkxLDcgKzMzMDIsOCBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdB
dHRyKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC0zMjk5LDcgKzMzMTEsNyBAQCBib29sIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdBdHRy
KEV4CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1h
bENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRMb25nTG9uZ0F0dHIoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzMxMCw3ICszMzIyLDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzMxOCw3ICszMzMxLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdBdHRyKEV4ZWNTdGF0ZSogcwogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTMzMjksNyArMzM0Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2
c3RyaW5nQXR0cihFeGVjU3RhdGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTMzMzcsNyArMzM1MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqVXN2c3Ry
aW5nQXR0cihFeGVjU3RhdGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwg
dmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGltcGwuc2V0VXN2c3RyaW5nQXR0cihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC0zMzQ4LDcgKzMzNjIsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3RP
YmpBdHRyKEV4ZWNTdGF0ZSogCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0
byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1Zh
bHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9i
aio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3Rl
ZFRoaXMpKSB7CkBAIC0zMzY5LDcgKzMzODQsOCBAQCBib29sIHNldEpTVGVzdE9ialRlc3ROdWxs
YWJsZU9iakF0dHIoRXhlCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zMzkzLDcgKzM0MDksOCBAQCBib29sIHNldEpTVGVzdE9iakxlbmllbnRUZXN0
T2JqQXR0cihFeGVjCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsK
ICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMp
KSB7CkBAIC0zNDE0LDcgKzM0MzEsOCBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVh
dGluZ051bGxBCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zNDIyLDcgKzM0NDAsNyBAQCBib29sIHNldEpTVGVzdE9ialN0cmluZ0F0dHJUcmVhdGlu
Z051bGxBCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAg
ICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0
cmluZyhXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDMzLDcg
KzM0NTEsOCBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiB7CiAg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDQxLDcgKzM0
NjAsNyBAQCBib29sIHNldEpTVGVzdE9ialVzdnN0cmluZ0F0dHJUcmVhdGluZ051CiAgICAgfQog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVW
YWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmdUcmVhdGluZ051bGxBc0VtcHR5U3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW1wbC5zZXRVc3ZzdHJpbmdBdHRyVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDUyLDcgKzM0NzEsOCBA
QCBib29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNDYwLDcgKzM0ODAsNyBAQCBi
b29sIHNldEpTVGVzdE9iakltcGxlbWVudGF0aW9uRW51bUF0dHIoCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHBh
cnNlPEFsdGVybmF0ZUVudW1OYW1lPigqc3RhdGUsIHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2
ZVZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ3Myw3ICszNDkzLDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzQ5NCw3ICszNTE1LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzUwMiw3ICszNTI0LDcgQEAgYm9vbCBzZXRK
U1Rlc3RPYmpDcmVhdGUoRXhlY1N0YXRlKiBzdGF0ZQogICAgIH0KICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jv
b2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIGltcGwuc2V0Q3JlYXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM1MTMsNyArMzUzNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVj
dGVkU3RyaW5nQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTM1MjEsNyArMzU0NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6
OnJlZmxlY3RlZHN0cmluZ2F0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNTMyLDcgKzM1NTUsOCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3Rl
ZFVTVlN0cmluZ0F0dHIoCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+
KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRo
aXMpKSB7CkBAIC0zNTQwLDcgKzM1NjQsNyBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFVT
VlN0cmluZ0F0dHIoCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVk
KCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5h
bWVzOjpyZWZsZWN0ZWR1c3ZzdHJpbmdhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMzU1MSw3ICszNTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpS
ZWZsZWN0ZWRJbnRlZ3JhbEF0dHIoRQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRo
aXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rl
c3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewpAQCAtMzU1OSw3ICszNTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZs
ZWN0ZWRJbnRlZ3JhbEF0dHIoRQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0SW50ZWdyYWxBdHRyaWJ1dGUoV2Vi
Q29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRpbnRlZ3JhbGF0dHJBdHRyLCBXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTcwLDcgKzM1OTUsOCBAQCBib29sIHNl
dEpTVGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFt
aWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNTc4LDcgKzM2MDQsNyBAQCBib29sIHNldEpT
VGVzdE9ialJlZmxlY3RlZFVuc2lnbmVkSW50ZWdyCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8dWlu
dDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0VW5zaWduZWRJ
bnRlZ3JhbEF0dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVuc2lnbmVkaW50
ZWdyYWxhdHRyQXR0ciwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzU4OSw3ICszNjE1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0
cihFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
MzU5Nyw3ICszNjI0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRCb29sZWFuQXR0cihF
eAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b0Jvb2xlYW4oc3RhdGUpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Qm9vbGVhbkF0
dHJpYnV0ZShXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZGJvb2xlYW5hdHRyQXR0ciwgV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwOCw3ICszNjM1LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzYxNiw3ICszNjQ0LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRVUkxBdHRyKEV4ZWNTdAogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2
YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVmbGVjdGVkdXJsYXR0ckF0dHIsIFdURk1vdmUo
bmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2MjcsNyArMzY1NSw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2MzUsNyArMzY2NCw3IEBAIGJvb2wg
c2V0SlNUZXN0T2JqUmVmbGVjdGVkVVNWVVJMQXR0cihFeGUKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gdmFsdWVU
b1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihXZWJDb3JlOjpIVE1MTmFtZXM6OnJlZmxlY3RlZHVzdnVybGF0dHJBdHRyLCBXVEZN
b3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNjQ2LDcgKzM2NzUsOCBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiB7CiAgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
ICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMg
PSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjU0LDcgKzM2ODQsNyBAQCBi
b29sIHNldEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIoRXhlCiAgICAgfQogICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZh
bHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50U3RyaW5nQXR0ckF0dHIsIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM2NjUsNyArMzY5NSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2NzMsNyArMzcwNCw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tSW50ZWdyYWwKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNl
dEludGVncmFsQXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudEludGVn
cmFsQXR0ckF0dHIsIFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM2ODQsNyArMzcxNSw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVh
bkEKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM2
OTIsNyArMzcyNCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqUmVmbGVjdGVkQ3VzdG9tQm9vbGVhbkEK
ICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gdmFsdWUudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFko
c3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEJvb2xlYW5BdHRy
aWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50Qm9vbGVhbkF0dHJBdHRyLCBX
VEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzAzLDcgKzM3MzUs
OCBAQCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzExLDcgKzM3NDQsNyBA
QCBib29sIHNldEpTVGVzdE9ialJlZmxlY3RlZEN1c3RvbVVSTEF0dHIoCiAgICAgfQogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9
IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpjdXN0b21Db250ZW50VVJMQXR0ckF0dHIsIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3MjMsNyArMzc1Niw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM3MzEsNyArMzc2NSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqRW5hYmxlZEF0UnVudGltZUF0dHJpYnUKICAgICB9CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0g
dmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0
ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzQzLDcgKzM3
NzcsOCBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiB7CiAgICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFs
dWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNzUxLDcgKzM3ODYs
NyBAQCBib29sIHNldEpTVGVzdE9ialR5cGVkQXJyYXlBdHRyKEV4ZWNTdGF0CiAgICAgfQogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHRvRmxvYXQzMkFycmF5KHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoVU5MSUtFTFkoIW5hdGl2ZVZhbHVlKSkgewog
ICAgICAgICB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsICJUZXN0
T2JqZWN0IiwgInR5cGVkQXJyYXlBdHRyIiwgIkZsb2F0MzJBcnJheSIpOwpAQCAtMzc2Niw3ICsz
ODAxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogewogICAg
IFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzc3NCw3ICszODEw
LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlt
cGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb24oV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtMzc4NSw3ICszODIxLDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRy
V2l0aEdldHRlckV4Y2VwdGlvbgogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJB
TSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
VmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNW
YWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RP
YmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewpAQCAtMzc5Myw3ICszODMwLDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyV2l0
aEdldHRlckV4Y2VwdGlvbgogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwg
dmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0QXR0cldpdGhHZXR0ZXJFeGNlcHRpb25X
aXRoTWVzc2FnZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
ODA0LDcgKzM4NDEsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODEz
LDcgKzM4NTEsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uCiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9u
KFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBl
Yyk7CkBAIC0zODI1LDcgKzM4NjMsOCBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVy
RXhjZXB0aW9uCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAg
ICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7
CkBAIC0zODM0LDcgKzM4NzMsNyBAQCBib29sIHNldEpTVGVzdE9iakF0dHJXaXRoU2V0dGVyRXhj
ZXB0aW9uCiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8
aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0
aFNldHRlckV4Y2VwdGlvbldpdGhNZXNzYWdlKFdURk1vdmUobmF0aXZlVmFsdWUpLCBlYyk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC0zODQ2LDcgKzM4ODUsOCBAQCBib29s
IHNldEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiB7CiAgICAgVk0mIHZtID0gc3Rh
dGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwor
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBV
TlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zODU0LDcgKzM4OTQsNyBAQCBib29sIHNl
dEpTVGVzdE9ialN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjCiAgICAgfQogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IHZhbHVlLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRoR2V0dGVyRXhjZXB0aW9uKFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4NjUsNyArMzkwNSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM4NzQsNyArMzkxNSw3IEBA
IGJvb2wgc2V0SlNUZXN0T2JqU3RyaW5nQXR0cldpdGhTZXR0ZXJFeGMKICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJp
bmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSwgZWMpOwogICAg
IHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAtMzg4Niw3ICszOTI3LDggQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpDdXN0b21BdHRyKEV4ZWNTdGF0ZSogcwogewogICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5h
bWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYg
KFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkwMSw3ICszOTQzLDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpPbmZvbyhFeGVjU3RhdGUqIHN0YXRlLAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkxNiw3ICszOTU5LDggQEAgYm9vbCBzZXRKU1Rl
c3RPYmpPbndlYmtpdGZvbyhFeGVjU3RhdGUqIAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgp
OwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BB
UkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2Fz
dDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElL
RUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzMSw3ICszOTc1LDggQEAgYm9vbCBzZXRKU1Rlc3RP
YmpXaXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNF
RF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFN
KHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxK
U1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzkzOSw3ICszOTg0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpX
aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpz
dGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0V2l0aFNjcmlwdFN0YXRlQXR0
cmlidXRlKCpzdGF0ZSwgV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpA
QCAtMzk1MCw3ICszOTk1LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0
ZXJDYQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAt
Mzk1OCw3ICs0MDA0LDcgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoQ2FsbFdpdGhBbmRTZXR0ZXJD
YQogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1
dG8gbmF0aXZlVmFsdWUgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGltcGwuc2V0V2l0aENhbGxXaXRoQW5kU2V0dGVyQ2FsbFdpdGhBdHRyaWJ1dGUo
KnN0YXRlLCBhY3RpdmVET01XaW5kb3coc3RhdGUpLCBmaXJzdERPTVdpbmRvdyhzdGF0ZSksIFdU
Rk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM5NjksNyArNDAxNSw4
IEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYg
dm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTM5OTMsNyArNDA0MCw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdFN0YXRlQXR0cmlidXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMTQsNyArNDA2Miw4IEBAIGJv
b2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpz
RHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAg
IGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwMzgsNyArNDA4Nyw4IEBAIGJvb2wg
c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwNjIsNyArNDExMiw4IEBAIGJvb2wgc2V0
SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAg
SlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNF
RF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1p
Y0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChV
TkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQwODYsNyArNDEzNyw4IEBAIGJvb2wgc2V0SlNU
ZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0o
KTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nh
c3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJ
S0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMTAsNyArNDE2Miw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqV2l0aFNjcmlwdEFyZ3VtZW50c0FuZEMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQxMzIsNyArNDE4NSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyMShFeGVjU3QKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQxNDAsNyArNDE5NCw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyMShFeGVjU3QKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldENvbmRpdGlvbmFsQXR0cjEoV1RG
TW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDE1Myw3ICs0MjA3LDgg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDE2MSw3ICs0MjE2LDcgQEAg
Ym9vbCBzZXRKU1Rlc3RPYmpDb25kaXRpb25hbEF0dHIyKEV4ZWNTdAogICAgIH0KICAgICBhdXRv
JiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBj
b252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgdmFsdWUsIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0
Q29uZGl0aW9uYWxBdHRyMihXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC00MTc0LDcgKzQyMjksOCBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMo
RXhlY1N0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAg
VU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBK
U1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6
OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBA
IC00MTgyLDcgKzQyMzgsNyBAQCBib29sIHNldEpTVGVzdE9iakNvbmRpdGlvbmFsQXR0cjMoRXhl
Y1N0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRDb25kaXRpb25hbEF0dHIzKFdURk1vdmUobmF0aXZlVmFsdWUp
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxOTUsNyArNDI1MSw4IEBAIGJvb2wgc2V0SlNUZXN0
T2JqQ29uZGl0aW9uYWxBdHRyNENvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsK
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJB
TSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8
SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VM
WSghY2FzdGVkVGhpcykpIHsKQEAgLTQyMTIsNyArNDI2OSw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
Q29uZGl0aW9uYWxBdHRyNUNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQyMjksNyArNDI4Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQ29u
ZGl0aW9uYWxBdHRyNkNvbnN0cnUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlz
VmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2Fz
dGVkVGhpcykpIHsKQEAgLTQyNDUsNyArNDMwNCw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqQW55QXR0
cmlidXRlKEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFs
dWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2Jq
Kj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVk
VGhpcykpIHsKQEAgLTQyNjIsNyArNDMyMiw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqTXV0YWJsZVBv
aW50KEV4ZWNTdGF0ZSoKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUp
OwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4o
SlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhp
cykpIHsKQEAgLTQyODYsNyArNDM0Nyw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqSW1tdXRhYmxlUG9p
bnQoRXhlY1N0YXQKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
KyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwog
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNW
YWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykp
IHsKQEAgLTQzMTAsNyArNDM3Miw4IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVj
U3RhdGUqIHMKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQzMTgsNyArNDM4MSw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqU3RyYXdiZXJyeShFeGVjU3Rh
dGUqIHMKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAg
ICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3Jt
YWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbXBsLnNldEJsdWViZXJyeShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC00MzI5LDcgKzQzOTIsOCBAQCBib29sIHNldEpTVGVzdE9iaklk
KEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhp
c1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVz
dE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNh
c3RlZFRoaXMpKSB7CkBAIC00MzM3LDcgKzQ0MDEsNyBAQCBib29sIHNldEpTVGVzdE9iaklkKEV4
ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53
cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRl
LCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRJZChXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MzQ4LDcgKzQ0MTIsOCBAQCBib29sIHNldEpTVGVz
dE9ialJlcGxhY2VhYmxlQXR0cmlidXRlKEV4CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7
CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFS
QU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0
PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtF
TFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00MzYzLDcgKzQ0MjgsOCBAQCBib29sIHNldEpTVGVzdE9i
ak51bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpT
VGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWNhc3RlZFRoaXMpKSB7CkBAIC00MzcxLDcgKzQ0MzcsNyBAQCBib29sIHNldEpTVGVzdE9iak51
bGxhYmxlTG9uZ1NldHRhYmxlQXR0CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0
YXRlLCB2YWx1ZSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXROdWxsYWJsZUxvbmdTZXR0YWJs
ZUF0dHJpYnV0ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00
MzgyLDcgKzQ0NDgsOCBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVB
CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00Mzkw
LDcgKzQ0NTcsNyBAQCBib29sIHNldEpTVGVzdE9iak51bGxhYmxlU3RyaW5nU2V0dGFibGVBCiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBu
YXRpdmVWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUs
IHZhbHVlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nU2V0dGFibGVBdHRyaWJ1dGUoV1RGTW92ZShu
YXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQwMSw3ICs0NDY4LDggQEAgYm9v
bCBzZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogewogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNE
eW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAg
aWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQwOSw3ICs0NDc3LDcgQEAgYm9vbCBz
ZXRKU1Rlc3RPYmpOdWxsYWJsZVVTVlN0cmluZ1NldHRhYgogICAgIH0KICAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRv
VVNWU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRO
dWxsYWJsZVVTVlN0cmluZ1NldHRhYmxlQXR0cmlidXRlKFdURk1vdmUobmF0aXZlVmFsdWUpKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ0MjAsNyArNDQ4OCw4IEBAIGJvb2wgc2V0SlNUZXN0T2Jq
TnVsbGFibGVTdHJpbmdWYWx1ZShFeGUKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBVTlVTRURf
UEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNU
ZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
Y2FzdGVkVGhpcykpIHsKQEAgLTQ0MjgsNyArNDQ5Nyw3IEBAIGJvb2wgc2V0SlNUZXN0T2JqTnVs
bGFibGVTdHJpbmdWYWx1ZShFeGUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3Rh
dGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE51bGxhYmxlU3RyaW5nVmFsdWUo
V1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDQzOSw3ICs0NTA4
LDggQEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVl
KSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDQ0Nyw3ICs0NTE3LDcg
QEAgYm9vbCBzZXRKU1Rlc3RPYmpBdHRyaWJ1dGVXaXRoUmVzZXJ2ZWRFbgogICAgIH0KICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUg
PSBwYXJzZTxUZXN0T2JqOjpPcHRpb25hbD4oKnN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKFVOTElLRUxZKCFu
YXRpdmVWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0NjAsNyArNDUzMCw4IEBA
IGJvb2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0NjksNyArNDU0MCw3IEBAIGJv
b2wgc2V0SlNUZXN0T2JqUHV0Rm9yd2FyZHNBdHRyaWJ1dGUoRXgKICAgICBSZWY8VGVzdE5vZGU+
IGZvcndhcmRlZEltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCkucHV0Rm9yd2FyZHNBdHRyaWJ1
dGUoKTsKICAgICBhdXRvJiBpbXBsID0gZm9yd2FyZGVkSW1wbC5nZXQoKTsKICAgICBhdXRvIG5h
dGl2ZVZhbHVlID0gdmFsdWUudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0TmFtZShXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NDgwLDcgKzQ1NTEsOCBAQCBi
b29sIHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiB7CiAgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
OworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBq
c0R5bmFtaWNDYXN0PEpTVGVzdE9iaio+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC00NDkxLDcgKzQ1NjMsNyBAQCBib29s
IHNldEpTVGVzdE9ialB1dEZvcndhcmRzTnVsbGFibGVBdHRyCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBhdXRvJiBpbXBsID0gKmZvcndhcmRlZEltcGw7CiAgICAgYXV0byBuYXRpdmVWYWx1
ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldE5hbWUoV1RGTW92ZShuYXRpdmVW
YWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDUwMiw3ICs0NTc0LDggQEAgYm9vbCBzZXRK
U1Rlc3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
Q2FzdDxKU1Rlc3RPYmoqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtNDUxMCw3ICs0NTgzLDcgQEAgYm9vbCBzZXRKU1Rl
c3RPYmpTdHJpbmdpZmllckF0dHJpYnV0ZShFeAogICAgIH0KICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZVRvVVNWU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdpZmllckF0dHJpYnV0ZShXVEZNb3ZlKG5h
dGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00NTQ2LDcgKzQ2MTksNyBAQCBzdGF0
aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIHRlc3RQYXJhbSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0
ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVO
TElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuZW5hYmxlZEF0UnVudGltZU9wZXJhdGlv
bihXVEZNb3ZlKHRlc3RQYXJhbSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC00NTY5LDcgKzQ2NDIsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkg
PCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3Jl
YXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQYXJhbSA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVy
YXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNDYyNywxMCArNDcwMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdB
cmcgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxD
b252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+
YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBh
dXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDY2OCwxMCArNDc0MSwxMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0
ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAg
ICBhdXRvIGJ5dGVBcmcgPSBjb252ZXJ0PGludDhfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIHN0ckFy
ZyA9IHN0YXRlLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3Vt
ZW50KDIpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC00NzA5LDEwICs0NzgyLDEw
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gb2N0ZXRBcmcgPSBjb252ZXJ0PHVpbnQ4X3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVk
KHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpBcmcpKQpAQCAtNDc1
MCwxMCArNDgyMywxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAzKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkudG9XVEZTdHJp
bmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFyZyA9IEpTVGVzdE9i
ajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVOTElLRUxZKCFvYmpB
cmcpKQpAQCAtNDc5MSwxMCArNDg2NCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAz
KSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxvbmdBcmcgPSBjb252
ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9u
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQo
MSkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIG9iakFy
ZyA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgyKSk7CiAgICAgaWYgKFVO
TElLRUxZKCFvYmpBcmcpKQpAQCAtNDgzMiw3ICs0OTA1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmcg
PSB2YWx1ZVRvU3RyaW5nVHJlYXRpbmdOdWxsQXNFbXB0eVN0cmluZyhzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQXJnVHJl
YXRpbmdOdWxsQXNFbXB0eVN0cmluZyhXVEZNb3ZlKGFyZykpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC00ODUyLDcgKzQ5MjUsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghcmVz
b2x2ZXIpKQogICAgICAgICByZXR1cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRo
cm93U2NvcGUsIDAsICJyZXNvbHZlciIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhYUGF0aE5T
UmVzb2x2ZXJQYXJhbWV0ZXIiLCAiWFBhdGhOU1Jlc29sdmVyIik7CkBAIC00ODk4LDcgKzQ5NzEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGluZGV4ID0gY29udmVydDx1aW50MzJfdD4oKnN0YXRlLCBzdGF0
ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nT3JOdWxsKHN0YXRlLCBpbXBsLm51bGxhYmxlU3Ry
aW5nU3BlY2lhbE1ldGhvZChXVEZNb3ZlKGluZGV4KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKQEAgLTQ5MjAsNyArNDk5Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBhdXRvIGVudW1BcmdWYWx1ZSA9IHN0YXRlLT5hcmd1
bWVudCgwKTsKICAgICBUZXN0T2JqOjpFbnVtVHlwZSBlbnVtQXJnOwogICAgIGF1dG8gb3B0aW9u
YWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghb3B0aW9uYWxWYWx1ZSkpCiAg
ICAgICAgIHJldHVybiB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgMCwgImVudW1BcmciLCAiVGVzdE9iamVjdCIsICJtZXRob2RXaXRoRW51bUFyZyIsIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXM8VGVzdE9iajo6RW51bVR5cGU+KCkpOwpAQCAtNDk0NCw3
ICs1MDE3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IE9wdGlvbmFsPFRlc3RPYmo6OkVudW1UeXBlPiBlbnVtQXJnOwogICAgIGlmICghZW51bUFyZ1Zh
bHVlLmlzVW5kZWZpbmVkKCkpIHsKICAgICAgICAgZW51bUFyZyA9IHBhcnNlPFRlc3RPYmo6OkVu
dW1UeXBlPigqc3RhdGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNl
cHRpb24oKSkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIWVudW1BcmcpKQogICAgICAgICAgICAgcmV0dXJu
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51
bUFyZyIsICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmciLCBleHBlY3Rl
ZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5NzAsNyArNTA0
Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICAgICAg
ZW51bUFyZyA9IFRlc3RPYmo6OkVudW1UeXBlOjpFbnVtVmFsdWUxOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGF1dG8gb3B0aW9uYWxWYWx1ZSA9IHBhcnNlPFRlc3RPYmo6OkVudW1UeXBlPigqc3Rh
dGUsIGVudW1BcmdWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0
aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9wdGlvbmFsVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiZW51bUFyZyIs
ICJUZXN0T2JqZWN0IiwgIm1ldGhvZFdpdGhPcHRpb25hbEVudW1BcmdBbmREZWZhdWx0VmFsdWUi
LCBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzPFRlc3RPYmo6OkVudW1UeXBlPigpKTsKQEAgLTQ5
OTUsNyArNTA2OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
ICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBw
ZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBpZiAoVU5MSUtFTFkoIW9iakFyZykpCkBAIC01
MDIwLDcgKzUwOTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmcoc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0
aG9kV2l0aFVTVlN0cmluZ0FyZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MDQwLDcgKzUxMTMsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IHN0ciA9IHZhbHVlVG9VU1ZTdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0
aE51bGxhYmxlVVNWU3RyaW5nQXJnKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUwNjAsNyArNTEzMyw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyID0gdmFsdWVUb1VTVlN0cmluZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9k
V2l0aFVTVlN0cmluZ0FyZ1RyZWF0aW5nTnVsbEFzRW1wdHlTdHJpbmcoV1RGTW92ZShzdHIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTA4MCw3ICs1
MTUzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBzZXJpYWxpemVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgMCwgMCk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuc2VyaWFsaXplZFZhbHVlKFdURk1vdmUoc2VyaWFsaXplZEFyZykp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01MTc5LDcg
KzUyNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJu
IHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFyZ3VtZW50ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRv
V1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5wcml2YXRlTWV0aG9kKFdURk1vdmUoYXJn
dW1lbnQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNTE5OSw3
ICs1MjcyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhcmd1bWVudCA9IHN0YXRlLT5hcmd1bWVudCgwKS50
b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNTdHJpbmdXaXRoQ2FjaGUoc3RhdGUsIGltcGwucHVibGljQW5kUHJpdmF0ZU1ldGhvZChX
VEZNb3ZlKGFyZ3VtZW50KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
QEAgLTUyMTksMTMgKzUyOTIsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3Vt
ZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBs
aXN0ZW5lciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNh
c3RlZFRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFko
IWxpc3RlbmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJhZGRFdmVudExpc3Rl
bmVyIiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJn
dW1lbnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5h
ZGRFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0
dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUy
NDUsMTMgKzUzMTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0eXBlID0gc3RhdGUtPmFyZ3VtZW50KDAp
LnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBsaXN0ZW5l
ciA9IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKHN0YXRlLT5hcmd1bWVudCgxKSwgKmNhc3RlZFRo
aXMsIGZhbHNlLCBjdXJyZW50V29ybGQoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWxpc3Rl
bmVyKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCAxLCAibGlzdGVuZXIiLCAiVGVzdE9iamVjdCIsICJyZW1vdmVFdmVudExpc3RlbmVy
IiwgIkV2ZW50TGlzdGVuZXIiKTsKICAgICBhdXRvIHVzZUNhcHR1cmUgPSBzdGF0ZS0+YXJndW1l
bnQoMikudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5yZW1v
dmVFdmVudExpc3RlbmVyKFdURk1vdmUodHlwZSksICpsaXN0ZW5lciwgV1RGTW92ZSh1c2VDYXB0
dXJlKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUy
ODQsNyArNTM1Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwu
d2l0aFNjcmlwdFN0YXRlT2JqKCpzdGF0ZSkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01MzIxLDcgKzUzOTQsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC53aXRoU2NyaXB0
U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCBlYykpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0
YXRlLCBlYyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KQEAgLTUzODAsNyArNTQ1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCwgZWMpKTsKIAogICAgIHNl
dERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC01NDAwLDcgKzU0NzMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKCFjb250ZXh0KQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwud2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAq
Y29udGV4dCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CkBAIC01NDg2LDcgKzU1NTksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRU
aGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndy
YXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbEFyZyhXVEZNb3ZlKG9wdCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NTA0LDcgKzU1NzcsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG9wdCA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gNjY2IDogY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVl
KFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTU1MjQsMTAgKzU1OTcsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25PcHQgPSBjb252ZXJ0
PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWQoKSA/IE9wdGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25h
bEFyZyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1NDcsMTMgKzU2MjAsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUs
IHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAg
YXV0byBub25PcHQgPSBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
LCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlv
bigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvcHQxID0g
c3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBPcHRpb25hbDxpbnQzMl90PigpIDog
Y29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgTm9y
bWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkp
CisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb3B0MiA9IHN0YXRl
LT5hcmd1bWVudCgyKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZl
cnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMiksIE5vcm1hbENv
bnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhOb25PcHRp
b25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhXVEZNb3ZlKG5vbk9wdCksIFdURk1vdmUob3B0MSks
IFdURk1vdmUob3B0MikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01NTcxLDcgKzU2NDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5n
KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
NTg5LDcgKzU2NjIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiB2YWx1
ZVRvVVNWU3RyaW5nKHN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbFVTVlN0cmluZyhXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
NjA3LDcgKzU2ODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRv
bWljU3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU2MjUsNyArNTY5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkg
PyBBU0NJSUxpdGVyYWwoImZvbyIpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdBbmREZWZhdWx0VmFsdWUoV1RGTW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTY0Myw3ICs1NzE2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQo
MCkuaXNVbmRlZmluZWQoKSA/IEF0b21pY1N0cmluZygiZm9vIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmco
c3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlt
cGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3RyaW5nQW5kRGVmYXVsdFZhbHVlKFdURk1vdmUo
c3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2
NjEsNyArNTczNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8g
c3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElL
RUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsKFdURk1vdmUoc3Ry
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU2Nzks
NyArNTc1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygp
KTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3Ry
ID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtF
TFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChXVEZNb3Zl
KHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01
Njk3LDcgKzU3NzAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRv
IHN0ciA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gbnVsbEF0b20gOiBzdGF0
ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhz
dGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRv
bWljU3RyaW5nSXNOdWxsKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MTUsNyArNTc4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNh
c3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBlbXB0eVN0cmluZygpIDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0
aW9uYWxTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3MzMsNyArNTgwNiw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0g
Y2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0gc3RhdGUtPmFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkKCkgPyBlbXB0eVN0cmluZygpIDogdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1w
bC5tZXRob2RXaXRoT3B0aW9uYWxVU1ZTdHJpbmdJc0VtcHR5U3RyaW5nKFdURk1vdmUoc3RyKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU3NTEsNyAr
NTgyNCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5mbygpKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gc3RyID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBlbXB0eUF0b20gOiBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0F0b21pY1N0cmluZyhzdGF0ZSk7
Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElL
RUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsQXRvbWljU3Ry
aW5nSXNFbXB0eVN0cmluZyhXVEZNb3ZlKHN0cikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CkBAIC01NzY5LDcgKzU4NDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhj
YXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IGNvbnZlcnQ8ZG91YmxlPigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsRG91YmxlSXNOYU4oV1RGTW92
ZShudW1iZXIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNTc4Nyw3ICs1ODYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBudW1iZXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwg
U2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bWV0aG9kV2l0aE9wdGlvbmFsRmxvYXRJc05hTihXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODA1LDcgKzU4NzgsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYg
aW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG51bWJlciA9IHN0YXRlLT5h
cmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50NjRfdD4oKSA6IGNvbnZlcnQ8
aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdpdGhPcHRpb25hbExv
bmdMb25nKFdURk1vdmUobnVtYmVyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKQEAgLTU4MjMsNyArNTg5Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHIKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRo
aXMsIEpTVGVzdE9iajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwogICAgIGF1dG8gbnVtYmVyID0gY29udmVydDxpbnQ2NF90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGltcGwubWV0aG9kV2l0aE9wdGlvbmFsTG9uZ0xvbmdJc1plcm8oV1RGTW92ZShudW1iZXIpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg0MSw3ICs1
OTE0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwog
ICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIg
PSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9wdGlvbmFsPHVpbnQ2NF90Pigp
IDogY29udmVydDx1aW50NjRfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm1ldGhvZFdp
dGhPcHRpb25hbFVuc2lnbmVkTG9uZ0xvbmcoV1RGTW92ZShudW1iZXIpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNTg1OSw3ICs1OTMyLDcgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGlt
cGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBudW1iZXIgPSBjb252ZXJ0PHVp
bnQ2NF90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsVW5zaWduZWRMb25n
TG9uZ0lzWmVybyhXVEZNb3ZlKG51bWJlcikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CkBAIC01ODc3LDcgKzU5NTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0
ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkKCkgPyBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4oKSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5n
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwubWV0aG9kV2l0aE9wdGlvbmFsU2VxdWVuY2UoV1RGTW92ZShhcnJheSkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC01ODk1LDcgKzU5
NjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAg
ICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIGFycmF5ID0g
c3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8U3RyaW5nPigpIDogdG9O
YXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxTZXF1ZW5jZUlz
RW1wdHkoV1RGTW92ZShhcnJheSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC01OTEzLDcgKzU5ODYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPGJvb2w+KCkgOiBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9Cb29sZWFuKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29s
ZWFuKFdURk1vdmUoYikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC01OTMxLDcgKzYwMDQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rl
c3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
ICAgICBhdXRvIGIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9Cb29sZWFuKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoT3B0aW9uYWxCb29sZWFuSXNGYWxzZShX
VEZNb3ZlKGIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNjAwOSw3ICs2MDgyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IHJlc29sdmVyID0gbnVsbHB0cjsKICAg
ICBpZiAoIXN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAg
IHJlc29sdmVyID0gSlNYUGF0aE5TUmVzb2x2ZXI6OnRvV3JhcHBlZCgqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
ICAgICBpZiAoVU5MSUtFTFkoIXJlc29sdmVyKSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMCwgInJlc29sdmVyIiwgIlRlc3RP
YmplY3QiLCAibWV0aG9kV2l0aE9wdGlvbmFsWFBhdGhOU1Jlc29sdmVyIiwgIlhQYXRoTlNSZXNv
bHZlciIpOwpAQCAtNjA1Miw3ICs2MTI1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBub25DYWxsYmFjayA9
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIE5vcm1hbENvbnZl
cnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlm
IChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpZiAoVU5MSUtFTFkoIXN0YXRlLT5hcmd1
bWVudCgxKS5pc09iamVjdCgpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmpl
Y3QiLCAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciKTsKQEAgLTYxMTYs
NyArNjE4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9uQ2FsbGJhY2sgPSBjb252ZXJ0PGludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dT
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAgICAgaWYgKFVOTElLRUxZKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNGdW5jdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgMSwgImNhbGxiYWNrIiwgIlRlc3RPYmplY3QiLCAibWV0aG9kV2l0
aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyIpOwpAQCAtNjI0OSw3ICs2MzIy
LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAg
ICAgcmV0dXJuIHRocm93QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAi
b2JqQXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAg
ICAgfQogICAgIGF1dG8gc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1v
dmUob2JqQXJnKSwgV1RGTW92ZShzdHJBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI3NSw3ICs2MzQ4LDcgQEAgc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3QiLCAi
b3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7CiAgICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9
IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6
IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIE5v
cm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
KQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRN
ZXRob2QoV1RGTW92ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjI5NSw3ICs2MzY4LDcgQEAgc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShzdHJB
cmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjMx
NSw3ICs2Mzg4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBsb25nQXJnID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdBcmcpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjM3OCw3ICs2NDUx
LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBhcnJheUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3Rh
dGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY0MTgsNyArNjQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQo
MCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChV
TkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92
ZShhcnJheUFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CkBAIC02NDM4LDcgKzY1MTEsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVz
dE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gdG9OYXRpdmVB
cnJheTx1aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoV1RGTW92ZShhcnJheUFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NDU4LDcgKzY1MzEs
NyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmlu
ZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChX
VEZNb3ZlKHN0ckFyZykpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CkBAIC02NTQwLDcgKzY2MTMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGpz
VGVzdE9ialByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0ckFyZyA9IHN0YXRlLT5h
cmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkp
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFRl
c3RPYmoqIG9iakFyZyA9IG51bGxwdHI7CiAgICAgaWYgKCFzdGF0ZS0+YXJndW1lbnQoMSkuaXNV
bmRlZmluZWRPck51bGwoKSkgewpAQCAtNjU3Miw3ICs2NjQ1LDcgQEAgc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgICAgICAgICAgcmV0dXJuIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAib2JqQXJnIiwgIlRlc3RPYmplY3Qi
LCAib3ZlcmxvYWRlZE1ldGhvZFdpdGhPcHRpb25hbFBhcmFtZXRlciIsICJUZXN0T2JqIik7CiAg
ICAgfQogICAgIGF1dG8gbG9uZ0FyZyA9IHN0YXRlLT5hcmd1bWVudCgxKS5pc1VuZGVmaW5lZCgp
ID8gT3B0aW9uYWw8aW50MzJfdD4oKSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+
dW5jaGVja2VkQXJndW1lbnQoMSksIE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIoV1RGTW92
ZShvYmpBcmcpLCBXVEZNb3ZlKGxvbmdBcmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwpAQCAtNjYxOCw3ICs2NjkxLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpDbwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvIGFy
ZyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8aW50MzJfdD4o
KSA6IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCks
IE5vcm1hbENvbnZlcnNpb24pOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzTnVtYmVyKFRlc3RPYmo6OmNsYXNzTWV0aG9kV2l0aE9wdGlvbmFsKFdURk1vdmUoYXJn
KSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTY2NDMsNyArNjcx
Niw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYXJnID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHN0YXRl
LT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUoYXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTY2NjAsNyArNjczMyw3IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdHlwZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIFRlc3RPYmo6Om92ZXJsb2FkZWRNZXRob2QxKFdURk1vdmUo
dHlwZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02
NzAzLDEwICs2Nzc2LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnc1Nob3J0ID0gY29udmVydDx1
aW50MTZfdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIENsYW1wKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+KCpzdGF0ZSwg
c3RhdGUtPmFyZ3VtZW50KDEpLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
Y2xhc3NNZXRob2RXaXRoQ2xhbXAoV1RGTW92ZShvYmpBcmdzU2hvcnQpLCBXVEZNb3ZlKG9iakFy
Z3NMb25nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAg
LTY3MjYsMTAgKzY3OTksMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmdzU2hvcnQgPSBjb252ZXJ0
PHVpbnQxNl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgRW5mb3JjZVJhbmdlKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmpBcmdzTG9uZyA9IGNvbnZlcnQ8dWludDMyX3Q+
KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBFbmZvcmNlUmFuZ2UpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBpbXBsLmNsYXNzTWV0aG9kV2l0aEVuZm9yY2VSYW5nZShXVEZNb3ZlKG9iakFy
Z3NTaG9ydCksIFdURk1vdmUob2JqQXJnc0xvbmcpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNjc0OSw3ICs2ODIyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1l
bnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93
U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB1
bnNpZ25lZExvbmdTZXF1ZW5jZSA9IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3Rh
dGUtPmFyZ3VtZW50KDApKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigp
KSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRo
VW5zaWduZWRMb25nU2VxdWVuY2UoV1RGTW92ZSh1bnNpZ25lZExvbmdTZXF1ZW5jZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02NzcwLDcgKzY4NDMs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgYXV0byB2
YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJ
S0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoc3RhdGUs
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmluZ0FycmF5RnVuY3Rpb24oV1RG
TW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02ODE1LDEwICs2ODg4LDEwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gYXJyYXlBcmcgPSB0b05hdGl2ZUFycmF5PHVpbnQzMl90Pigqc3RhdGUsIHN0YXRlLT5hcmd1
bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gbnVsbGFibGVBcnJheUFyZyA9
IHRvTmF0aXZlQXJyYXk8dWludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5tZXRob2RXaXRoQW5kV2l0aG91dE51bGxhYmxlU2Vx
dWVuY2UoV1RGTW92ZShhcnJheUFyZyksIFdURk1vdmUobnVsbGFibGVBcnJheUFyZykpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBAIC02ODM4LDcgKzY5MTEs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByCiAgICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
c3RhdGUpKTsKICAgICBhdXRvIGVsZW1lbnRJZCA9IEF0b21pY1N0cmluZyhzdGF0ZS0+YXJndW1l
bnQoMCkudG9TdHJpbmcoc3RhdGUpLT50b0V4aXN0aW5nQXRvbWljU3RyaW5nKHN0YXRlKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZ
KHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwuZ2V0RWxlbWVudEJ5SWQoV1RGTW92ZShlbGVtZW50
SWQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtNjkyMSw3ICs2
OTk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwuY29udmVydDMoV1RGTW92
ZSh2YWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CkBA
IC02OTQxLDcgKzcwMTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHZhbHVlID0gdmFsdWVUb1N0cmluZ1dp
dGhVbmRlZmluZWRPck51bGxDaGVjayhzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgaW1wbC5jb252ZXJ0NChXVEZNb3ZlKHZhbHVlKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcwMDYsMTAgKzcwNzksMTAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgYXV0byBoZWFkID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKHN0
YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAo
VU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byB0YWlsID0gdG9Bcmd1bWVudHM8VmFy
aWFkaWNIZWxwZXI8SlNDOjpKU1ZhbHVlLCBTdHJpbmc+Pigqc3RhdGUsIDEpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljU3RyaW5nTWV0aG9kKFdURk1vdmUoaGVhZCksIFdU
Rk1vdmUoKnRhaWwuc2Vjb25kKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKQEAgLTcwMjksMTAgKzcxMDIsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgp
IDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWFkID0gY29u
dmVydDxkb3VibGU+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZp
bml0ZTo6WWVzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byB0YWlsID0gdG9Bcmd1bWVu
dHM8VmFyaWFkaWNIZWxwZXI8SlNDOjpKU1ZhbHVlLCBkb3VibGU+Pigqc3RhdGUsIDEpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0
aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnZhcmlhZGljRG91YmxlTWV0aG9kKFdURk1vdmUoaGVh
ZCksIFdURk1vdmUoKnRhaWwuc2Vjb25kKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKQEAgLTcwNzUsMTAgKzcxNDgsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRD
b3VudCgpIDwgMikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2Nv
cGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0g
Y29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9u
RmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvIGIgPSBjb252ZXJ0PGlu
dDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDEpLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFko
dGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAgICAgaW1wbC5hbnkoV1RGTW92ZShhKSwgV1RGTW92ZShiKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTcxMjUsNyArNzE5
OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUHIKICAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8ZmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPmFy
Z3VtZW50KDApLCBTaG91bGRBbGxvd05vbkZpbml0ZTo6Tm8pOwotICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBpbXBsLnRlc3RQcm9taXNlRnVuY3Rpb25XaXRoRmxvYXRBcmd1bWVudChXVEZNb3ZlKGEp
LCBEZWZlcnJlZFdyYXBwZXI6OmNyZWF0ZShzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCksIHByb21pc2VEZWZlcnJlZCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CkBAIC03MTcyLDcgKzcyNDUsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1Zh
bHVlIGpzVGVzdE9ialByCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlz
LCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKICAgICBhdXRvIGEgPSBzdGF0ZS0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSA/IE9w
dGlvbmFsPGludDMyX3Q+KCkgOiBjb252ZXJ0PGludDMyX3Q+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLCBOb3JtYWxDb252ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAg
ICAgaW1wbC50ZXN0UHJvbWlzZUZ1bmN0aW9uV2l0aE9wdGlvbmFsSW50QXJndW1lbnQoV1RGTW92
ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwpAQCAtNzE5OCw3ICs3MjcxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUs
IGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29u
dmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCksIFNob3VsZEFsbG93Tm9uRmlu
aXRlOjpObyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwudGVzdFByb21pc2VPdmVybG9h
ZGVkRnVuY3Rpb24oV1RGTW92ZShhKSwgRGVmZXJyZWRXcmFwcGVyOjpjcmVhdGUoc3RhdGUsIGNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBwcm9taXNlRGVmZXJyZWQpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzMxMiw3ICs3Mzg1LDcgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RGTW92ZShz
dHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzMz
NSw3ICs3NDA4LDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUs
IHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzM3OCw3ICs3NDUxLDcgQEAgc3Rh
dGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpQcgogICAgIGlmIChVTkxJS0VMWShz
dGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
c3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7
CiAgICAgYXV0byBzdHIgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLnNpbmdsZUNvbmRpdGlvbmFsT3ZlcmxvYWQoV1RG
TW92ZShzdHIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpA
QCAtNzM5OSw3ICs3NDcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RP
YmpQcgogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBhID0gY29udmVydDxpbnQzMl90Pigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSwgTm9ybWFsQ29udmVyc2lvbik7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGltcGwuc2luZ2xlQ29uZGl0aW9uYWxPdmVybG9hZChXVEZNb3ZlKGEpKTsK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtNzQzOCw3ICs3
NTExLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcgogICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBpbml0ID0gY29udmVydERpY3Rpb25hcnk8VGVzdE9iajo6
RGljdGlvbmFyeT4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBpbXBsLmF0dGFjaFNoYWRvd1Jvb3QoaW5pdC52YWx1ZSgpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3Vt
ZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8g
YXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyKHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXIpKQogICAgICAgICByZXR1
cm4gdGhyb3dBcmd1bWVudFR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIDAsICJhcnJheUJ1
ZmZlciIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsIG51bGxwdHIsICJBcnJheUJ1ZmZl
ciIpOwpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0
cnVjdEpTCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IHRv
QXJyYXlCdWZmZXJWaWV3KHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
ICAgIGlmIChVTkxJS0VMWSghYXJyYXlCdWZmZXJWaWV3KSkKICAgICAgICAgcmV0dXJuIHRocm93
QXJndW1lbnRUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3
IiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmll
dyIpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29u
c3RydWN0SlMKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQog
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFy
Z3VtZW50KDApLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUoc3Ry
aW5nKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC0xNDEs
NyArMTQxLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAg
IGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0Nv
bnN0cnVjdG9yKj4oc3RhdGUtPmNhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAg
ICAgYXV0byBsb25nQXJncyA9IHRvQXJndW1lbnRzPFZhcmlhZGljSGVscGVyPEpTQzo6SlNWYWx1
ZSwgaW50MzJfdD4+KCpzdGF0ZSwgMCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2Jq
ZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdz
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2Vx
dWVuY2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmNh
bGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CiAgICAgYXV0byBzZXF1ZW5jZU9mU3Ry
aW5ncyA9IHN0YXRlLT5hcmd1bWVudCgwKS5pc1VuZGVmaW5lZCgpID8gVmVjdG9yPFN0cmluZz4o
KSA6IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHNlcXVlbmNlT2ZTdHJp
bmdzKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkBAIC04OCw3
ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyaW5nID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvV1RG
U3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkK
KyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byBvYmplY3QgPSBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5n
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJpZGVCdWlsdGlu
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE92ZXJyCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIG5h
bWUgPSBzdGF0ZS0+YXJndW1lbnQoMCkudG9XVEZTdHJpbmcoc3RhdGUpOwotICAgIGlmIChVTkxJ
S0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3Bl
LmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBpbXBsLm5hbWVkSXRlbShXVEZNb3ZlKG5hbWUpKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNyArMjUxLDgg
QEAgYm9vbCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogewogICAgIFZNJiB2
bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlKiBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAg
ICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewpAQCAtMjU5LDcgKzI2MCw3IEBAIGJvb2wg
c2V0SlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXIKICAgICB9CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29w
ZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFZhbHVl
KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI3MCw3ICsyNzEs
OCBAQCBib29sIHNldEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSo+KEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0yNzgsNyArMjgwLDcgQEAgYm9v
bCBzZXRKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcgogICAgIH0KICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgdmFsdWUsIDAsIDApOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGltcGwuc2V0Q2Fj
aGVkVmFsdWUoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFR5cGVkZWZzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0VHlwZWRlZnMuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzIsNyArMTMyLDcgQEAgdGVtcGxhdGU8PiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIAogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAg
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBoZWxsbyA9IHN0YXRlLT5hcmd1bWVu
dCgwKS50b1dURlN0cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGlmIChVTkxJ
S0VMWSghc3RhdGUtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpKQogICAgICAgICByZXR1cm4gdGhy
b3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCAxLCAidGVz
dENhbGxiYWNrIiwgIlRlc3RUeXBlZGVmcyIsIG51bGxwdHIpOwpAQCAtMzYwLDcgKzM2MCw4IEBA
IGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNVbnNpZ25lZExvbmdMb25nQXQKIHsKICAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7ICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aGlzVmFsdWUpOwogICAgIEpTVGVzdFR5cGVkZWZzKiBjYXN0ZWRU
aGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RUeXBlZGVmcyo+KEpTVmFsdWU6OmRlY29kZSh0aGlz
VmFsdWUpKTsKICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CkBAIC0zNjgsNyArMzY5
LDcgQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1Vuc2lnbmVkTG9uZ0xvbmdBdAogICAgIH0KICAg
ICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIGF1dG8gbmF0aXZlVmFs
dWUgPSBjb252ZXJ0PHVpbnQ2NF90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252ZXJzaW9uKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtF
TFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBp
bXBsLnNldFVuc2lnbmVkTG9uZ0xvbmdBdHRyKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM3OSw3ICszODAsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzSW1t
dXRhYmxlU2VyaWFsaXplCiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVl
KTsKICAgICBKU1Rlc3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0
VHlwZWRlZnMqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KCFjYXN0ZWRUaGlzKSkgewpAQCAtMzg3LDcgKzM4OSw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRl
ZnNJbW11dGFibGVTZXJpYWxpemUKICAgICB9CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKICAgICBhdXRvIG5hdGl2ZVZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoc3RhdGUsIHZhbHVlLCAwLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldEltbXV0YWJsZVNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShXVEZNb3ZlKG5hdGl2ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
OTgsNyArNDAwLDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc0F0dHJXaXRoR2V0dGVyRXhjZQog
ewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlw
ZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1
ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsK
QEAgLTQwNiw3ICs0MDksNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhHZXR0ZXJF
eGNlCiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8aW50MzJfdD4oKnN0YXRlLCB2YWx1ZSwgTm9ybWFs
Q29udmVyc2lvbik7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRBdHRyV2l0aEdldHRlckV4Y2VwdGlvbihXVEZNb3ZlKG5hdGl2
ZVZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTcsNyArNDIwLDggQEAgYm9vbCBzZXRK
U1Rlc3RUeXBlZGVmc0F0dHJXaXRoU2V0dGVyRXhjZQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgVU5VU0VE
X1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwog
ICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQyNiw3ICs0MzAsNyBAQCBib29s
IHNldEpTVGVzdFR5cGVkZWZzQXR0cldpdGhTZXR0ZXJFeGNlCiAgICAgYXV0byYgaW1wbCA9IGNh
c3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBhdXRv
IG5hdGl2ZVZhbHVlID0gY29udmVydDxpbnQzMl90Pigqc3RhdGUsIHZhbHVlLCBOb3JtYWxDb252
ZXJzaW9uKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpbXBsLnNldEF0dHJXaXRoU2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFs
dWUpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CkBAIC00MzgsNyArNDQy
LDggQEAgYm9vbCBzZXRKU1Rlc3RUeXBlZGVmc1N0cmluZ0F0dHJXaXRoR2V0dAogewogICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CiAgICAgSlNUZXN0VHlwZWRlZnMqIGNh
c3RlZFRoaXMgPSBqc0R5bmFtaWNDYXN0PEpTVGVzdFR5cGVkZWZzKj4oSlNWYWx1ZTo6ZGVjb2Rl
KHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKQEAgLTQ0Niw3
ICs0NTEsNyBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhHZXR0CiAgICAg
fQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgYXV0byBuYXRp
dmVWYWx1ZSA9IHZhbHVlLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbXBsLnNldFN0cmluZ0F0dHJXaXRo
R2V0dGVyRXhjZXB0aW9uKFdURk1vdmUobmF0aXZlVmFsdWUpKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ1Nyw3ICs0NjIsOCBAQCBib29sIHNldEpTVGVzdFR5cGVkZWZzU3RyaW5nQXR0cldpdGhT
ZXR0CiB7CiAgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOyAg
ICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKTsKICAgICBVTlVTRURfUEFSQU0odGhpc1ZhbHVlKTsKICAgICBKU1Rl
c3RUeXBlZGVmcyogY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0VHlwZWRlZnMqPihK
U1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlz
KSkgewpAQCAtNDY2LDcgKzQ3Miw3IEBAIGJvb2wgc2V0SlNUZXN0VHlwZWRlZnNTdHJpbmdBdHRy
V2l0aFNldHQKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8gbmF0aXZlVmFsdWUgPSB2YWx1ZS50b1dURlN0
cmluZyhzdGF0ZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW1wbC5zZXRTdHJpbmdBdHRyV2l0aFNldHRlckV4Y2VwdGlvbihXVEZNb3Zl
KG5hdGl2ZVZhbHVlKSwgZWMpOwogICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwpAQCAt
NDkxLDcgKzQ5Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdFR5cGVkZWZz
OjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAg
YXV0byB4ID0gc3RhdGUtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkgPyBWZWN0b3I8aW50MzJf
dD4oKSA6IHRvTmF0aXZlQXJyYXk8aW50MzJfdD4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAg
IGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmMoV1RGTW92ZSh4KSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTUxMSwxOSAr
NTE3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDMpKQogICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gd2lkdGggPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIGF1dG8gaGVpZ2h0ID0gY29udmVydDxmbG9hdD4oKnN0YXRlLCBzdGF0ZS0+
YXJndW1lbnQoMSksIFNob3VsZEFsbG93Tm9uRmluaXRlOjpZZXMpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKICAgICBhdXRvIGJsdXIgPSBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVu
dCgyKSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8gY29sb3IgPSBzdGF0ZS0+YXJndW1lbnQoMykuaXNVbmRlZmluZWQoKSA/IFN0cmluZygp
IDogc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDMpLnRvV1RGU3RyaW5nKHN0YXRlKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5MSUtFTFkodGhy
b3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgYXV0byBhbHBoYSA9IHN0YXRlLT5hcmd1bWVudCg0KS5pc1VuZGVm
aW5lZCgpID8gT3B0aW9uYWw8ZmxvYXQ+KCkgOiBjb252ZXJ0PGZsb2F0Pigqc3RhdGUsIHN0YXRl
LT51bmNoZWNrZWRBcmd1bWVudCg0KSwgU2hvdWxkQWxsb3dOb25GaW5pdGU6Olllcyk7Ci0gICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwogICAgIGltcGwuc2V0U2hhZG93KFdURk1vdmUod2lkdGgpLCBXVEZNb3Zl
KGhlaWdodCksIFdURk1vdmUoYmx1ciksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKGFscGhhKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU0Myw3ICs1
NDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxT
ZXJpYWxpemVkU2NyaXB0VmFsdWUsIEpTU2VyaWFsaXplZFNjcmlwdFZhbHVlPigqc3RhdGUsIHN0
YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24o
KSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNOdW1iZXIoaW1wbC5tZXRob2RXaXRoU2VxdWVuY2VBcmcoV1RGTW92ZShzZXF1ZW5jZUFy
ZykpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC01NjMsNyArNTY5
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBzZXF1ZW5jZUFyZyA9IHRvTmF0aXZlQXJyYXk8U3RyaW5nPigq
c3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGltcGwu
bnVsbGFibGVTZXF1ZW5jZUFyZyhXVEZNb3ZlKHNlcXVlbmNlQXJnKSk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU4MywxMCArNTg5LDEwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0VHlwZWQKICAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYXJnMSA9IGNvbnZlcnQ8dWludDY0X3Q+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50
KDApLCBDbGFtcCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisg
ICAgaWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8gYXJnMiA9IHN0YXRlLT5h
cmd1bWVudCgxKS5pc1VuZGVmaW5lZCgpID8gT3B0aW9uYWw8dWludDY0X3Q+KCkgOiBjb252ZXJ0
PHVpbnQ2NF90Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgQ2xhbXApOwot
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQorICAgIGlmIChVTkxJS0VM
WSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKICAgICBpbXBsLmZ1bmNXaXRoQ2xhbXAoV1RGTW92ZShhcmcxKSwg
V1RGTW92ZShhcmcyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKQEAgLTYyMiw3ICs2MjgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dFR5cGVkCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgYXV0byB2YWx1ZXMgPSB0b05hdGl2ZUFycmF5PFN0cmluZz4oKnN0YXRlLCBz
dGF0ZS0+YXJndW1lbnQoMCkpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9u
KCkpKQorICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzQXJyYXkoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLnN0cmlu
Z1NlcXVlbmNlRnVuY3Rpb24oV1RGTW92ZSh2YWx1ZXMpLCBlYykpOwogCkBAIC02NDUsNyArNjUx
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RUeXBlZAogICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGF1dG8g
dmFsdWVzID0gdG9OYXRpdmVBcnJheTxTdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPmFyZ3VtZW50KDAp
KTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICBpZiAoVU5M
SUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KHN0YXRl
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC5zdHJpbmdTZXF1ZW5jZUZ1bmN0aW9u
MihXVEZNb3ZlKHZhbHVlcyksIGVjKSk7CiAKQEAgLTY2Nyw3ICs2NzMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdFR5cGVkCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5h
cmd1bWVudENvdW50KCkgPCAxKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwg
dGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBh
dXRvIHNlcXVlbmNlQXJnID0gdG9SZWZQdHJOYXRpdmVBcnJheTxUZXN0RXZlbnRUYXJnZXQsIEpT
VGVzdEV2ZW50VGFyZ2V0Pigqc3RhdGUsIHN0YXRlLT5hcmd1bWVudCgwKSk7Ci0gICAgaWYgKFVO
TElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCisgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNCb29sZWFuKGltcGwuY2FsbFdpdGhTZXF1
ZW5jZVRoYXRSZXF1aXJlc0luY2x1ZGUoV1RGTW92ZShzZXF1ZW5jZUFyZykpKTsKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
TlBfanNvYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9OUF9q
c29iamVjdC5jcHAJKHJldmlzaW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9O
UF9qc29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsMTIgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogICAgICAgICBpZiAoIXJvb3RPYmpl
Y3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwor
ICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gb2JqZWN0LgogICAgICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXA7CkBAIC0xOTMsNyArMTk3LDcgQEAgYm9vbCBf
TlBOX0ludm9rZURlZmF1bHQoTlBQLCBOUE9iamVjdCogbwogCiAgICAgICAgIC8vIENvbnZlcnQg
YW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAgICBjb252
ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCByZXN1bHQpOwotICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAogICAgIH0KIApAQCAtMjI1LDggKzIyOSwxMyBAQCBi
b29sIF9OUE5fSW52b2tlKE5QUCBucHAsIE5QT2JqZWN0KiBvLCBOCiAgICAgICAgIFJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QgPSBvYmotPnJvb3RPYmplY3Q7CiAgICAgICAgIGlmICghcm9vdE9iamVj
dCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5Q
SWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2Fs
bERhdGEpOwpAQCAtMjQwLDcgKzI0OSw3IEBAIGJvb2wgX05QTl9JbnZva2UoTlBQIG5wcCwgTlBP
YmplY3QqIG8sIE4KIAogICAgICAgICAvLyBDb252ZXJ0IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiB0aGUgZnVuY3Rpb24gY2FsbC4KICAgICAgICAgY29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhl
YywgcmVzdWx0ViwgcmVzdWx0KTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAg
ICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0yNjAsMTQgKzI2OSwxOCBAQCBib29sIF9OUE5fRXZhbHVhdGUoTlBQLCBOUE9iamVj
dCogbywgTlBTCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8fCAhcm9vdE9iamVjdC0+aXNWYWxp
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEV4ZWNTdGF0ZSogZXhl
YyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RP
YmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBTdHJpbmcgc2NyaXB0U3RyaW5nID0g
Y29udmVydE5QU3RyaW5nVG9VVEYxNihzKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgcmV0
dXJuVmFsdWUgPSBKU0M6OmV2YWx1YXRlKHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCksIG1ha2VTb3VyY2Uoc2NyaXB0U3RyaW5nKSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
ICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNDOjpldmFsdWF0ZShleGVjLCBtYWtlU291cmNl
KHNjcmlwdFN0cmluZyksIEpTQzo6SlNWYWx1ZSgpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVU
b05QVmFyaWFudChleGVjLCByZXR1cm5WYWx1ZSwgdmFyaWFudCk7Ci0gICAgICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjg0LDEwICsyOTcsMTQgQEAgYm9vbCBfTlBOX0dl
dFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwg
IXJvb3RPYmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
ICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpOworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9i
amVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpOwogICAgICAgICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRp
ZmllclJlcCo+KHByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhleGVjKTsKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIGlmIChpLT5pc1N0
cmluZygpKQogICAgICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlm
aWVyRnJvbU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSkpOwpAQCAtMjk1LDcgKzMxMiw3
IEBAIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgICAg
IHJlc3VsdCA9IG9iai0+aW1wLT5nZXQoZXhlYywgaS0+bnVtYmVyKCkpOwogCiAgICAgICAgIGNv
bnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdCwgdmFyaWFudCk7Ci0gICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzE4LDggKzMzNSwxMiBAQCBib29sIF9O
UE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVj
dCB8fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgICAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAg
ICBJZGVudGlmaWVyUmVwKiBpID0gc3RhdGljX2Nhc3Q8SWRlbnRpZmllclJlcCo+KHByb3BlcnR5
TmFtZSk7CiAKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKQEAgLTMyNyw3ICszNDgsNyBA
QCBib29sIF9OUE5fU2V0UHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICBv
YmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0KG9iai0+aW1wLCBleGVjLCBpZGVudGlmaWVyRnJv
bU5QSWRlbnRpZmllcihleGVjLCBpLT5zdHJpbmcoKSksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVl
KGV4ZWMsIHZhcmlhbnQsIHJvb3RPYmplY3QpLCBzbG90KTsKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChvYmotPmltcCwgZXhl
YywgaS0+bnVtYmVyKCksIGNvbnZlcnROUFZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHZhcmlhbnQsIHJv
b3RPYmplY3QpLCBmYWxzZSk7Ci0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtMzQ2LDI3ICszNjcsMzIgQEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBP
YmplY3QqIAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMg
PSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBhdXRv
IGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAgICAgICAg
IElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVudGlmaWVyUmVwKj4ocHJvcGVydHlO
YW1lKTsKICAgICAgICAgaWYgKGktPmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGlmICghb2Jq
LT5pbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGV4ZWMs
IGktPnN0cmluZygpKSkpIHsKLSAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIG9iai0+aW1wLT5tZXRo
b2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShvYmotPmltcCwgZXhlYywgaWRlbnRpZmllckZyb21O
UElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb2JqLT5pbXAtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmotPmlt
cCwgZXhlYywgaS0+bnVtYmVyKCkpOwogCi0gICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0zODEsMTcgKzQwNywyMSBAQCBib29sIF9OUE5f
SGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgIGlmICghcm9vdE9iamVjdCB8
fCAhcm9vdE9iamVjdC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIElkZW50aWZpZXJSZXAqIGkgPSBzdGF0aWNfY2FzdDxJZGVu
dGlmaWVyUmVwKj4ocHJvcGVydHlOYW1lKTsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CiAgICAgICAgIGlmIChpLT5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICBib29sIHJlc3Vs
dCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmll
cihleGVjLCBpLT5zdHJpbmcoKSkpOwotICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+
aGFzUHJvcGVydHkoZXhlYywgaS0+bnVtYmVyKCkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2Vw
dGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIApAQCAtNDE0LDEwICs0NDQsMTQgQEAgYm9vbCBfTlBOX0hhc01ldGhv
ZChOUFAsIE5QT2JqZWN0KiBvLCBOUAogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RP
YmplY3QtPmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0byBnbG9iYWxP
YmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAgSlNWYWx1ZSBm
dW5jID0gb2JqLT5pbXAtPmdldChleGVjLCBpZGVudGlmaWVyRnJvbU5QSWRlbnRpZmllcihleGVj
LCBpLT5zdHJpbmcoKSkpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmlu
ZWQoKTsKICAgICB9CiAgICAgCkBAIC00NDMsOCArNDc3LDEyIEBAIGJvb2wgX05QTl9FbnVtZXJh
dGUoTlBQLCBOUE9iamVjdCogbywgTlAKICAgICAgICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290
T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAot
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICAgICAgYXV0
byBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lcyhleGVjLCBQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKIAogICAgICAgICBvYmotPmltcC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlO
YW1lcyhvYmotPmltcCwgZXhlYywgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlKCkpOwpA
QCAtNDU4LDcgKzQ5Niw3IEBAIGJvb2wgX05QTl9FbnVtZXJhdGUoTlBQLCBOUE9iamVjdCogbywg
TlAKICAgICAgICAgKmlkZW50aWZpZXIgPSBpZGVudGlmaWVyczsKICAgICAgICAgKmNvdW50ID0g
c2l6ZTsKIAotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC00
NzksOSArNTE3LDEzIEBAIGJvb2wgX05QTl9Db25zdHJ1Y3QoTlBQLCBOUE9iamVjdCogbywgY28K
ICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IG9iai0+cm9vdE9iamVjdDsKICAgICAg
ICAgaWYgKCFyb290T2JqZWN0IHx8ICFyb290T2JqZWN0LT5pc1ZhbGlkKCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAgICBKU0xvY2tIb2xk
ZXIgbG9jayhleGVjKTsKKworICAgICAgICBhdXRvIGdsb2JhbE9iamVjdCA9IHJvb3RPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpOwogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgY29uc3Ry
dWN0b3Igb2JqZWN0LgogICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gb2JqLT5pbXA7CkBA
IC00OTYsNyArNTM4LDcgQEAgYm9vbCBfTlBOX0NvbnN0cnVjdChOUFAsIE5QT2JqZWN0KiBvLCBj
bwogICAgICAgICAKICAgICAgICAgLy8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAg
ICAgICAgIGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHJlc3VsdFYsIHJlc3VsdCk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQg
KzY4LDEzIEBAIHZvaWQgQ0luc3RhbmNlOjpzZXRHbG9iYWxFeGNlcHRpb24oU3RyaW4KIAogdm9p
ZCBDSW5zdGFuY2U6Om1vdmVHbG9iYWxFeGNlcHRpb25Ub0V4ZWNTdGF0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KICAgICBpZiAoZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29wZSwgY3JlYXRlRXJyb3IoZXhl
YywgZ2xvYmFsRXhjZXB0aW9uU3RyaW5nKCkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0SW50ZXJuYWwuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVJbnRlcm5hbC5o
PgogI2ltcG9ydCA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW1wb3J0IDxydW50aW1lL0Nh
dGNoU2NvcGUuaD4KICNpbXBvcnQgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgogI2ltcG9ydCA8cnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0Lmg+CkBAIC0xMjksOCArMTMwLDEwIEBAIHN0YXRpYyB2b2lkIGFkZEV4Y2VwdGlvblRvQ29u
c29sZShFeGVjU3QKIAogc3RhdGljIHZvaWQgYWRkRXhjZXB0aW9uVG9Db25zb2xlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0
aW9uKCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIGFkZEV4Y2VwdGlvblRvQ29uc29sZShleGVjLCBleGNl
cHRpb24pOwogfQogCkBAIC0zMzQsOSArMzM3LDEyIEBAIC0gKGlkKWNhbGxXZWJTY3JpcHRNZXRo
b2Q6KE5TU3RyaW5nICopbmEKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIExvb2sgdXAg
dGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBn
bG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1
dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CisgICAgVU5VU0VEX1BBUkFNKHNj
b3BlKTsKIAogICAgIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IFtzZWxmIF9pbXBdLT5nZXQoZXhl
YywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcobmFtZSkpKTsKICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTM2OSwxMCArMzc1LDEyIEBAIC0gKGlkKWV2YWx1YXRlV2ViU2Ny
aXB0OihOU1N0cmluZyAqKXNjcmkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIGF1
dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICBhdXRvJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIFVOVVNFRF9QQVJB
TShzY29wZSk7CiAgICAgCiAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNNYWluVGhy
ZWFkRXhlY1N0YXRlOjpwcm9maWxlZEV2YWx1YXRlKGV4ZWMsIEpTQzo6UHJvZmlsaW5nUmVhc29u
OjpPdGhlciwgbWFrZVNvdXJjZShTdHJpbmcoc2NyaXB0KSksIEpTQzo6SlNWYWx1ZSgpKTsKIApA
QCAtMzg2LDE3ICszOTQsMTkgQEAgLSAodm9pZClzZXRWYWx1ZTooaWQpdmFsdWUgZm9yS2V5OihO
U1N0cgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBh
dXRvIGdsb2JhbE9iamVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOwogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nh
c3Q8SlNPYmplY3QqPihbc2VsZiBfaW1wXSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0KTsKICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPnB1dChvYmplY3QsIGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpLCBjb252ZXJ0T2JqY1ZhbHVlVG9W
YWx1ZShleGVjLCAmdmFsdWUsIE9iamNPYmplY3RUeXBlLCBbc2VsZiBfcm9vdE9iamVjdF0pLCBz
bG90KTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgYWRkRXhjZXB0aW9uVG9Db25zb2xlKGV4
ZWMpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVh
ckV4Y2VwdGlvbigpOwogICAgIH0KIH0KIApAQCAtNDA1LDIyICs0MTUsMjUgQEAgLSAoaWQpdmFs
dWVGb3JLZXk6KE5TU3RyaW5nICopa2V5CiAgICAgaWYgKCFbc2VsZiBfaXNTYWZlU2NyaXB0XSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IFtzZWxmIF9yb290
T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBBU1NFUlQoIWV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKLQogICAgIGlkIHJlc3VsdE9iajsKICAgICB7CisgICAgICAgIGF1
dG8gZ2xvYmFsT2JqZWN0ID0gW3NlbGYgX3Jvb3RPYmplY3RdLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisKICAgICAgICAgLy8gTmVlZCB0
byBzY29wZSB0aGlzIGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgbG9jayBiZWZv
cmUgY2FsbGluZwogICAgICAgICAvLyBbc3VwZXIgdmFsdWVGb3JLZXk6a2V5XSB3aGljaCBtaWdo
dCB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGJ5cGFzcyB0aGUgSlNMb2NrIGRlc3RydWN0b3IsCiAg
ICAgICAgIC8vIGxlYXZpbmcgdGhlIGxvY2sgcGVybWFuZW50bHkgaGVsZAotICAgICAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKLSAgICAgICAgCisgICAgICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Cisg
ICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCiAg
ICAgICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBbc2VsZiBfaW1wXS0+Z2V0KGV4ZWMsIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgU3RyaW5nKGtleSkpKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7
CiAgICAgICAgICAgICByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0
VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2luUm9v
dE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNDM3LDE1ICs0NTAs
MTcgQEAgLSAodm9pZClyZW1vdmVXZWJTY3JpcHRLZXk6KE5TU3RyaW5nICopawogICAgIGlmICgh
W3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsK
LSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9iamVj
dCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eShbc2VsZiBf
aW1wXSwgZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCBTdHJpbmcoa2V5KSkpOwog
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0g
ICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgfQogfQogCkBAIC00NTQsMTUgKzQ2OSwxNyBAQCAtIChCT09MKWhhc1dlYlNj
cmlwdEtleTooTlNTdHJpbmcgKilrZXkKICAgICBpZiAoIVtzZWxmIF9pc1NhZmVTY3JpcHRdKQog
ICAgICAgICByZXR1cm4gTk87CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9i
amVjdF0tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5o
YWRFeGNlcHRpb24oKSk7CisgICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVj
dF0tPmdsb2JhbE9iamVjdCgpOworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCk7CiAKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBCT09MIHJlc3VsdCA9
IFtzZWxmIF9pbXBdLT5oYXNQcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4
ZWMsIFN0cmluZyhrZXkpKSk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2VwdGlv
blRvQ29uc29sZShleGVjKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNDkwLDE2ICs1MDcsMTggQEAgLSAoaWQpd2ViU2NyaXB0VmFsdWVBdEluZGV4Oih1bnNpZ25l
ZClpbgogICAgIGlmICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVj
dCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7Cisg
ICAgYXV0byBnbG9iYWxPYmplY3QgPSBbc2VsZiBfcm9vdE9iamVjdF0tPmdsb2JhbE9iamVjdCgp
OworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBKU0xv
Y2tIb2xkZXIgbG9jayhleGVjKTsKICAgICBKU0M6OkpTVmFsdWUgcmVzdWx0ID0gW3NlbGYgX2lt
cF0tPmdldChleGVjLCBpbmRleCk7CiAKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CiAgICAgICAgIGFkZEV4Y2Vw
dGlvblRvQ29uc29sZShleGVjKTsKICAgICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICB9CiAKICAgICBpZCByZXN1bHRPYmogPSBbV2ViU2NyaXB0T2JqZWN0IF9jb252
ZXJ0VmFsdWVUb09iamNWYWx1ZTpyZXN1bHQgb3JpZ2luUm9vdE9iamVjdDpbc2VsZiBfb3JpZ2lu
Um9vdE9iamVjdF0gcm9vdE9iamVjdDpbc2VsZiBfcm9vdE9iamVjdF1dOwpAQCAtNTEyLDE1ICs1
MzEsMTcgQEAgLSAodm9pZClzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXg6KHVuc2lnbgogICAgIGlm
ICghW3NlbGYgX2lzU2FmZVNjcmlwdF0pCiAgICAgICAgIHJldHVybjsKIAotICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMo
KTsKLSAgICBBU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICBhdXRvIGdsb2JhbE9i
amVjdCA9IFtzZWxmIF9yb290T2JqZWN0XS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgYXV0byYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogICAgIFtzZWxmIF9pbXBdLT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KFtzZWxmIF9p
bXBdLCBleGVjLCBpbmRleCwgY29udmVydE9iamNWYWx1ZVRvVmFsdWUoZXhlYywgJnZhbHVlLCBP
YmpjT2JqZWN0VHlwZSwgW3NlbGYgX3Jvb3RPYmplY3RdKSwgZmFsc2UpOwogCi0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkgewogICAgICAgICBhZGRFeGNlcHRpb25Ub0NvbnNvbGUoZXhlYyk7Ci0gICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0
ZW5zaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDkgQEAgc3RhdGljIGJvb2wgY29udGFpbnNP
bmx5QVNDSUlXaXRoTm9VcHBlcgogICAgIAogc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBnZXREb21h
aW5MaXN0KEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QqIGFycmF5T2JqZWN0LCBWZWN0
b3I8U3RyaW5nPiYgdmVjdG9yKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBBU1NFUlQodmVjdG9yLmlz
RW1wdHkoKSk7CiAgICAgaWYgKCFhcnJheU9iamVjdCB8fCAhaXNKU0FycmF5KGFycmF5T2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWREb21h
aW5MaXN0OwpAQCAtNjgsNyArNzEsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFp
bkxpc3QoRXhlCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1Zh
bHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMu
aGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlLmlzU3RyaW5nKCkpCisgICAgICAgIGlmIChzY29wZS5l
eGNlcHRpb24oKSB8fCAhdmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkRG9tYWluTGlzdDsKICAgICAgICAgCiAgICAg
ICAgIC8vIERvbWFpbnMgc2hvdWxkIGJlIHB1bnljb2RlIGVuY29kZWQgbG93ZXIgY2FzZS4KQEAg
LTg0LDExICs4NywxNCBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldERvbWFpbkxpc3QoRXhl
CiAKIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgZ2V0VHlwZUZsYWdzKEV4ZWNTdGF0ZSYgZXhlYywg
Y29uc3QgSlNWYWx1ZSYgdHlwZVZhbHVlLCBSZXNvdXJjZUZsYWdzJiBmbGFncywgdWludDE2X3Qg
KCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYpKQogeworICAgIFZNJiB2bSA9IGV4ZWMudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKICAgICBpZiAo
IXR5cGVWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgY29uc3Qg
SlNPYmplY3QqIG9iamVjdCA9IHR5cGVWYWx1ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgQVNTRVJU
KCFleGVjLmhhZEV4Y2VwdGlvbigpKTsKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
ICAgICBpZiAoIWlzSlNBcnJheShvYmplY3QpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCkBAIC05Nyw3ICsxMDMs
NyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGdldFR5cGVGbGFncyhFeGVjCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBjb25zdCBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdl
dEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZh
bHVlKQorICAgICAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIXZhbHVlKQogICAgICAgICAg
ICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRPYmplY3RJblRyaWdn
ZXJGbGFnc0FycmF5OwogICAgICAgICAKICAgICAgICAgU3RyaW5nIG5hbWUgPSB2YWx1ZS50b1dU
RlN0cmluZygmZXhlYyk7CkBAIC0xMTMsMTIgKzExOSwxNSBAQCBzdGF0aWMgc3RkOjplcnJvcl9j
b2RlIGdldFR5cGVGbGFncyhFeGVjCiAgICAgCiBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRU
cmlnZ2VyKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNPYmplY3QmIHJ1bGVPYmplY3QsIFRyaWdn
ZXImIHRyaWdnZXIpCiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwogICAgIGNvbnN0IEpTVmFsdWUgdHJpZ2dlck9i
amVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVj
LCAidHJpZ2dlciIpKTsKLSAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRp
b24oKSB8fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKQorICAgIGlmICghdHJpZ2dlck9iamVj
dCB8fCBzY29wZS5leGNlcHRpb24oKSB8fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKQogICAg
ICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFRyaWdnZXI7CiAg
ICAgCiAgICAgY29uc3QgSlNWYWx1ZSB1cmxGaWx0ZXJPYmplY3QgPSB0cmlnZ2VyT2JqZWN0Lmdl
dCgmZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1maWx0ZXIiKSk7Ci0g
ICAgaWYgKCF1cmxGaWx0ZXJPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhdXJsRmls
dGVyT2JqZWN0LmlzU3RyaW5nKCkpCisgICAgaWYgKCF1cmxGaWx0ZXJPYmplY3QgfHwgc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgIXVybEZpbHRlck9iamVjdC5pc1N0cmluZygpKQogICAgICAgICByZXR1
cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJpZ2dlcjsK
IAogICAgIFN0cmluZyB1cmxGaWx0ZXIgPSB1cmxGaWx0ZXJPYmplY3QudG9XVEZTdHJpbmcoJmV4
ZWMpOwpAQCAtMTI4LDExICsxMzcsMTEgQEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJp
Z2dlcihFeGVjUwogICAgIHRyaWdnZXIudXJsRmlsdGVyID0gdXJsRmlsdGVyOwogCiAgICAgY29u
c3QgSlNWYWx1ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRp
dmUiKSk7Ci0gICAgaWYgKHVybEZpbHRlckNhc2VWYWx1ZSAmJiAhZXhlYy5oYWRFeGNlcHRpb24o
KSAmJiB1cmxGaWx0ZXJDYXNlVmFsdWUuaXNCb29sZWFuKCkpCisgICAgaWYgKHVybEZpbHRlckNh
c2VWYWx1ZSAmJiAhc2NvcGUuZXhjZXB0aW9uKCkgJiYgdXJsRmlsdGVyQ2FzZVZhbHVlLmlzQm9v
bGVhbigpKQogICAgICAgICB0cmlnZ2VyLnVybEZpbHRlcklzQ2FzZVNlbnNpdGl2ZSA9IHVybEZp
bHRlckNhc2VWYWx1ZS50b0Jvb2xlYW4oJmV4ZWMpOwogCiAgICAgY29uc3QgSlNWYWx1ZSByZXNv
dXJjZVR5cGVWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZleGVjLCAicmVzb3VyY2UtdHlwZSIpKTsKLSAgICBpZiAoIWV4ZWMuaGFkRXhjZXB0
aW9uKCkgJiYgcmVzb3VyY2VUeXBlVmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlmICghc2NvcGUu
ZXhjZXB0aW9uKCkgJiYgcmVzb3VyY2VUeXBlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICBh
dXRvIHR5cGVGbGFnc0Vycm9yID0gZ2V0VHlwZUZsYWdzKGV4ZWMsIHJlc291cmNlVHlwZVZhbHVl
LCB0cmlnZ2VyLmZsYWdzLCByZWFkUmVzb3VyY2VUeXBlKTsKICAgICAgICAgaWYgKHR5cGVGbGFn
c0Vycm9yKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVGbGFnc0Vycm9yOwpAQCAtMTQwLDcgKzE0
OSw3IEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZFRyaWdnZXIoRXhlY1MKICAgICAgICAg
cmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJh
eTsKIAogICAgIGNvbnN0IEpTVmFsdWUgbG9hZFR5cGVWYWx1ZSA9IHRyaWdnZXJPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZleGVjLCAibG9hZC10eXBlIikpOwotICAg
IGlmICghZXhlYy5oYWRFeGNlcHRpb24oKSAmJiBsb2FkVHlwZVZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICBpZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIGxvYWRUeXBlVmFsdWUuaXNPYmplY3QoKSkg
ewogICAgICAgICBhdXRvIHR5cGVGbGFnc0Vycm9yID0gZ2V0VHlwZUZsYWdzKGV4ZWMsIGxvYWRU
eXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRMb2FkVHlwZSk7CiAgICAgICAgIGlmICh0eXBl
RmxhZ3NFcnJvcikKICAgICAgICAgICAgIHJldHVybiB0eXBlRmxhZ3NFcnJvcjsKQEAgLTE0OCw3
ICsxNTcsNyBAQCBzdGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRUcmlnZ2VyKEV4ZWNTCiAgICAg
ICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdz
QXJyYXk7CiAKICAgICBjb25zdCBKU1ZhbHVlIGlmRG9tYWluID0gdHJpZ2dlck9iamVjdC5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJpZi1kb21haW4iKSk7Ci0gICAg
aWYgKCFleGVjLmhhZEV4Y2VwdGlvbigpICYmIGlmRG9tYWluLmlzT2JqZWN0KCkpIHsKKyAgICBp
ZiAoIXNjb3BlLmV4Y2VwdGlvbigpICYmIGlmRG9tYWluLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
YXV0byBpZkRvbWFpbkVycm9yID0gZ2V0RG9tYWluTGlzdChleGVjLCBhc09iamVjdChpZkRvbWFp
biksIHRyaWdnZXIuZG9tYWlucyk7CiAgICAgICAgIGlmIChpZkRvbWFpbkVycm9yKQogICAgICAg
ICAgICAgcmV0dXJuIGlmRG9tYWluRXJyb3I7CkBAIC0xNjAsNyArMTY5LDcgQEAgc3RhdGljIHN0
ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihFeGVjUwogICAgICAgICByZXR1cm4gQ29udGVudEV4
dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZERvbWFpbkxpc3Q7CiAgICAgCiAgICAgY29uc3QgSlNW
YWx1ZSB1bmxlc3NEb21haW4gPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmZXhlYywgInVubGVzcy1kb21haW4iKSk7Ci0gICAgaWYgKCFleGVjLmhhZEV4
Y2VwdGlvbigpICYmIHVubGVzc0RvbWFpbi5pc09iamVjdCgpKSB7CisgICAgaWYgKCFzY29wZS5l
eGNlcHRpb24oKSAmJiB1bmxlc3NEb21haW4uaXNPYmplY3QoKSkgewogICAgICAgICBpZiAodHJp
Z2dlci5kb21haW5Db25kaXRpb24gIT0gVHJpZ2dlcjo6RG9tYWluQ29uZGl0aW9uOjpOb25lKQog
ICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlVubGVzc0FuZElm
RG9tYWluOwogICAgICAgICBhdXRvIHVubGVzc0RvbWFpbkVycm9yID0gZ2V0RG9tYWluTGlzdChl
eGVjLCBhc09iamVjdCh1bmxlc3NEb21haW4pLCB0cmlnZ2VyLmRvbWFpbnMpOwpAQCAtMTg2LDEz
ICsxOTUsMTYgQEAgc3RhdGljIGJvb2wgaXNWYWxpZFNlbGVjdG9yKGNvbnN0IFN0cmluZwogCiBz
dGF0aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRBY3Rpb24oRXhlY1N0YXRlJiBleGVjLCBjb25zdCBK
U09iamVjdCYgcnVsZU9iamVjdCwgQWN0aW9uJiBhY3Rpb24sIGJvb2wmIHZhbGlkU2VsZWN0b3Ip
CiB7CisgICAgVk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKwogICAgIHZhbGlkU2VsZWN0b3IgPSB0cnVlOwogICAgIGNvbnN0IEpT
VmFsdWUgYWN0aW9uT2JqZWN0ID0gcnVsZU9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXI6OmZy
b21TdHJpbmcoJmV4ZWMsICJhY3Rpb24iKSk7Ci0gICAgaWYgKCFhY3Rpb25PYmplY3QgfHwgZXhl
Yy5oYWRFeGNlcHRpb24oKSB8fCAhYWN0aW9uT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgaWYgKCFh
Y3Rpb25PYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVj
dCgpKQogICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFj
dGlvbjsKIAogICAgIGNvbnN0IEpTVmFsdWUgdHlwZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQo
JmV4ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJ0eXBlIikpOwotICAgIGlmICgh
dHlwZU9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF0eXBlT2JqZWN0LmlzU3RyaW5n
KCkpCisgICAgaWYgKCF0eXBlT2JqZWN0IHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICF0eXBlT2Jq
ZWN0LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpT
T05JbnZhbGlkQWN0aW9uVHlwZTsKIAogICAgIFN0cmluZyBhY3Rpb25UeXBlID0gdHlwZU9iamVj
dC50b1dURlN0cmluZygmZXhlYyk7CkBAIC0yMDUsNyArMjE3LDcgQEAgc3RhdGljIHN0ZDo6ZXJy
b3JfY29kZSBsb2FkQWN0aW9uKEV4ZWNTdAogICAgICAgICBhY3Rpb24gPSBBY3Rpb25UeXBlOjpC
bG9ja0Nvb2tpZXM7CiAgICAgZWxzZSBpZiAoYWN0aW9uVHlwZSA9PSAiY3NzLWRpc3BsYXktbm9u
ZSIpIHsKICAgICAgICAgSlNWYWx1ZSBzZWxlY3RvciA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMs
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJmV4ZWMsICJzZWxlY3RvciIpKTsKLSAgICAgICAgaWYg
KCFzZWxlY3RvciB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICFzZWxlY3Rvci5pc1N0cmluZygp
KQorICAgICAgICBpZiAoIXNlbGVjdG9yIHx8IHNjb3BlLmV4Y2VwdGlvbigpIHx8ICFzZWxlY3Rv
ci5pc1N0cmluZygpKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9uZUFjdGlvblR5cGU7CiAKICAgICAgICAgU3RyaW5nIHMg
PSBzZWxlY3Rvci50b1dURlN0cmluZygmZXhlYyk7CkBAIC0yNDMsMTcgKzI1NSwyMCBAQCBzdGF0
aWMgc3RkOjplcnJvcl9jb2RlIGxvYWRSdWxlKEV4ZWNTdGF0CiAKIHN0YXRpYyBzdGQ6OmVycm9y
X2NvZGUgbG9hZEVuY29kZWRSdWxlcyhFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IFN0cmluZyYgcnVs
ZXMsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVMaXN0KQogeworICAgIFZNJiB2
bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKICAgICAvLyBGSVhNRTogSlNPTlBhcnNlIHNob3VsZCByZXF1aXJlIGNhbGxiYWNrcyBpbnN0
ZWFkIG9mIGFuIEV4ZWNTdGF0ZS4KICAgICBjb25zdCBKU1ZhbHVlIGRlY29kZWRSdWxlcyA9IEpT
T05QYXJzZSgmZXhlYywgcnVsZXMpOwogCi0gICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwg
IWRlY29kZWRSdWxlcykKKyAgICBpZiAoc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWRlY29kZWRSdWxl
cykKICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWQ7CiAK
ICAgICBpZiAoIWRlY29kZWRSdWxlcy5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OVG9wTGV2ZWxTdHJ1Y3R1cmVOb3RBbk9iamVjdDsKIAogICAg
IGNvbnN0IEpTT2JqZWN0KiB0b3BMZXZlbE9iamVjdCA9IGRlY29kZWRSdWxlcy50b09iamVjdCgm
ZXhlYyk7Ci0gICAgaWYgKCF0b3BMZXZlbE9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpKQor
ICAgIGlmICghdG9wTGV2ZWxPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuT2Jq
ZWN0OwogICAgIAogICAgIGlmICghaXNKU0FycmF5KHRvcExldmVsT2JqZWN0KSkKQEAgLTI2OSwx
MSArMjg0LDExIEBAIHN0YXRpYyBzdGQ6OmVycm9yX2NvZGUgbG9hZEVuY29kZWRSdWxlcygKICAg
ICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvb01hbnlSdWxlczsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgY29uc3Qg
SlNWYWx1ZSB2YWx1ZSA9IHRvcExldmVsQXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAg
ICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlKQorICAgICAgICBpZiAoc2NvcGUu
ZXhjZXB0aW9uKCkgfHwgIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNp
b25FcnJvcjo6SlNPTkludmFsaWRPYmplY3RJblRvcExldmVsQXJyYXk7CiAKICAgICAgICAgY29u
c3QgSlNPYmplY3QqIHJ1bGVPYmplY3QgPSB2YWx1ZS50b09iamVjdCgmZXhlYyk7Ci0gICAgICAg
IGlmICghcnVsZU9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpZiAoIXJ1
bGVPYmplY3QgfHwgc2NvcGUuZXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gQ29udGVu
dEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJ1bGU7CiAKICAgICAgICAgYXV0byBlcnJvciA9
IGxvYWRSdWxlKGV4ZWMsICpydWxlT2JqZWN0LCBsb2NhbFJ1bGVMaXN0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAwMiw2ICs0MDAyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0
VHJhYwogCiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBIVE1MTWVkaWFFbGVt
ZW50JiBtZWRpYSkKIHsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIG1lZGlhSlNX
cmFwcGVyID0gdG9KUygmZXhlYywgJmdsb2JhbE9iamVjdCwgbWVkaWEpOwogICAgIAogICAgIC8v
IFJldHJpZXZlIHRoZSBjb250cm9sbGVyIHRocm91Z2ggdGhlIEpTIG9iamVjdCBncmFwaApAQCAt
NDAwOSwxOCArNDAxMSwxOCBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1ZhbHVl
KEpTCiAgICAgaWYgKCFtZWRpYUpTV3JhcHBlck9iamVjdCkKICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CiAgICAgCi0gICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xzSG9zdCA9IEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy52bSgpLCAiY29udHJvbHNIb3N0Iik7CisgICAg
SlNDOjpJZGVudGlmaWVyIGNvbnRyb2xzSG9zdCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJjb250cm9sc0hvc3QiKTsKICAgICBKU0M6OkpTVmFsdWUgY29udHJvbHNIb3N0SlNX
cmFwcGVyID0gbWVkaWFKU1dyYXBwZXJPYmplY3QtPmdldCgmZXhlYywgY29udHJvbHNIb3N0KTsK
LSAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKIAogICAgIEpTQzo6SlNP
YmplY3QqIGNvbnRyb2xzSG9zdEpTV3JhcHBlck9iamVjdCA9IEpTQzo6anNEeW5hbWljQ2FzdDxK
U0M6OkpTT2JqZWN0Kj4oY29udHJvbHNIb3N0SlNXcmFwcGVyKTsKICAgICBpZiAoIWNvbnRyb2xz
SG9zdEpTV3JhcHBlck9iamVjdCkKICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CiAKLSAg
ICBKU0M6OklkZW50aWZpZXIgY29udHJvbGxlcklEID0gSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZleGVjLnZtKCksICJjb250cm9sbGVyIik7CisgICAgSlNDOjpJZGVudGlmaWVyIGNvbnRy
b2xsZXJJRCA9IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJjb250cm9sbGVyIik7
CiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJKU1dyYXBwZXIgPSBjb250cm9sc0hvc3RKU1dy
YXBwZXJPYmplY3QtPmdldCgmZXhlYywgY29udHJvbGxlcklEKTsKLSAgICBpZiAoZXhlYy5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKIAogICAgIHJldHVybiBjb250cm9sbGVySlNXcmFwcGVy
OwpAQCAtNDA1Nyw4ICs0MDU5LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlQ2Fw
dGlvbkNvbnQKIAogICAgIFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdENvbnRyb2xsZXIgPSBkb2N1
bWVudCgpLmZyYW1lKCktPnNjcmlwdCgpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdENvbnRyb2xsZXIu
Z2xvYmFsT2JqZWN0KHdvcmxkKSk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsK
IAogICAgIEpTQzo6SlNWYWx1ZSBjb250cm9sbGVyVmFsdWUgPSBjb250cm9sbGVySlNWYWx1ZSgq
ZXhlYywgKmdsb2JhbE9iamVjdCwgKnRoaXMpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRyb2xs
ZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KGNvbnRyb2xsZXJW
YWx1ZSk7CkBAIC00MDgzLDcgKzQwODcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0
ZUNhcHRpb25Db250CiAKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIG5vQXJndW1lbnRz
OwogICAgIEpTQzo6Y2FsbChleGVjLCBtZXRob2RPYmplY3QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
Y29udHJvbGxlck9iamVjdCwgbm9Bcmd1bWVudHMpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKIAogICAgIG1faGF2ZVNldFVwQ2FwdGlv
bkNvbnRhaW5lciA9IHRydWU7CiAjZW5kaWYKQEAgLTY2MDMsOCArNjYwNywxMCBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhQ29udHJvCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCA9IGVuc3VyZUlzb2xhdGVkV29ybGQoKTsKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3Jp
cHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9IGds
b2JhbE9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAi
Y3JlYXRlQ29udHJvbHMiKSk7CiAgICAgaWYgKGZ1bmN0aW9uVmFsdWUuaXNGdW5jdGlvbigpKQpA
QCAtNjYxNyw4ICs2NjIzLDggQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYUNv
bnRybwogICAgIFVSTCBzY3JpcHRVUkw7CiAjZW5kaWYKICAgICBzY3JpcHRDb250cm9sbGVyLmV2
YWx1YXRlSW5Xb3JsZChTY3JpcHRTb3VyY2VDb2RlKG1lZGlhQ29udHJvbHNTY3JpcHQsIHNjcmlw
dFVSTCksIHdvcmxkKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKSB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKQEAgLTY2NzYsOCArNjY4MiwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAKICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHRDb250
cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzY3Jp
cHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwotICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CiAKICAgICAvLyBUaGUgbWVkaWEgY29udHJvbHMgc2NyaXB0IG11c3QgcHJv
dmlkZSBhIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGV0YWlscy4KICAgICAvLyBOYW1lOiBj
cmVhdGVDb250cm9scwpAQCAtNjcwNCwyMSArNjcxMiwyMSBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmRpZEFkZFVzZXJBZ2VudFNoCiAgICAgYXJnTGlzdC5hcHBlbmQobWVkaWFDb250cm9sc0hv
c3RKU1dyYXBwZXIpOwogCiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rpb24gPSBmdW5jdGlvblZh
bHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFkRXhjZXB0aW9uKCkpOwor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLT5tZXRob2RUYWJsZSgp
LT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBK
U0M6OkNhbGxUeXBlOjpOb25lKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OkpTVmFsdWUg
Y29udHJvbGxlclZhbHVlID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIGdsb2JhbE9iamVjdCwgYXJnTGlzdCk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24o
KTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIEpTQzo6SlNPYmplY3QqIGNvbnRy
b2xsZXJPYmplY3QgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDOjpKU09iamVjdCo+KGNvbnRyb2xs
ZXJWYWx1ZSk7CiAgICAgaWYgKCFjb250cm9sbGVyT2JqZWN0KQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBDb25uZWN0IHRoZSBNZWRpYSwgTWVkaWFDb250cm9sbGVySG9zdCwgYW5kIENvbnRy
b2xsZXIgc28gdGhlIEdDIGtub3dzIGFib3V0IHRoZWlyIHJlbGF0aW9uc2hpcAogICAgIEpTQzo6
SlNPYmplY3QqIG1lZGlhSlNXcmFwcGVyT2JqZWN0ID0gbWVkaWFKU1dyYXBwZXIudG9PYmplY3Qo
ZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpJZGVudGlmaWVyIGNvbnRyb2xzSG9zdCA9IEpT
Qzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmZXhlYy0+dm0oKSwgImNvbnRyb2xzSG9zdCIpOwog
ICAgIAogICAgIEFTU0VSVCghbWVkaWFKU1dyYXBwZXJPYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMs
IGNvbnRyb2xzSG9zdCkpOwpAQCAtNjczOCw4ICs2NzQ2LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpkaWRBZGRVc2VyQWdlbnRTaAogICAgIHVwZGF0ZVBhZ2VTY2FsZUZhY3RvckpTUHJvcGVy
dHkoKTsKICAgICB1cGRhdGVVc2VzTFRSVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkpTUHJv
cGVydHkoKTsKIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQor
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNldE1lZGlhQ29udHJvbHNEZXBlbmRPblBhZ2VTY2FsZUZhY3Rvcihib29sIGRlcGVuZHNP
blBhZ2VTY2FsZSkKQEAgLTY3NzQsMjEgKzY3ODIsMjMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojp1cGRhdGVNZWRpYUNvbnRybwogICAgIERPTVdyYXBwZXJXb3JsZCYgd29ybGQgPSBlbnN1cmVJ
c29sYXRlZFdvcmxkKCk7CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0Q29udHJvbGxlciA9
IGRvY3VtZW50KCkuZnJhbWUoKS0+c2NyaXB0KCk7CiAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc2NyaXB0Q29udHJv
bGxlci5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4
ZWMpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGNvbnRyb2xsZXJWYWx1ZSA9IGNvbnRyb2xsZXJKU1Zh
bHVlKCpleGVjLCAqZ2xvYmFsT2JqZWN0LCAqdGhpcyk7CiAgICAgSlNDOjpKU09iamVjdCogY29u
dHJvbGxlck9iamVjdCA9IGNvbnRyb2xsZXJWYWx1ZS50b09iamVjdChleGVjKTsKIAotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0M6OkpTVmFsdWUgZnVuY3Rpb25WYWx1ZSA9
IGNvbnRyb2xsZXJPYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
ZXhlYywgImhhbmRsZVByZXNlbnRhdGlvbk1vZGVDaGFuZ2UiKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpKU09iamVjdCogZnVuY3Rp
b24gPSBmdW5jdGlvblZhbHVlLnRvT2JqZWN0KGV4ZWMpOwotICAgIEFTU0VSVCghZXhlYy0+aGFk
RXhjZXB0aW9uKCkpOworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgIEpTQzo6
Q2FsbERhdGEgY2FsbERhdGE7CiAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9u
LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlm
IChjYWxsVHlwZSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKQpAQCAtNjgxNSwyMSArNjgyNSwyMyBA
QCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVudDo6Z2V0Q3VycmVudE1lZGlhCiAKICAgICBTY3JpcHRD
b250cm9sbGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQo
KTsKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdCh3b3JsZCkpOwor
ICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAKICAgICBKU0M6OkpTVmFsdWUgY29u
dHJvbGxlclZhbHVlID0gY29udHJvbGxlckpTVmFsdWUoKmV4ZWMsICpnbG9iYWxPYmplY3QsICp0
aGlzKTsKICAgICBKU0M6OkpTT2JqZWN0KiBjb250cm9sbGVyT2JqZWN0ID0gY29udHJvbGxlclZh
bHVlLnRvT2JqZWN0KGV4ZWMpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogCiAgICAgSlNDOjpKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUgPSBjb250cm9sbGVyT2Jq
ZWN0LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnZXRDdXJy
ZW50Q29udHJvbHNTdGF0dXMiKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8IGZ1
bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpIHx8IGZ1bmN0aW9uVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBmdW5jdGlvbiA9
IGZ1bmN0aW9uVmFsdWUudG9PYmplY3QoZXhlYyk7Ci0gICAgQVNTRVJUKCFleGVjLT5oYWRFeGNl
cHRpb24oKSk7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CiAgICAgSlNDOjpDYWxs
RGF0YSBjYWxsRGF0YTsKICAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gZnVuY3Rpb24tPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdMaXN0OwpAQCAtNjgzOCw3ICs2ODUwLDcgQEAgU3RyaW5n
IEhUTUxNZWRpYUVsZW1lbnQ6OmdldEN1cnJlbnRNZWRpYQogCiAgICAgSlNDOjpKU1ZhbHVlIG91
dHB1dFZhbHVlID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IGNvbnRyb2xsZXJPYmplY3QsIGFyZ0xpc3QpOwogCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogCiAgICAgcmV0dXJuIG91dHB1dFZhbHVlLmdldFN0cmluZyhleGVj
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMjA1NTY2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDkgKzM5MiwxMSBAQCB2b2lk
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAKICAgICBTY3JpcHRDb250cm9s
bGVyJiBzY3JpcHRDb250cm9sbGVyID0gZG9jdW1lbnQoKS5mcmFtZSgpLT5zY3JpcHQoKTsKICAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzY3JpcHRDb250cm9sbGVyLmdsb2JhbE9iamVjdChpc29sYXRlZFdvcmxkKSk7
Ci0gICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsK
IAotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgSlNDOjpWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAKICAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ0xpc3Q7CiAgICAgYXJnTGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHJvb3QpKTsKQEAgLTQwOCw4ICs0MTAsOCBAQCB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmRpZEFkZFVzZXJBCiAgICAgLy8gSXQgaXMgZXhwZWN0ZWQgdGhlIEpTIGZpbGUg
cHJvdmlkZXMgYSBjcmVhdGVPdmVybGF5KHNoYWRvd1Jvb3QsIHRpdGxlLCBzdWJ0aXRsZSkgZnVu
Y3Rpb24uCiAgICAgSlNDOjpKU09iamVjdCogb3ZlcmxheSA9IGdsb2JhbE9iamVjdC0+Z2V0KGV4
ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiY3JlYXRlT3ZlcmxheSIpKS50
b09iamVjdChleGVjKTsKICAgICBpZiAoIW92ZXJsYXkpIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKTsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgQVNTRVJUKHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRh
OwpAQCAtNDE4LDcgKzQyMCw3IEBAIHZvaWQgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6ZGlkQWRk
VXNlckEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNDOjpjYWxsKGV4ZWMsIG92ZXJsYXksIGNh
bGxUeXBlLCBjYWxsRGF0YSwgZ2xvYmFsT2JqZWN0LCBhcmdMaXN0KTsKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiB9CiAKIGJvb2wgSFRN
TFBsdWdJbkltYWdlRWxlbWVudDo6cGFydE9mU25hcHNob3RPdmVybGF5KGNvbnN0IE5vZGUqIG5v
ZGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNi0wOS0w
NyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIENhdGNoU2Nv
cGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZpYSBUaHJvd1Njb3BlIG9y
IENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TlBKU09iamVjdDo6aGFzTWV0aG9kKToKKyAgICAgICAgKFdlYktpdDo6TlBK
U09iamVjdDo6aGFzUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OnNldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2Vi
S2l0OjpOUEpTT2JqZWN0Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjppbnZva2UpOgorCiAyMDE2LTA5LTA3ICBLb25zdGFudGluIFRva2FyZXYgIDxhbm51bGVuQHlh
bmRleC5ydT4KIAogICAgICAgICBbR1RLXSBNYWtlIGluc3BlY3Rpb24gb2YgSW5zcGVjdG9yIGNv
bmRpdGlvbmFsIG9uIERFVkVMT1BFUl9NT0RFCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDU1NjYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTlBKU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSwxMCArMTAxLDEyIEBAIGJv
b2wgTlBKU09iamVjdDo6aGFzTWV0aG9kKE5QSWRlbnRpZmllciAKICAgICBpZiAoIWV4ZWMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTVmFsdWUgdmFsdWUg
PSBtX2pzT2JqZWN0LT5nZXQoZXhlYywgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGV4ZWMs
IGlkZW50aWZpZXJSZXApKTsgICAgCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgcmV0
dXJuIGdldENhbGxEYXRhKHZhbHVlLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGU6Ok5vbmU7CkBAIC0x
NDcsNyArMTQ5LDkgQEAgYm9vbCBOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQog
ICAgIGlmICghZXhlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIEpTTG9ja0hv
bGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
IAogICAgIGJvb2wgcmVzdWx0OwogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQpA
QCAtMTU1LDcgKzE1OSw3IEBAIGJvb2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlm
aWUKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IG1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKIAotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0xNjcsNyArMTcxLDEwIEBAIGJvb2wgTlBKU09iamVjdDo6Z2V0UHJvcGVydHkoTlBJZGVu
dGlmaWUKICAgICBpZiAoIWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKKwogICAgIEpTVmFsdWUganNSZXN1bHQ7CiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3Ry
aW5nKCkpCiAgICAgICAgIGpzUmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGV4ZWMsIGlkZW50aWZp
ZXJGcm9tSWRlbnRpZmllclJlcChleGVjLCBpZGVudGlmaWVyUmVwKSk7CkBAIC0xNzUsNyArMTgy
LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgICAgICBq
c1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7
CiAgICAgCiAgICAgbV9vYmplY3RNYXAtPmNvbnZlcnRKU1ZhbHVlVG9OUFZhcmlhbnQoZXhlYywg
anNSZXN1bHQsICpyZXN1bHQpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg3LDcgKzE5
NCw5IEBAIGJvb2wgTlBKU09iamVjdDo6c2V0UHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAo
IWV4ZWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2Nr
KHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSBtX29iamVjdE1hcC0+Y29udmVydE5QVmFyaWFudFRvSlNWYWx1ZShl
eGVjLCBtX29iamVjdE1hcC0+Z2xvYmFsT2JqZWN0KCksICp2YWx1ZSk7CiAgICAgaWYgKGlkZW50
aWZpZXJSZXAtPmlzU3RyaW5nKCkpIHsKQEAgLTE5NSw3ICsyMDQsNyBAQCBib29sIE5QSlNPYmpl
Y3Q6OnNldFByb3BlcnR5KE5QSWRlbnRpZmllCiAgICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPnB1dChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyRnJvbUlkZW50aWZp
ZXJSZXAoZXhlYywgaWRlbnRpZmllclJlcCksIGpzVmFsdWUsIHNsb3QpOwogICAgIH0gZWxzZQog
ICAgICAgICBtX2pzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG1fanNPYmplY3Qu
Z2V0KCksIGV4ZWMsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpLCBqc1ZhbHVlLCBmYWxzZSk7Ci0g
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjA4LDI2ICsyMTcsMjkgQEAgYm9vbCBOUEpT
T2JqZWN0OjpyZW1vdmVQcm9wZXJ0eShOUElkZW50aQogICAgIGlmICghZXhlYykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlz
U3RyaW5nKCkpIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gaWRlbnRpZmllckZy
b21JZGVudGlmaWVyUmVwKGV4ZWMsIGlkZW50aWZpZXJSZXApOwogICAgICAgICAKICAgICAgICAg
aWYgKCFtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyKSkgewotICAgICAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG1fanNP
YmplY3QuZ2V0KCksIGV4ZWMsIGlkZW50aWZpZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9qc09iamVjdC0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkp
KSB7Ci0gICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCiAgICAgICAgIG1fanNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleChtX2pzT2JqZWN0LmdldCgpLCBleGVjLCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CiAg
ICAgfQogCi0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTksNyArMjcxLDkgQEAgYm9vbCBO
UEpTT2JqZWN0Ojpjb25zdHJ1Y3QoY29uc3QgTlBWYXJpYQogICAgIGlmICghZXhlYykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25z
dHJ1Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IGdldENvbnN0cnVj
dERhdGEobV9qc09iamVjdC5nZXQoKSwgY29uc3RydWN0RGF0YSk7CkBAIC0yNzUsMTMgKzI4OSwx
NiBAQCBib29sIE5QSlNPYmplY3Q6OmNvbnN0cnVjdChjb25zdCBOUFZhcmlhCiAgICAgCiAgICAg
Ly8gQ29udmVydCBhbmQgcmV0dXJuIHRoZSBuZXcgb2JqZWN0LgogICAgIG1fb2JqZWN0TWFwLT5j
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHZhbHVlLCAqcmVzdWx0KTsKLSAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBOUEpTT2JqZWN0OjppbnZva2UoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGZ1bmN0aW9uLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3VudCwgTlBWYXJpYW50KiBy
ZXN1bHQpCiB7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICBDYWxs
VHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgaWYg
KGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKQpAQCAtMjk2LDcgKzMxMyw3IEBAIGJvb2wgTlBK
U09iamVjdDo6aW52b2tlKEV4ZWNTdGF0ZSogZXhlYywKIAogICAgIC8vIENvbnZlcnQgYW5kIHJl
dHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgIG1fb2JqZWN0TWFwLT5j
b252ZXJ0SlNWYWx1ZVRvTlBWYXJpYW50KGV4ZWMsIHZhbHVlLCAqcmVzdWx0KTsKLSAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU1NjYp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyNCBAQAorMjAxNi0wOS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWRkIENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJl
IHZpYSBUaHJvd1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5OjppbnZva2VEZWZhdWx0KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5Ojpjb25zdHJ1Y3QpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHk6OmdldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVn
aW5JbnN0YW5jZVByb3h5OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpoYXNNZXRob2QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmVudW1lcmF0ZSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoYWVEZXNjRnJvbUpTVmFsdWUpOgorCiAyMDE2
LTA5LTA3ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBbU3Ry
ZWFtcyBBUEldIFNlcGFyYXRlIGNvbXBpbGUgZmxhZyBmb3IgUmVhZGFibGVTdHJlYW0gYW5kIFdy
aXRhYmxlU3RyZWFtCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lv
biAyMDU1NjYpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAgLTg4NSw4ICs4ODUsMTEgQEAg
Ym9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmV2YWx1YQogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEpTTG9ja0hvbGRlciBsb2NrKHBsdWdpbldv
cmxkKCkudm0oKSk7Ci0gICAgU3Ryb25nPEpTR2xvYmFsT2JqZWN0PiBnbG9iYWxPYmplY3QocGx1
Z2luV29ybGQoKS52bSgpLCBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxk
KCkpKTsKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwor
ICAgIFN0cm9uZzxKU0dsb2JhbE9iamVjdD4gZ2xvYmFsT2JqZWN0KHZtLCBmcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpKTsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBn
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKIAogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdl
c3R1cmVJbmRpY2F0b3IoYWxsb3dQb3B1cHMgPyBPcHRpb25hbDxQcm9jZXNzaW5nVXNlckdlc3R1
cmVTdGF0ZT4oUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKSA6IE51bGxvcHQpOwpAQCAtODk0LDcgKzg5
Nyw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpldmFsdWEKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IEpTQzo6ZXZhbHVhdGUoZXhlYywgbWFrZVNvdXJjZShzY3JpcHQpKTsKICAg
ICAKICAgICBtYXJzaGFsVmFsdWUoZXhlYywgcmVzdWx0LCByZXN1bHREYXRhLCByZXN1bHRMZW5n
dGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTE1LDkgKzkxOCwxMiBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhv
ZE5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKQEAgLTkzMCw3ICs5MzYsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgSlNWYWx1ZSB2YWx1ZSA9
IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgb2JqZWN0LCBhcmdMaXN0
KTsKICAgICAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRhLCBy
ZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtOTQ4LDkgKzk1NCwxMiBA
QCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aW52b2tlCiAgICAgRnJhbWUqIGZy
YW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2Nr
SG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxU
eXBlIGNhbGxUeXBlID0gb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3Qs
IGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCkBAIC05NjIs
NyArOTcxLDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omludm9rZQogICAg
IEpTVmFsdWUgdmFsdWUgPSBjYWxsKGV4ZWMsIG9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBv
YmplY3QsIGFyZ0xpc3QpOwogICAgIAogICAgIG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVz
dWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAg
IHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTk4MCw5
ICs5ODksMTIgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmNvbnN0cgogICAg
IEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdp
bldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJh
bWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwot
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwogCiAgICAgQ29uc3RydWN0RGF0YSBjb25zdHJ1
Y3REYXRhOwogICAgIENvbnN0cnVjdFR5cGUgY29uc3RydWN0VHlwZSA9IG9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShvYmplY3QsIGNvbnN0cnVjdERhdGEpOwpAQCAtOTk1
LDcgKzEwMDcsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Y29uc3RyCiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTQzo6Y29uc3RydWN0KGV4ZWMsIG9iamVjdCwgY29uc3RydWN0
VHlwZSwgY29uc3RydWN0RGF0YSwgYXJnTGlzdCk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4
ZWMsIHZhbHVlLCByZXN1bHREYXRhLCByZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTAxMywxMyArMTAyNSwxNiBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eTo6Z2V0UHJvCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZy
YW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisg
ICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZt
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkp
LT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogICAgIEpT
VmFsdWUgdmFsdWUgPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgIAogICAg
IG1hcnNoYWxWYWx1ZShleGVjLCB2YWx1ZSwgcmVzdWx0RGF0YSwgcmVzdWx0TGVuZ3RoKTsKLSAg
ICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAgICAgCkBAIC0xMDM0LDEzICsxMDQ5LDE2IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRQcm8KICAgICBGcmFtZSogZnJhbWUgPSBjb3Jl
KFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVnaW5Xb3JsZCgpLnZtKCk7CisgICAg
SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS5nbG9iYWxP
YmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9j
ayhleGVjKTsgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiAgICAgCiAgICAgbWFyc2hhbFZhbHVlKGV4ZWMsIHZhbHVlLCByZXN1bHREYXRh
LCByZXN1bHRMZW5ndGgpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA1OCwxNSArMTA3
NiwxOCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0UHJvCiAgICAgRnJh
bWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29y
bGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+
c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAg
SlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7ICAgIAogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRlbWFy
c2hhbFZhbHVlKGV4ZWMsIHZhbHVlRGF0YSwgdmFsdWVMZW5ndGgpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KG9iamVjdCk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXQob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKICAgICAKLSAgICBleGVjLT5jbGVh
ckV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTEwODQsMTQgKzExMDUsMTcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3Rh
bmNlUHJveHk6OnNldFBybwogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3
ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdChwbHVnaW5Xb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOyAgICAKICAg
ICAKICAgICBKU1ZhbHVlIHZhbHVlID0gZGVtYXJzaGFsVmFsdWUoZXhlYywgdmFsdWVEYXRhLCB2
YWx1ZUxlbmd0aCk7CiAgICAgb2JqZWN0LT5tZXRob2RUYWJsZSgpLT5wdXRCeUluZGV4KG9iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgZmFsc2UpOwogICAgIAotICAgIGV4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTExMCwxNSArMTEzNCwxOCBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eTo6cmVtb3ZlCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBs
b2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldv
cmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CiAgICAg
aWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAg
ZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBvYmplY3QtPm1ldGhvZFRh
YmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgICAKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIHJldHVybiB0cnVlOwogfQogICAgIApAQCAtMTEzNiwxNiArMTE2MywxOSBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6cmVtb3ZlCiAgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52bSgpOworICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0KCkuZ2xvYmFs
T2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CiAgICAgaWYgKCFvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpIHsKLSAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICBv
YmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5QnlJbmRleChvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZSk7Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsgICAgCisgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE2MywxMSAr
MTE5MywxNSBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvCiAgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFm
cmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2lu
V29ybGQoKS52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFt
ZS0+c2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CiAg
ICAgYm9vbCByZXN1bHQgPSBvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAKKyAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE4NSwxMSArMTIxOSwxNSBA
QCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6aGFzUHJvCiAgICAgRnJhbWUqIGZy
YW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1lXSk7CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgVk0mIHZtID0gcGx1Z2luV29ybGQoKS52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CisKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmcmFtZS0+c2NyaXB0
KCkuZ2xvYmFsT2JqZWN0KHBsdWdpbldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CiAgICAgYm9vbCBy
ZXN1bHQgPSBvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKLSAgICAKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwor
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKQEAgLTEyMDcsMTEgKzEyNDUsMTQgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6Omhhc01ldAogICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIFZNJiB2bSA9IHBsdWdpbldvcmxkKCkudm0oKTsK
KyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOworCiAgICAgRXhlY1N0YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLmds
b2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRl
ciBsb2NrKGV4ZWMpOwogICAgIEpTVmFsdWUgZnVuYyA9IG9iamVjdC0+Z2V0KGV4ZWMsIG1ldGhv
ZE5hbWUpOwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKICAgICByZXR1cm4gIWZ1bmMuaXNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTIyOSw5
ICsxMjcwLDEyIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXIKICAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBWTSYgdm0gPSBwbHVn
aW5Xb3JsZCgpLnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZy
YW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3QocGx1Z2luV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsK
LSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKICAKICAgICBQcm9wZXJ0eU5hbWVBcnJheSBw
cm9wZXJ0eU5hbWVzKGV4ZWMsIFByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwogICAgIG9iamVj
dC0+bWV0aG9kVGFibGUoKS0+Z2V0UHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSgpKTsKQEAgLTEyNTEsNyArMTI5NSw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjplbnVtZXIKIAogICAgIG1lbWNweShyZXN1bHREYXRh
LCBbZGF0YSBieXRlc10sIHJlc3VsdExlbmd0aCk7CiAKLSAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIwNTU2NikK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjkzNiw2ICs2OTM2LDkgQEAgLSAoQk9PTClzaG91bGRDbG9zZQogI2lmICFQTEFURk9STShJ
T1MpCiBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvbUpTVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkKIHsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKwogICAg
IE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzYyA9IDA7CiAgICAgaWYgKGpzVmFsdWUuaXNC
b29sZWFuKCkpCiAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlw
dG9yV2l0aEJvb2xlYW46anNWYWx1ZS5hc0Jvb2xlYW4oKV07CkBAIC02OTc2LDggKzY5NzksOCBA
QCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgSlNDOjpKU1ZhbHVlIHByaW1pdGl2ZSA9IG9iamVjdC0+dG9Q
cmltaXRpdmUoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAg
ICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBudWxsRGVzY3JpcHRv
cl07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFlRGVzY0Zyb21KU1ZhbHVlKGV4ZWMsIHBy
aW1pdGl2ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU1NjYpCisrKyBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAor
MjAxNi0wOS0wNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IENhdGNoU2NvcGUgYW5kIGZvcmNlIGFsbCBleGNlcHRpb24gY2hlY2tzIHRvIGJlIHZpYSBUaHJv
d1Njb3BlIG9yIENhdGNoU2NvcGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOUE5fRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TlBOX0ludm9rZSk6CisKIDIw
MTYtMDktMDYgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXaW5dIE51bGwgcG9pbnRlciBjcmFzaCB1bmRlciBXZWJWaWV3OjpzY3JvbGxPZmZzZXQuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9QbHVnaW5zL1BsdWdpblBhY2thZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5jcHAJKHJldmlz
aW9uIDIwNTU2NikKKysrIFNvdXJjZS9XZWJLaXQvd2luL1BsdWdpbnMvUGx1Z2luUGFja2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCwxNCArMjEwLDE4IEBAIHN0YXRpYyBib29sIE5QTl9F
dmFsdWF0ZShOUFAgaW5zdGFuY2UsIE4KICAgICAgICAgLy8gUGx1Z2luVmlldywgc28gd2UgZGVz
dHJveSBpdCBhc3luY2hyb25vdXNseS4KICAgICAgICAgUGx1Z2luVmlldzo6a2VlcEFsaXZlKGlu
c3RhbmNlKTsKIAotICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxv
Y2soZXhlYyk7CisgICAgICAgIGF1dG8gZ2xvYmFsT2JqZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAgIFN0cmluZyBzY3JpcHRTdHJpbmcgPSBK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0TlBTdHJpbmdUb1VURjE2KHMpOwogCi0gICAgICAgIEpTQzo6
SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUocm9vdE9iamVjdC0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSwgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFs
dWUoKSk7CisgICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZSA9IEpTQzo6ZXZhbHVhdGUo
ZXhlYywgbWFrZVNvdXJjZShzY3JpcHRTdHJpbmcpLCBKU0M6OkpTVmFsdWUoKSk7CiAKICAgICAg
ICAgSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9OUFZhcmlhbnQoZXhlYywgcmV0dXJuVmFs
dWUsIHZhcmlhbnQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTI0Nyw4ICsyNTEsMTMgQEAgc3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVj
dAogICAgICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290T2JqZWN0ID0gb2JqLT5y
b290T2JqZWN0OwogICAgICAgICBpZiAoIXJvb3RPYmplY3QgfHwgIXJvb3RPYmplY3QtPmlzVmFs
aWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgICAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworCisgICAgICAgIGF1dG8gZ2xvYmFsT2Jq
ZWN0ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIGF1dG8mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgICAgIEpT
Qzo6RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAgICAgICAg
IEpTQzo6SlNWYWx1ZSBmdW5jdGlvbiA9IG9iai0+aW1wLT5nZXQoZXhlYywgSlNDOjpCaW5kaW5n
czo6aWRlbnRpZmllckZyb21OUElkZW50aWZpZXIoZXhlYywgaS0+c3RyaW5nKCkpKTsKICAgICAg
ICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlw
ZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CkBAIC0yNjIsNyArMjcxLDcgQEAg
c3RhdGljIGJvb2wgTlBOX0ludm9rZShOUFAgbnBwLCBOUE9iamVjdAogCiAgICAgICAgIC8vIENv
bnZlcnQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsLgogICAgICAg
ICBKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb05QVmFyaWFudChleGVjLCByZXN1bHRWLCBy
ZXN1bHQpOwotICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
</data>
<flag name="review"
          id="311563"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>